win32com.client打开Excel错误

时间:2015-10-21 18:51:13

标签: python-3.x

一个简单的问题

import win32com.client as win32 
Excel = win32.gencache.EnsureDispatch('Excel.Application') 

上面的代码上周有效,但现在它产生了错误。

AttributeError: 'module' object has no attribute 'CLSIDToPackageMap'

2 个答案:

答案 0 :(得分:5)

删除C:\ Temp \ gen_py后,上面的代码再次起作用。希望它能省事!

答案 1 :(得分:0)

此属性错误的主要原因是因为您的COM服务器已从后期绑定(动态)更改为早期绑定(静态)。

  • 在后期绑定中,每当调用一个方法时,都会向该对象查询该方法,如果成功,则可以进行调用。
  • 在“早期绑定”中,对象模型的信息是根据对象调用提供的类型信息预先确定的。早期绑定使用MakePy。同样,早期绑定也区分大小写。

有两种方法可以解决此问题:

  1. 使用动态模块来强制您的代码以面向后期的方式工作。使用示例:

    "win32com.client.Dispatch()" instead of "win32.gencache.EnsureDispatch('Excel.Application')" 
    
  2. 使用面向驼峰的敏感关键字作为面向早期绑定的方式。使用示例:

    "excel.Visible()" instead of "excel.VISIBLE()" or "excel.visible()"
    

我猜想,该代码可在删除gen_py文件夹后的第一次运行中使用,但由于第二次运行会抛出错误,因为win32.gencache.EnsureDispatch是早期的绑定Dispatch,将再次创建gen_py文件夹。