如何用Python复制目录最新文件 重命名带今日日期并执行Excel宏
功能实现完整方案
前置依赖
- 需先安装Excel操作库:
pip install pywin32
完整代码
import os import datetime import shutil import win32com.client as win32 # 配置项,替换为你自己的实际路径和宏名 WORK_DIR = r"C:\Users\name\Desktop" MACRO_NAME = "你要运行的宏的名称" FILE_SUFFIX = " - Daily Item Record.xlsm" # 1. 获取目录下最新修改的xlsm文件作为原文件 xlsm_files = [f for f in os.listdir(WORK_DIR) if f.endswith(".xlsm") and "Daily Item Record" in f] if not xlsm_files: raise FileNotFoundError("目标目录下未找到符合规则的xlsm文件") # 按修改时间倒序排序 xlsm_files.sort(key=lambda x: os.path.getmtime(os.path.join(WORK_DIR, x)), reverse=True) original = os.path.join(WORK_DIR, xlsm_files[0]) # 2. 生成带当日日期的目标文件路径 today_str = datetime.datetime.today().strftime("%m.%d.%Y") target = os.path.join(WORK_DIR, f"{today_str}{FILE_SUFFIX}") # 3. 复制文件 shutil.copyfile(original, target) # 4. 刷新PowerQuery并运行宏 excel = win32.Dispatch("Excel.Application") excel.Visible = False # 设为True可以看到Excel运行过程,方便调试 wb = excel.Workbooks.Open(target) # 刷新所有数据连接(包含PowerQuery) wb.RefreshAll() excel.CalculateUntilAsyncQueriesDone() # 运行宏 excel.Run(MACRO_NAME) # 保存关闭 wb.Save() wb.Close() excel.Quit() # 释放COM对象 del excel
配置说明
- 路径替换:将
WORK_DIR修改为你存放日报文件的实际文件夹路径即可,不需要手动指定具体文件名 - 宏名替换:将
MACRO_NAME替换为你Excel文件中实际要运行的宏的名称 - 命名规则适配:如果后续文件名后缀有变化,修改
FILE_SUFFIX即可适配
注意事项
- 运行代码前请关闭所有正在编辑的Excel文件,避免COM调用冲突
- 如果宏有运行权限限制,需要先在Excel信任中心启用宏运行权限
内容的提问来源于stack exchange,提问作者datoro
相关产品推荐
相关产品推荐

