pythonwin32com excel com模型开始生成错误

2024-06-09 07:17:08 发布

您现在位置:Python中文网/ 问答频道 /正文

在过去的几天里,我一直在为一些报表自动生成一些透视表。在

简而言之,以下代码运行正常:

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

这将弹出一个excel实例,我可以继续在Python中工作。但是突然之间,今天我的脚本失败了,原因如下:

^{pr2}$

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

又一个有趣的家伙。如果在同一会话中再次执行相同的代码,则会出现不同的错误:

>>> 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

但我特别需要静态分派,因为透视表不能处理动态分派的对象(在后面的代码中):

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

Tags: 代码inimportclientapplicationlineexcelwin32com
1条回答
网友
1楼 · 发布于 2024-06-09 07:17:08

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

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

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

要查找输出目录,请在python控制台/python会话中运行以下命令:

import win32com
print(win32com.__gen_path__)

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

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

相关问题 更多 >