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

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异常。

解决办法

给你几个可行的方案:

  1. 优先升级xlwings版本:后续的xlwings版本(比如0.25及以上)已经修复了这个和Excel 2013的兼容性问题,升级后直接运行你原有代码就能正常工作。
  2. 临时适配代码(不升级版本):如果暂时无法升级,可以调整代码逻辑,比如先创建空白工作簿再打开目标文件,或者显式激活工作簿:
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()
  1. 检查Excel进程残留:有时候后台残留的Excel进程会干扰新的COM调用,可以打开任务管理器结束所有Excel进程后再重新运行代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:52:27