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

如何用Python+openpyxl实现多Excel源文件数据批量复制到对应目标文件

批量实现Excel指定区域数据复制(基于openpyxl)

核心思路

将单文件的复制逻辑封装为可复用函数,通过定义文件配对列表批量处理40组源/目标文件,避免重复编写相同代码。

完整批量处理代码

import openpyxl
from pathlib import Path

def copy_excel_data(source_path, dest_path, source_sheet, source_range, dest_sheet, dest_range):
    """
    复制指定Excel文件的指定区域数据到目标文件的指定区域
    参数:
        source_path: 源Excel文件路径
        dest_path: 目标Excel文件路径
        source_sheet: 源文件待复制工作表名称
        source_range: 源文件待复制单元格区域(如"A9:B100000")
        dest_sheet: 目标文件待粘贴工作表名称
        dest_range: 目标文件待粘贴单元格区域(如"A2:B100000")
    """
    # 提前检查文件是否存在,避免加载报错
    if not Path(source_path).exists():
        print(f"警告:源文件 {source_path} 不存在,跳过")
        return
    if not Path(dest_path).exists():
        print(f"警告:目标文件 {dest_path} 不存在,跳过")
        return

    try:
        # 加载源文件
        wbo = openpyxl.load_workbook(source_path)
        wso = wbo[source_sheet][source_range]

        # 加载目标文件(保留VBA宏)
        wbd = openpyxl.load_workbook(dest_path, keep_vba=True)
        wsd = wbd[dest_sheet][dest_range]

        # 逐单元格复制数据值
        for row1, row2 in zip(wso, wsd):
            for cell1, cell2 in zip(row1, row2):
                cell2.value = cell1.value

        # 保存修改后的目标文件
        wbd.save(dest_path)
        print(f"处理完成:{source_path} → {dest_path}")
    except Exception as e:
        print(f"处理 {source_path} → {dest_path} 时出错:{str(e)}")

# ------------------- 配置区域 -------------------
# 定义所有需处理的源/目标文件配对,每个元组对应一组文件的参数
file_pairs = [
    # 示例:对应你提供的单文件案例
    ("ABC_Export.xlsx", "ABC_2023.xlsm", "Report Data", "A9:B100000", "Sheet1", "A2:B100000"),
    # 添加剩余39组配对,格式与示例一致
    ("DEF_Export.xlsx", "DEF_2023.xlsm", "Report Data", "A9:B100000", "Sheet1", "A2:B100000"),
    ("GHI_Export.xlsx", "GHI_2023.xlsm", "Report Data", "A9:B100000", "Sheet1", "A2:B100000"),
    # ... 继续补充其他配对
]

# ------------------- 执行批量处理 -------------------
for pair in file_pairs:
    copy_excel_data(*pair)

关键说明

  • 函数封装:将重复的单文件操作逻辑打包成函数,后续调整复制规则(如修改区域、添加格式复制)只需改动函数内部。
  • 集中配置:所有文件配对统一管理在file_pairs列表中,添加或修改配对直观方便。
  • 异常防护:单个文件处理失败不会中断整个批量任务,错误信息可帮助快速排查问题。
  • 存在性检查:提前验证文件是否存在,避免因文件缺失导致的加载错误。

扩展优化建议

如果源文件和目标文件命名有规律(如XXX_Export.xlsx对应XXX_2023.xlsm),可自动生成配对列表,无需手动逐个输入:

# 示例:自动匹配同目录下的源/目标文件
source_dir = Path("./")
file_pairs = []
# 遍历所有以_Export.xlsx结尾的源文件
for source_file in source_dir.glob("*_Export.xlsx"):
    # 生成对应的目标文件名
    dest_file_name = source_file.name.replace("_Export.xlsx", "_2023.xlsm")
    dest_file = source_dir / dest_file_name
    if dest_file.exists():
        file_pairs.append(
            (str(source_file), str(dest_file), "Report Data", "A9:B100000", "Sheet1", "A2:B100000")
        )

内容的提问来源于stack exchange,提问作者ohmandy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:20:32