我在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
为什么这样好?我正在跑步:
答案 0 :(得分:4)
检查您的注册表记录,特别是TypeLib部分中的密钥{0EA692EE-BB50-4E3C-AEF0-356D91732725}:
HKEY_CLASSES_ROOT \类型库\ {0EA692EE-BB50-4E3C-AEF0-356D91732725}
这种奇怪的bevahior可能是由无效子密钥的存在引起的。此类键必须只包含一个子键“1.1”而不包含其他任何内容。
此类的正确注册表记录应如下所示:
|- {0EA692EE-BB50-4E3C-AEF0-356D91732725}
| |- 1.1
| |-0
| | |- win32
| |- FLAGDS
| |- HELPDIR
密钥“win32”必须指向OneNote可执行文件,例如C:\ PROGRA〜1 \ MICROS〜1 \ Office15 \ ONENOTE.EXE \ 3
答案 1 :(得分:1)
在site-packages\win32com\
中有一个文件夹F2A7EE29-8BF6-4A6D-83F1-098E366C709Cx0x1x0
,其中包含v12类型库。还有一个文件0EA692EE-BB50-4E3C-AEF0-356D91732725x0x1x1.py
,看起来像v15 lib。
将我的代码更改为:
gencache.EnsureModule('{0EA692EE-BB50-4E3C-AEF0-356D91732725}', 0, 1, 1)
onapp = win32com.client.Dispatch('OneNote.Application.15')
我可以访问v15类型的库。我仍然不清楚为什么它需要这个明确的参考。