gpt4 book ai didi

python-win32com excel com模型开始产生错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:52:34 27 4
gpt4 key购买 nike

在过去的几天里,我一直致力于为一些报告自动生成一些数据透视表。

归结为最低限度,以下代码可以正常工作:

import win32com.client    
objExcelApp = win32com.client.gencache.EnsureDispatch('Excel.Application')
objExcelApp.Visible = 1

这将弹出一个 excel 实例,我可以继续使用 Python 工作。但是突然之间,今天我的脚本出现以下错误:

>>>import win32com.client
>>> objExcelApp = win32com.client.gencache.EnsureDispatch('Excel.Application')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files (x86)\Python37-32\lib\site-packages\win32com\client\gencache.py", line 534, in EnsureDispatch
mod = EnsureModule(tla[0], tla[1], tla[3], tla[4], bForDemand=bForDemand)
File "C:\Program Files (x86)\Python37-32\lib\site-packages\win32com\client\gencache.py", line 391, in EnsureModule
module = GetModuleForTypelib(typelibCLSID, lcid, major, minor)
File "C:\Program Files (x86)\Python37-32\lib\site-packages\win32com\client\gencache.py", line 266, in GetModuleForTypelib
AddModuleToCache(typelibCLSID, lcid, major, minor)
File "C:\Program Files (x86)\Python37-32\lib\site-packages\win32com\client\gencache.py", line 552, in AddModuleToCache
dict = mod.CLSIDToClassMap
AttributeError: module 'win32com.gen_py.00020813-0000-0000-C000-000000000046x0x1x9' has no attribute 'CLSIDToClassMap'

代码从昨天到今天没有变化。我不知道发生了什么!!!。

另一个有趣的问题。如果我再次在同一个 session 中执行相同的代码,我会得到一个不同的错误:

>>> objExcelApp = win32com.client.gencache.EnsureDispatch('Excel.Application')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files (x86)\Python37-32\lib\site-packages\win32com\client\gencache.py", line 534, in EnsureDispatch
mod = EnsureModule(tla[0], tla[1], tla[3], tla[4], bForDemand=bForDemand)
File "C:\Program Files (x86)\Python37-32\lib\site-packages\win32com\client\gencache.py", line 447, in EnsureModule
if module.MinorVersion != tlbAttributes[4] or genpy.makepy_version != module.makepy_version:
AttributeError: module 'win32com.gen_py.00020813-0000-0000-C000-000000000046x0x1x9' has no attribute 'MinorVersion'
>>>

所以我跳到一台安装了全新 Windows 的 Windows 机器上,安装 python37 和 pip 安装 pypiwin32。运行完全相同的行,excel 打开就像昨天在我原来的机器上一样。

我尝试卸载并重新安装,但没有成功。知道这里发生了什么吗?

注意:动态调度仍然有效:

import win32com.client
objExcelApp = win32com.client.Dispatch("Excel.Application")
objExcelApp.Visible = 1

但我特别需要静态分派(dispatch),因为数据透视表不能与动态分派(dispatch)的对象一起使用(在我的代码中很晚):

objExcelPivotCache = objExcelWorkbook.PivotCaches().Create(SourceType=win32c.xlDatabase, SourceData=objExcelPivotSourceRange)

最佳答案

我有同样的问题,我按照这里的说明解决了它:https://mail.python.org/pipermail/python-win32/2007-August/006147.html

Deleting the gen_py output directory and re-running makepy SUCCEEDSand subsequently the test application runs OK again.

So the symptom is resolved, but any clues as to how this could havehappened. This is a VERY long running application (think 24x7 foryears) and I'm concerned that whatever caused this might occur again.

要找到输出目录,请在您的 python 控制台/python session 中运行:

import win32com
print(win32com.__gen_path__)

或者,更好的是,命令行中的一行代码:

python -c "import win32com; print(win32com.__gen_path__)"

根据您帖子中的异常消息,您需要删除的目录标题为“00020813-0000-0000-C000-000000000046x0x1x9”。所以删除这个目录,重新运行代码。如果您担心删除它(就像我一样),只需剪切目录并将其粘贴到其他地方即可。

💡请注意,此目录通常位于您的“TEMP”目录中(在 Windows 文件资源管理器中复制粘贴 %TEMP%/gen_py,您将直接到达那里)。

我不知道为什么会发生这种情况,也不知道如何防止它再次发生,但我提供的链接中的说明似乎对我有用。

关于python-win32com excel com模型开始产生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52889704/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com