4

我在 Win32 上使用 Python 与 OneNote 的 COM 互操作进行交互。

这是提取笔记本层次结构的最基本代码:

import win32com.client
onObj = win32com.client.gencache.EnsureDispatch('OneNote.Application.12')
result = onObj.GetHierarchy("",win32com.client.constants.hsNotebooks)
print(result)

请注意OneNote.Application.12,这可以按我的预期工作。

问题是,当我运行 Makepy 时,我实际上是在选择 v15 类型库:

在此处输入图像描述

如果我将代码更改为OneNote.Application.15或者只是OneNote.Application然后我得到一个错误:

TypeError: This COM object can not automate the makepy process - please run makepy manually for this object

请问这是为什么?我在跑:

  • Python 3.3.1(64 位)
  • Pywin 构建 218 (AMD64)
  • 赢 8 x64
  • 办公室 2013 x64
4

2 回答 2

4

检查您的注册表记录,特别是 TypeLib 部分中的键 {0EA692EE-BB50-4E3C-AEF0-356D91732725}:

HKEY_CLASSES_ROOT\TypeLib\{0EA692EE-BB50-4E3C-AEF0-356D91732725}

这种奇怪的行为可能是由于存在无效子键引起的。这个类键必须只包含一个子键“1.1”,没有别的。

此类的正确注册表记录应如下所示:

|- {0EA692EE-BB50-4E3C-AEF0-356D91732725}
|     |- 1.1
|         |-0
|         | |- win32
|         |- FLAGDS
|         |- HELPDIR

键“win32”必须指向 OneNote 可执行文件,例如 C:\PROGRA~1\MICROS~1\Office15\ONENOTE.EXE\3

于 2014-02-28T15:00:19.733 回答
1

其中site-packages\win32com\有一个文件夹F2A7EE29-8BF6-4A6D-83F1-098E366C709Cx0x1x0,其中包含 v12 类型库。还有一个0EA692EE-BB50-4E3C-AEF0-356D91732725x0x1x1.py看起来像 v15 库的文件。

将我的代码更改为:

gencache.EnsureModule('{0EA692EE-BB50-4E3C-AEF0-356D91732725}', 0, 1, 1)
onapp = win32com.client.Dispatch('OneNote.Application.15')

我可以访问 v15 类型库。不过,我仍然不清楚为什么它需要这个明确的参考。

于 2013-05-01T20:02:26.507 回答