我正在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

最佳答案

检查注册表记录,特别是TypeLib部分中的键{0EA692EE-BB50-4E3C-AEF0-356D91732725}:
HKEY_CLASSES_ROOT\TypeLib\{0EA692EE-BB50-4E3C-AEF0-356D91732725}
这个奇怪的Bayvor很可能是由无效子密钥的存在引起的。这个类键必须只包含一个子键“1.1”,而不包含其他任何子键。
此类的正确注册表记录应如下所示:

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

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

07-27 15:18