各位!
我一直在使用 Python 中的 win32com.client 模块来访问包含 VBA 宏的 Excel 文件的单元格。
代码中的一条语句 xl = win32com.client.gencache.EnsureDispatch("Excel.Application")
一直抛出错误:
AttributeError: module 'win32com .gen_py.00020813-0000-0000-C000-000000000046x0x1x6' 没有属性 'MinorVersion'
有没有人遇到过类似的情况,如果是,有什么可能的补救措施? (我已经在 GitHub 上查看了 win32com 的源代码,但无法从中获得太多意义。)
最佳答案
此属性错误的主要原因是因为您的 COM 服务器已从后期绑定(bind)(动态)转变为早期绑定(bind)(静态)。
- 在后期绑定(bind)中,无论何时调用方法,都会查询对象以查找该方法,如果成功,则可以进行调用。
- 在早期绑定(bind)中,对象模型的信息是根据对象调用提供的类型信息预先确定的。早期绑定(bind)使用 MakePy。此外,早期绑定(bind)区分大小写。
有两种方法可以解决这个问题:
使用动态模块强制您的代码以面向后期绑定(bind)的方式工作。使用示例:
"win32com.client.dynamic.Dispatch()" instead of "win32com.client.Dispatch()"
在面向早期绑定(bind)的方式中使用驼峰敏感关键字。使用示例:
"excel.Visible()" instead of "excel.VISIBLE()" or "excel.visible()"
尝试一下
"win32com.client.dynamic.Dispatch()" instead of "win32com.client.gencache.EnsureDispatch"
因为 win32com.client.gencache.EnsureDispatch 强制 MakePy 进程。
关于python - 使用 win32com 访问 Excel 文件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47608506/