xlwings设置App(visible=False)触发pywintypes.com_error错误的原因咨询
xlwings设置
visible=False时读取工作表报错的原因及解决办法 我之前也碰到过类似的问题,这其实是xlwings 0.23版本和Excel 2013在后台(不可见)运行模式下的兼容性问题,具体是COM对象调用层面触发的异常。
先梳理下你的问题场景:
当你设置visible=False运行这段代码时:
import xlwings app = xlwings.App(visible=False,add_book=False) book = app.books.open(r'C:\Users\WT5\Desktop\xxx.xlsx') a = [sht.name for sht in book.sheets] print('book.sheets: ', type(book.sheets)) print(a) book.save() book.app.quit()
会触发如下COM错误:
Traceback (most recent call last): File "E:\anaconda3\lib\site-packages\xlwings\_xlwindows.py", line 466, in __call__ return Book(xl=self.xl(name_or_index)) File "E:\anaconda3\lib\site-packages\xlwings\_xlwindows.py", line 156, in __call__ v = self._inner(*args, **kwargs) File "C:\Users\ADMINI~1\AppData\Local\Temp\gen_py\3.8\00020813-0000-0000-C000-000000000046x0x1x8.py", line 39136, in __call__ ret = self._oleobj_.InvokeTypes(0, LCID, 2, (13, 0), ((12, 1),),Index pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147352565), None)
但将visible参数改为True时,代码就能正常运行。
问题根源
Excel 2013的COM组件在后台不可见模式下,对工作表集合(book.sheets)的访问权限或交互逻辑存在特殊限制,而xlwings 0.23版本的底层COM调用没有处理这种场景,最终触发了com_error异常。
解决办法
给你几个可行的方案:
- 优先升级xlwings版本:后续的xlwings版本(比如0.25及以上)已经修复了这个和Excel 2013的兼容性问题,升级后直接运行你原有代码就能正常工作。
- 临时适配代码(不升级版本):如果暂时无法升级,可以调整代码逻辑,比如先创建空白工作簿再打开目标文件,或者显式激活工作簿:
import xlwings app = xlwings.App(visible=False, add_book=True) # 先创建空白工作簿 book = app.books.open(r'C:\Users\WT5\Desktop\xxx.xlsx') book.activate() # 显式激活目标工作簿 a = [sht.name for sht in book.sheets] print('book.sheets: ', type(book.sheets)) print(a) book.save() book.close() # 先关闭目标工作簿 app.quit()
- 检查Excel进程残留:有时候后台残留的Excel进程会干扰新的COM调用,可以打开任务管理器结束所有Excel进程后再重新运行代码。
内容的提问来源于stack exchange,提问作者wei tong
相关产品推荐
相关产品推荐

