python - 使用 win32com 访问 Excel 文件的问题

标签 python excel win32com

各位!
我一直在使用 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)区分大小写。

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

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

    "win32com.client.dynamic.Dispatch()" instead of "win32com.client.Dispatch()" 
    
  2. 在面向早期绑定(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/

相关文章:

python - 如何使用 python 和 bot 框架创建一个简单的 Skype 机器人

python - 为什么 `pandas.read_csv` 不是 `pandas.DataFrame.to_csv` 的倒数?

html - 从vba中的下拉框中选择各种选项

Python通过win32com向Outlook任务添加超链接

python - 如何使用python将excel表格粘贴到word中

python - Pandas : Merge 2 dataframe based on common column which contains dictionary

python - scipy 的 RegularGridInterpolator 能否通过一次调用同时返回值和梯度?

c# - 如何重新计算单元格的公式?

javascript - Google Sheets - 用于计算忽略文本单元格的两行加权平均值的数组公式

python - 有没有Powerpoint上Python win32com操作的文档?