使用Python Openpyxl拆分合并单元格并填充原合并值
使用Openpyxl拆分合并单元格并填充原值
核心逻辑
Openpyxl中合并单元格仅左上角单元格存储实际值,其余单元格为空。要实现目标需求,需先记录目标列的合并单元格信息,再拆分单元格并为每个位置填充原合并值。
完整代码示例
假设需处理工作表的A列(列号为1,可自行修改目标列):
from openpyxl import load_workbook # 加载工作簿与目标工作表 wb = load_workbook("your_file.xlsx") ws = wb.active # 指定要处理的目标列(1代表A列,2代表B列,以此类推) target_col = 1 # 预先复制所有合并单元格范围,避免遍历中集合结构变化导致异常 merged_ranges = list(ws.merged_cells.ranges) for merged_range in merged_ranges: # 判断当前合并范围是否覆盖目标列 if merged_range.min_col <= target_col <= merged_range.max_col: # 获取合并单元格的原始值(仅左上角单元格有值) original_value = ws.cell(row=merged_range.min_row, column=merged_range.min_col).value # 拆分当前合并单元格 ws.unmerge_cells(str(merged_range)) # 遍历合并范围的所有行,为目标列的每个单元格填充原始值 for row_num in range(merged_range.min_row, merged_range.max_row + 1): ws.cell(row=row_num, column=target_col, value=original_value) # 保存处理后的文件 wb.save("processed_file.xlsx")
关键细节说明
- 预存合并范围:将
ws.merged_cells.ranges转为列表,防止拆分单元格后原集合动态变化导致遍历中断。 - 目标列筛选:仅处理覆盖目标列的合并范围,避免无关操作。
- 值填充逻辑:拆分后遍历原合并范围的所有行,确保每个单元格都被填充原始值。
注意事项
- 处理前建议备份原Excel文件,避免数据意外丢失。
- 若需处理多列,可添加循环遍历多个列号,重复执行上述逻辑。
内容的提问来源于stack exchange,提问作者user20411196
相关产品推荐
相关产品推荐

