Python Makepy with Office 2013(办公室15)

时间:2012-10-29 12:20:58

标签: python excel win32com office-2013

我正在使用python和excel与office 2010并没有问题。 我使用python的makepy模块来绑定到txcel com对象。

但是,在另一台计算机上,我安装了Office 2013,当我启动makepy时,没有列出excel选项(而不是office 2010,其中'make Excel 14.0对象库'由makepy列出)。

我在注册表中搜索了“Microsoft Excel 15.0 Object Library”,它就在那里。 我尝试使用:makepy -d 'Microsoft Excel 15.0 Object Library' 但那没用。

非常感谢帮助。 感谢。

3 个答案:

答案 0 :(得分:1)

在这里,我从pythonwin控制台复制来自win32com和office 2015交互的粘贴:

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模块中的所有print语句以供参考。

谢谢!

答案 1 :(得分:1)

问题是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

老问题,但我希望这有助于某人。

答案 2 :(得分:0)

wilywampa的答案纠正了这个问题。但是,combrowse.py win32com\client\combrowse.py也可用于从已注册的类型库文件夹中获取IID(接口标识符),然后根据@cool_n_curious的建议将其与代码集成。但如前所述,wilywampa的答案可以解决问题,您可以像往常一样使用makepy.py实用程序。