4

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

但是,在另一台计算机上,我安装了 office 2013,当我启动 makepy 时,没有列出任何 excel 选项(与 makepy 列出“Microsoft Excel 14.0 Object Library”的 office 2010 不同)。

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

帮助将不胜感激。谢谢。

4

3 回答 3

6

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

老问题,但我希望这对某人有所帮助。

于 2016-11-03T17:20:34.003 回答
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 模块中的所有打印语句以供参考。

谢谢 !

于 2013-05-12T19:50:32.633 回答
0

wilywampa的回答纠正了这个问题。但是,combrowse.pyatwin32com\client\combrowse.py也可用于从注册的类型库文件夹中获取 IID(接口标识符),然后按照@cool_n_curious. 但如前所述,wilywampa的答案确实纠正了问题,您可以makepy.py像往常一样使用该实用程序。

于 2017-02-17T05:37:25.073 回答