如何将多个输入Excel工作表的单元格样式复制到输出文件中
Excel多文件堆叠合并并保留单元格样式解决方案
现存代码问题
- 仅处理了第一个输入文件,没有遍历所有待合并的xlsx文件
- 未处理行偏移,新写入的内容会覆盖已有内容,无法实现堆叠效果
- 缺少对齐样式等属性的复制,可能出现样式缺失
完整实现代码
import os from openpyxl import load_workbook from copy import copy # 替换为你自己的实际路径 path1 = "输入文件所在目录路径" path2 = "输出文件存储目录路径" # 筛选所有待合并的xlsx格式文件 infileloc = [x for x in os.listdir(path1) if x.endswith(".xlsx")] # 初始化输出工作簿 wb2 = load_workbook(f"{path2}/output.xlsx") ws2 = wb2.active # 行偏移量:记录当前输出表已写入的最后一行位置,实现多文件内容堆叠 row_offset = 0 for file in infileloc: wb1 = load_workbook(f"{path1}/{file}") # 若需要按同名工作表对应合并,可自行调整逻辑匹配工作表名称,此处默认全部堆叠到输出的激活工作表 for sheet in wb1.sheetnames: ws1 = wb1[sheet] for r in ws1.rows: for c in r: # 行号加上偏移量,避免内容覆盖 target_cell = ws2.cell(row=c.row + row_offset, column=c.column) target_cell.value = copy(c.value) # 全量复制单元格样式 target_cell.fill = copy(c.fill) target_cell.font = copy(c.font) target_cell.number_format = copy(c.number_format) target_cell.border = copy(c.border) target_cell.alignment = copy(c.alignment) # 合并完当前工作表后,累加行数更新偏移量 row_offset += ws1.max_row wb1.close() # 保存最终输出文件 wb2.save(f"{path2}/output.xlsx") wb2.close()
补充说明
- 如果输入文件存在合并单元格,可额外遍历
ws1.merged_cells属性,将合并区域的行坐标加上偏移量后,在输出表执行对应合并操作即可 - 若有表头跳过、指定列合并等特殊需求,可在遍历单元格时增加对应判断逻辑
内容的提问来源于stack exchange,提问作者Nastalius Alamillo
相关产品推荐
相关产品推荐

