pywin32调用Excel报错:无法自动执行makepy,求解决方案
Pywin32操作Excel时出现TypeError:无法自动执行makepy流程
问题详情
脚本用于自动将CSV数据复制粘贴到Excel模板,已正常运行数月,今日触发以下错误:
异常:TypeError
This COM object can not automate the makepy process - please run makepy manually for this object
处理该异常时又触发新错误:
文件 "C:\Users\alfredop\Pack EOL.py",第65行:
excel = win32.gencache.EnsureDispatch("Excel.Application")
已尝试以下方法但均无效:
- 卸载/重装pywin32
- 删除genpy文件夹
- 重启电脑
另外发现pywin32文件夹中找不到makepy.py可执行文件,不确定是否与此问题相关。报错行对应脚本代码如下:
# Convert the CSV data to a DataFrame df = pd.DataFrame([row[:148] for row in final_rows], columns=rows[0][:148]) # Copy the DataFrame to the clipboard pyperclip.copy(df.to_csv(index=False, sep="\t", header=False)) # Open Excel and paste the data into the "DUs_DCH Data" sheet of the "BigHorn DCIR Template" workbook excel = win32.gencache.EnsureDispatch("Excel.Application") workbook = excel.Workbooks.Open(os.path.join(root_dir2, "9MC3DV2-XXX Bighorn DCIR Template.xlsx")) workbook.SaveAs(os.path.join(root_dir, f"1. 9MC3DV2-{root_dir3} EOL {root_dir4} RUN {root_dir5} C3 MANAFLEX DCIR.xlsx")) worksheet = workbook.Worksheets("DUs_DCH Data") worksheet.Range("B2").PasteSpecial() workbook.Save() workbook.Close() excel.Quit()
解决方案
方案1:替换EnsureDispatch为Dispatch
win32.gencache.EnsureDispatch会尝试自动生成COM对象的包装类,改用win32com.client.Dispatch可绕开makepy自动生成流程,直接创建COM实例。修改报错行代码:
import win32com.client # 替换原来的EnsureDispatch为Dispatch excel = win32com.client.Dispatch("Excel.Application")
方案2:手动生成Excel的COM包装类
若必须使用缓存生成的包装类,手动运行makepy工具:
- 打开命令提示符,执行
python -m win32com.client.makepy - 在弹出的列表中找到
Microsoft Excel xx.x Object Library(xx.x对应你的Excel版本),选中后点击确定,工具会自动生成对应的包装类文件。
方案3:检查Excel版本兼容性
确认当前安装的pywin32版本与Excel版本匹配,若近期更新过Excel,需重新安装对应版本的pywin32(优先使用最新稳定版)。
方案4:彻底清理COM缓存
除删除genpy文件夹外,手动清理以下路径的缓存文件:
C:\Users\<你的用户名>\AppData\Local\Temp\gen_py- 确保Excel进程完全关闭后再删除缓存,避免文件被占用。
内容的提问来源于stack exchange,提问作者Alfredo Portillo
相关产品推荐
相关产品推荐

