← 返回工具清单 | 首页

Excel 合并单元格拆分并回填:unmerge 后每个格子补上原值

2026-10-08 · 本文所有输出均为作者在本机真实运行结果

同事发来的表,"部门"列是合并单元格:研发部占了 2 行、人事部占了 3 行。看着整齐,但只有每块左上角的格子里有值——你想筛选某个部门、用 vlookup 按部门匹配、或者做透视表,出来的全是空白。手动一格一格填?合并区块一多就疯。

合并单元格的真实数据形态

合并只是"显示上合并",底层只有左上角那个单元格存值,其余格子是空的。所以要做的事就两步:解除合并 → 把左上角的值抄进区块里的每个格子。

完整脚本(openpyxl,20 行)

from openpyxl import load_workbook

def unmerge_fill(path, out):
    wb = load_workbook(path)
    ws = wb.active
    for rng in list(ws.merged_cells.ranges):   # 注意必须先拷成 list
        v = ws.cell(rng.min_row, rng.min_col).value
        ws.unmerge_cells(str(rng))
        for rr in range(rng.min_row, rng.max_row + 1):
            for cc in range(rng.min_col, rng.max_col + 1):
                ws.cell(rr, cc).value = v
    wb.save(out)

unmerge_fill('in.xlsx', 'out.xlsx')

实测:3 部门 6 人,回填全对

测试数据:研发部合并 2 行、市场部 1 行(未合并)、人事部合并 3 行。跑完后:

剩余合并区: 0
['研发部', '张三', 3000]
['研发部', '李四', 4200]
['市场部', '王五', 3500]
['人事部', '赵六', 2800]
['人事部', '钱七', 3100]
['人事部', '孙八', 2900]

横向合并(比如一行里"备注"横跨 B2:C2)同样能补齐——实测 B2/C2 都填上了"重要备注"。

边界验证

3 个真坑

💡 合并单元格还有更多变体(跨 Sheet 批量拆、保留格式拆分、按条件重新合并),如果你的表结构更刁钻,我可以帮你写定制脚本。
相关:批量合并PDF并按原文件拆分还原(pypdf实测)
看看服务与价格 → 脚本类 19.9 元,交付前先在你给的真实数据上跑通。虚拟物品交付后不退款,未达承诺免费重做。