Python Pywin& OneNote COM:OneNote.Application.15'无法自动化makepy进程'

时间:2013-04-29 20:15:52

标签: python winapi com onenote

我在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类型的库:

enter image description here

如果我将代码更改为OneNote.Application.15OneNote.Application,则会收到错误消息:

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

为什么这样好?我正在跑步:

  • Python 3.3.1(64位)
  • Pywin build 218(AMD64)
  • 赢8 x64
  • Office 2013 x64

2 个答案:

答案 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类型的库。我仍然不清楚为什么它需要这个明确的参考。