问题描述
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:
-
点击开始菜单并打开控制面板
-
点击卸载程序(或在 Windows XP 中添加/删除程序)
-
找到 Microsoft Office 的条目并单击它。单击它后,您应该会看到一个标记为“更改”的按钮出现在其旁边或列表顶部(取决于您拥有的 Windows 版本)。单击此更改按钮。
-
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