word = comtypes.client.CreateObject('Word.Application') 产生错误

问题描述

Windows 10、Anaconda Spyder、Python 尝试将单词“.doc”转换为 PDF 第一步失败

导入 comtypes.client

word = comtypes.client.CreateObject('Word.Application')


获取错误

回溯(最近一次调用最后一次):

文件“”,第 1 行,在 word = comtypes.client.CreateObject('Word.Application')

文件“C:\ProgramData\Anaconda3\lib\site-packages\comtypes\client_init_.py”,第 250 行,在 CreateObject 中 return _manage(obj,clsid,interface=interface)

文件“C:\ProgramData\Anaconda3\lib\site-packages\comtypes\client_init_.py”,第 188 行,在 _manage obj = GetBestInterface(obj)

文件“C:\ProgramData\Anaconda3\lib\site-packages\comtypes\client_init_.py”,第 112 行,在 GetBestInterface interface = getattr(mod,itf_name)

AttributeError: 模块 'comtypes.gen.Word' 没有属性 '_Application'


大多数网站似乎都说这不应该发生???

解决方法

问题:

此问题是由 Windows 注册表中不正确的 COM Interop 设置引起的。
(不是 python 或其库)

我已经使用“comtypes”和“win32api”以及多个 MS Office 版本对此进行了测试。

对 COM 对象的调用似乎存在问题,
关于某些 MS Office 版本。


解决方案 1:

  1. 点击开始菜单并打开控制面板

  2. 点击卸载程序(或在 Windows XP 中添加/删除程序)

  3. 找到 Microsoft Office 的条目并单击它。单击它后,您应该会看到一个标记为“更改”的按钮出现在其旁边或列表顶部(取决于您拥有的 Windows 版本)。单击此更改按钮。

  4. Microsoft Office 安装程序出现后,选择“修复”选项并单击“下一步”让 Microsoft Office 自行修复。此过程完成后,您可能需要重新启动计算机; Microsoft Office 安装程序会在完成后告诉您是否需要执行此操作。


解决方案 2:

安装经过测试且可与 COM 调用配合使用的 MS Office 版本。
以下是我测试过的 MS Office 版本的结果:

适用的 MS Office 版本:2010、2019、365。
非工作 MS Office 版本:2007、2013。


要检查的有用 COM 注册表路径:

MS Word x64:
"HKEY_CLASSES_ROOT\WOW6432Node\Interface{00020970-0000-0000-C000-000000000046}\TypeLib" MS Word x32:
"HKEY_CLASSES_ROOT \Interface{00020970-0000-0000-C000-000000000046}\TypeLib"
两者: "HKEY_CLASSES_ROOT\WOW6432Node\TypeLib{00020970-0000-0000-C000-000000000046}"

  • 8.5 适用于 Office 2010
  • 8.6 适用于 Office 2013
  • 8.7 适用于 Office 2016

COM 接口:
"HKEY_CLASSES_ROOT\WOW6432Node\Interface{000C033A-0000-0000-C000-000000000046}\TypeLib\Version"

  • 2.5(如果用于 Office 2010)
  • 2.7 适用于 Office 2013
  • 2.8 适用于 Office 2016

"HKEY_CLASSES_ROOT\WOW6432Node\Interface{000C0339-0000-0000-C000-000000000046}\TypeLib\Version"

  • 2.5(如果用于 Office 2010)
  • 2.7 适用于 Office 2013
  • 2.8 适用于 Office 2016