Python Pywin & OneNote COM: OneNote.Application.15 'cannot automate the makepy process'

Darren Beale picture Darren Beale · Apr 29, 2013 · Viewed 7k times · Source

I'm interacting with OneNote's COM interop using Python on Win32.

Here's the most basic code to pull out notebook hierarchy:

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

Note the OneNote.Application.12, this works as I'd expect.

The thing is that when I run Makepy I'm actually selecting the v15 type library:

enter image description here

If I change the code to be either OneNote.Application.15 or just OneNote.Application then I get an error:

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

Why is this please? I'm running:

  • Python 3.3.1 (64bit)
  • Pywin build 218 (AMD64)
  • Win 8 x64
  • Office 2013 x64

Answer

Zdenek picture Zdenek · Feb 28, 2014

Check your registry record, in particular key {0EA692EE-BB50-4E3C-AEF0-356D91732725} in TypeLib section:

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

This strange bevahior is probably caused by existence of invalid subkeys. This class key have to contain only a single subkey "1.1" and nothing else.

The correct registry record for this class should look as follows:

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

The key "win32" have to point to OneNote executable, e.g. C:\PROGRA~1\MICROS~1\Office15\ONENOTE.EXE\3