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