Python Makepy与Office 2013(办公室15)

我在Office 2010中使用python和excel,在那里没有问题。 我使用python的makepy模块来绑定到txcel com对象。

然而,在另一台电脑上,我安装了office 2013,当我启动makepy时,没有列出excel选项(与office 2010中“Microsoft Excel 14.0 Object Library”由makepy列出相反)。

我在registry中search了“Microsoft Excel 15.0 Object Library”,它就在那里。 我试图使用: makepy -d 'Microsoft Excel 15.0 Object Library'但没有奏效。

帮助将不胜感激。 谢谢。

在这里,我从我的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模块中的所有打印语句以供参考。

谢谢 !

问题是win32com模块只能在Typelibregistry项的win32键下查找,但是Office 15.0有一些win64键。 要解决这个问题,请findLib/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 

老问题,但我希望这可以帮助一个人。

wilywampa的答案纠正了这个问题。 但是, win32com\client\combrowse.py也可以用来从注册的types库文件夹中获取IID(接口标识符),然后按照@cool_n_curiousbuild议将其与代码进行集成。 但是如前所述, wilywampa的答案确实解决了这个问题,你可以照常使用makepy.py工具。