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

Python实现多.xlsx数据复制至不同子文件夹的.xlsm文件

修改后的适配代码
import os
from pathlib import Path
import openpyxl
from openpyxl import load_workbook


def copy_data(src_file: str, dst_file: str) -> None:
    # 打开文件
    wb_src = load_workbook(src_file, read_only=True)
    ws_src = wb_src["src sheet"]
    wb_dst = load_workbook(dst_file, keep_vba=True)
    ws_dst = wb_dst["dest sheet"]

    # 配置参数
    start_row_src = 2       
    start_row_dst = 10      

    # 计算复制的行数:取源表实际数据行,避免空循环
    max_data_row = ws_src.max_row
    rows2copy = max_data_row if max_data_row <= 100000 else 100000

    # 复制数据:修正偏移量计算逻辑
    row_offset = start_row_dst - start_row_src
    for i in range(start_row_src, rows2copy + 1):
        dst_row = i + row_offset
        ws_dst[f"A{dst_row}"].value = ws_src[f"A{i}"].value
        ws_dst[f"B{dst_row}"].value = ws_src[f"B{i}"].value

    # 保存目标文件,否则修改不会生效
    wb_dst.save(dst_file)
    # 关闭工作簿释放资源
    wb_src.close()
    wb_dst.close()

# 文件目录配置
src_dir_path = "C:/Users/me/Documents/Mysourcefolder/"
dst_root_dir = "C:/Users/me/Documents/Mydestinationfolder/"

# 遍历源文件夹下所有xlsx文件
for src_path in Path(src_dir_path).glob("*.xlsx"):
    # 获取源文件名的前缀(比如ABC_Report.xlsx -> ABC)
    src_filename = os.path.basename(src_path)
    prefix = src_filename.split("_Report.xlsx")[0]
    
    # 构造目标文件路径:根目录/前缀子文件夹/前缀_2023.xlsm
    dst_file = os.path.join(dst_root_dir, prefix, f"{prefix}_2023.xlsm")
    
    # 检查目标文件是否存在,避免报错
    if os.path.exists(dst_file):
        copy_data(str(src_path), dst_file)
        print(f"已完成数据复制:{src_filename} -> {dst_file}")
    else:
        print(f"警告:目标文件不存在,跳过:{dst_file}")

关键修改点说明

  • 路径适配逻辑:从源文件名提取前缀(如ABC),自动拼接目标文件的子文件夹路径,完美匹配你需要的目标根目录/ABC/ABC_2023.xlsm格式
  • 修复核心功能缺失:添加wb_dst.save(dst_file),原代码未保存目标文件,所有修改都不会生效
  • 优化数据复制效率:
    • 源工作簿用read_only=True打开,提升大文件读取速度
    • 用ws_src.max_row获取实际数据行,避免固定100000行的无效循环
    • 修正偏移量计算逻辑,确保源表和目标表的行号对应正确
  • 错误防护:添加目标文件存在性检查,避免因文件缺失导致的运行报错
  • 代码规范修复:修正原代码的缩进错误,补充Path导入(原代码未导入但使用了该类)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:45:38