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

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

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

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

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

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

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

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

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

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

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

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

    但是我特别需要静态分派,因为数据透视表不适用于动态分派的对象(在我的代码中很晚):

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

    https://stackoverflow.com/questions/52889704/python-win32com-excel-com-model-started-generating-errors