[Python] python-win32com excel com model started generating errors

Discussão em 'Python' iniciado por Stack, Março 26, 2025.

  1. Stack

    Stack Membro Participativo

    Over the last few days, I have been working on automating the generation of some pivot tables for a number of reports.

    Boiled down to the minimum, the following code was working without issue:

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


    This would pop-up an instance of excel and I could continue working in Python. But suddenly, today my scripts are failing with the following:

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


    The code has not changed from yesterday to today. I have no idea what is happening!!!.

    Another interesting kicker. if I do the same code in the same session again I get a different error:

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


    So I jump over to a windows machine with a fresh windows install, install python37 and pip install pypiwin32. Run the very same lines and excel opens just like it did yesterday on my original machine.

    I tried un-installing and re-installing with no luck. Any idea what is going on here?

    NOTE: Dynamic dispatch still works:

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


    But I specifically need static dispatch as Pivot Tables won't work with a dynamically dispatched object (much later in my code):

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

    Continue reading...

Compartilhe esta Página