You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多个输入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:24:05