2012-10-29 14 views
1

Я использую python и отлично работаю с Office 2010 и проблем там нет. Я использовал скриптовый модуль python для привязки к объектам txcel com.Python Makepy с Office 2013 (офис 15)

Однако на другом компьютере я установил офис 2013 года, и когда я запустил makepy, в списке не было опции excel (в отличие от Office 2010, где «Библиотека объектов Microsoft Excel 14.0» указана с помощью makepy).

Я искал «Библиотека объектов Microsoft Excel 15.0» в реестре, и он есть. Я попытался использовать: makepy -d 'Microsoft Excel 15.0 Object Library' но это не сработало.

Справка будет очень признательна. Спасибо.

ответ

1

Здесь я копирую пасту из моего win32com и офиса 2015 взаимодействия с Pythonwin консоли:

PythonWin 3.3.1 (v3.3.1:d9893d13c628, Apr 6 2013, 20:30:21) [MSC v.1600 64 bit (AMD64)] on win32. 
Portions Copyright 1994-2008 Mark Hammond - see 'Help/About PythonWin' for further copyright information. 
>>> 
>>> 
>>> from win32com.client import gencache 
>>> gencache.EnsureModule('{00020813-0000-0000-C000-000000000046}', 0, 1, 8) 
Loading reg typelib {00020813-0000-0000-C000-000000000046} 1 8 0 
Rebuilding: 1 8 
<module 'win32com.gen_py.00020813-0000-0000-C000-000000000046x0x1x8' from 'C:\\Python33\\lib\\site-packages\\win32com\\gen_py\\00020813-0000-0000-C000-000000000046x0x1x8.py'> 
>>> import win32com.client as client 
>>> client.Dispatch("Excel.Application") 
<win32com.gen_py.Microsoft Excel 15.0 Object Library._Application instance at 0x75090800> 

Как вы можете видеть его прекрасно работает.

Я включил все инструкции печати в модуле gencache для справки.

Спасибо!

0

Проблема заключается в том, что модуль win32com выглядит только под ключом win32 для записей в реестре Typelib, но Office 15.0 имеет вместо этого несколько ключей win64. Чтобы обойти эту проблему, найти часть Lib/site-packages/win32com/client/selecttlb.py который выглядит следующим образом:

# Only care about "{lcid}\win32" key - jump straight there. 
try: 
    key4 = win32api.RegOpenKey(key3, "%s\\win32" % (lcid,)) 
except win32api.error: 
    continue 

и изменить его следующим образом:

# Only care about "{lcid}\win32" key - jump straight there. 
try: 
    key4 = win32api.RegOpenKey(key3, "%s\\win32" % (lcid,)) 
except win32api.error: 
    try: 
     key4 = win32api.RegOpenKey(key3, "%s\\win64" % (lcid,)) 
    except win32api.error: 
     continue 

Старый вопрос, но я надеюсь, что это поможет кому-то.

0

wilywampa Ответ на этот вопрос исправляет проблему. Тем не менее, combrowse.py в win32com\client\combrowse.py также может быть использован для получения идентификатора интерфейса IID (идентификатор интерфейса) из библиотеки зарегистрированных типов библиотек и последующего объединения его с кодом, как предлагается по @cool_n_curious. Но, как указано выше, ответ wilywampa исправляет проблему, и вы можете просто использовать утилиту makepy.py, как обычно.

Смежные вопросы