使用win32com转换Excel为PDF时出现WorkSheets相关AttributeError如何解决
报错原因
- 核心原因是属性名大小写拼写不符合Excel COM接口规范:工作表集合的正确属性名为
Worksheets,你代码中写的WorkSheets第二个字母S大写,属于拼写错误。 - 次要可能原因:win32com的本地互操作缓存损坏,Office版本更新、pywin32库升级都可能触发该问题,即使拼写正确也会提示找不到属性。
修复方案
1. 优先修正属性名拼写
直接把报错行的wb.WorkSheets(ws_index_list).Select()修改为wb.Worksheets(ws_index_list).Select(),90%的情况可以直接解决问题。
2. 修正拼写后仍报错的处理方案
清理win32com的旧缓存,重新生成接口映射即可,同时建议补充路径解析、进程退出逻辑,避免后续出现文件找不到、Excel后台进程残留的问题,完整参考代码如下:
import win32com.client import os # 清理旧的win32com缓存 win32com.client.gencache.EnsureDispatch("Excel.Application").Quit() win32com.client.gencache.Rebuild() o = win32com.client.gencache.EnsureDispatch('Excel.Application') o.Visible = False # 解析~符号对应的用户目录,避免路径识别失败 wb_path = os.path.expanduser(r'~\Sample Invoice1.xlsx') wb = o.Workbooks.Open(wb_path) ws_index_list = [1] path_to_pdf = os.path.expanduser(r'~/Sample Invoice1.pdf') wb.Worksheets(ws_index_list).Select() wb.ActiveSheet.ExportAsFixedFormat(0, path_to_pdf) # 操作完成后关闭文件、退出Excel进程,避免后台残留占用文件 wb.Close(SaveChanges=False) o.Quit()
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

