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_curious
build议将其与代码进行集成。 但是如前所述, wilywampa
的答案确实解决了这个问题,你可以照常使用makepy.py
工具。