[特殊字符] Python 自动合并 Excel 中重复行 —— 提升表格可读性与美观度

发布于:2025-06-28 ⋅ 阅读:(17) ⋅ 点赞:(0)

在办公中,我们经常需要将 相同行或相同数据 在 Excel 中合并成一个大单元格(如客户名、产品编码等重复内容),提高视觉体验、减少冗余。虽然 Excel 自带“合并单元格”功能,但当数据量大时,手动操作非常低效,Python 自动处理就是最佳方案。

如下图:

✅ 功能概要

  • 针对某一列,自动检测从指定行开始的连续重复数据;

  • 合并这些连续的单元格区间,提升数据可读性;

  • 支持对多列同时批量处理,保留表头不参与操作。

成果展示:

🧩 合并函数详细解释

下面提供一个通用函数 Merge_cells,用于实现合并单元格逻辑。

def Merge_cells(ws, target_list, start_row, col):
    """
    ws          : openpyxl 工作表对象
    target_list : 待处理的列表(如客户名列表),按行顺序提供
    start_row   : 表中数据起始行(跳过表头)
    col         : 目标列的列字母,比如 "B"
    """
    start = end = 0
    reference = target_list[0]

    for i in range(len(target_list)):
        # 当数据变化或到达最后一行时,执行合并动作
        if target_list[i] != reference or i == len(target_list) - 1:
            reference = target_list[i]
            end = i - 1 if target_list[i] != reference else i
            # 合并对应的单元格区域
            ws.merge_cells(f"{col}{start + start_row}:{col}{end + start_row}")
            start = end + 1
  • 遍历 target_list,记录重复数据的起止行索引;

  • 当检测到新值或遍历结束时,利用 merge_cells() 合并对应区域;

  • 合并逻辑通用,可用于任意指定列。

该方法背后调用的是 openpyxl.Worksheet.merge_cells(...),它支持如下两种方式:

ws.merge_cells('A2:D2')
# 或者使用参数形式:
ws.merge_cells(start_row=2, start_column=1, end_row=2, end_column=4)

这是 openpyxl 官方文档中明确支持的用法 topcoder.com+9openpyxl.readthedocs.io+9openpyxl.readthedocs.io+9topcoder.com+5media.readthedocs.org+5openpyxl.readthedocs.io+5

⚙️ 整体处理逻辑

结合上面的函数,我们可以批量处理单个或多个工作表:

from openpyxl import load_workbook

wb = load_workbook('产品清单.xlsx')

for sheet_name in wb.sheetnames:
    ws = wb[sheet_name]
    customer_list, pn_list = [], []

    for row in range(6, ws.max_row - 2):
        customer_list.append(ws[f'B{row}'].value)
        pn_list.append(ws[f'C{row}'].value)

    Merge_cells(ws, customer_list, start_row=6, col="B")
    Merge_cells(ws, pn_list, start_row=6, col="C")

wb.save("产品清单-合并单元.xlsx")
  • 从第 6 行开始读取 B、C 列内容到两个列表;

  • 依次调用 Merge_cells 对客户和产品编码列进行合并;

  • 最后保存带有合并单元格的 Excel 文件。

🧠 合并注意事项

  • merge_cells() 会保留最左上角单元格的内容,其他单元格会被清空但保留格式 ;

  • 多列合并需分别处理,确保列数据顺序一致;

  • 若存在跨工作表不同起始行或列需求,只需调整 start_rowcol 参数即可重用该函数;

  • 合并后若需单元格样式统一,可读取 top-left 单元格属性,并在代码中统一设置。

 更多实用案例,代码,素材如下:

自取链接:https://pan.quark.cn/s/a46f30accea2

✅ 总结

  • 提供了可复用性强的 合并函数 Merge_cells

  • 利用 openpyxl.merge_cells() 实现批量合并;

  • 可扩展至多列、多表处理,适配复杂场景;

  • 是处理重复内容、提高表格可读性的好帮手。

如果你有更多列需要合并,或想添加样式统一、支持单元格拆分(unmerge_cells),也可以继续告诉我,我可以帮你完善这个功能并生成系列博客文章!

 

 

 

 

 

 


网站公告

今日签到

点亮在社区的每一天
去签到