关于安装过WPS导致pywin32无法调用Excel.Application的问题

前几天在完成python脚本编写后,用pyinstaller打包成EXE扔笔记本上准备在检查表格的时候,忽然发现脚本直接异常退出,在vscode上重新运行脚本后发现pywin32在开始调用Excel.Application时出现如下错误:(文件名部分隐去)

Traceback (most recent call last):
  File "d:/XXXX/XX/10月/XXXXX检查/XXXX.py", line 54, in <module>
    xlApp=DispatchEx('Excel.Application')
  File "C:\Python\lib\site-packages\win32com\client\__init__.py", line 113, in DispatchEx
    dispatch = pythoncom.CoCreateInstanceEx(clsid, None, clsctx, serverInfo, (pythoncom.IID_IDispatch,))[0]
pywintypes.com_error: (-2147024703, 'OLE error 0x800700c1', None, None)

如果是出现上述的错误,并不能只通过修改注册表中Excel产品ID中LocalServer和LocalServer32键值指向的程序路径就了事

实际操作中,还是要先看HKEY_CLASSES_ROOT\Excel.Application\CLSID默认的键值

笔者的公司电脑是Excel2007,私人笔记本是Excel2019,在遍寻注册表的过程中以及搜索DCOM配置中找到了以下几个程序ID,有趣的是,两台电脑上的Excel程序ID居然是一样的

组件服务/DCOM配置中记录的Microsoft Excel Application的应用程序ID:
{00020812-0000-0000-C000-000000000046}

一个指向不明的ID,有可能是之前安装Excel2013残留在注册表中的值:
{00020820-0000-0000-C000-000000000046}

WPS表格的程序ID,笔者的WPS表格在注册表里对应的缩写为KET:
{45540001-5750-5300-4B49-4E47534F4655}

笔者电脑上HKEY_CLASSES_ROOT\Excel.Application\CLSID真正正确的键值:
{00024500-0000-0000-C000-000000000046}

如果拿{00020812-0000-0000-C000-000000000046}这串键值去注册表搜索,可以看到这串程序ID是对应到文件关联的,每一种Excel支持的文件格式都会引用这串程序ID

但至于为什么Excel.Application对应的键值是{00024500-0000-0000-C000-000000000046},这个实在没弄明白,但是如果同样搜索这串ID你会发现这串ID其实最后还是关联到了前面的{00020812-0000-0000-C000-000000000046},这样相当于{00020812-0000-0000-C000-000000000046}是被间接引用的,要正确调用Excel.Application就要先调用{00024500-0000-0000-C000-000000000046},然后通过它找到{00020812-0000-0000-C000-000000000046},最后找到Excel程序的路径正常打开EXCEL.EXE

而笔者的电脑上由于重装Excel2019后没有再出现报错,因此无法断定到底是哪里出了问题,但是可以肯定的是当时搜索{00020812-0000-0000-C000-000000000046}时,没有一个叫Excel.Application的键有这串程序ID,在修改这串ID后,报错的信息又和当时一模一样,可见当时引发错误的,就是Excel.Application的键值不正确,因为当时{00020812-0000-0000-C000-000000000046}{00024500-0000-0000-C000-000000000046}都被笔者添加了其他的键值,但是依然无法正常调用

 

参考来源:

【0】雨非林-解决WPS导致Excel.Application调用错误问题 https://www.weivol.cn/2019/02/wps-excel-application-issue/

【1】onereal-关于导出excel,调用Excel.Application报错的解决方法 https://blog.csdn.net/onereal/article/details/87393243?

【2】雪落雨伤-关于调用Excel.Application报错的解决方法 https://blog.csdn.net/l490134872/article/details/80250395

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值