带Office 2013的Python Makepy(Office 15)

带Office 2013的Python Makepy(Office 15),python,excel,win32com,office-2013,Python,Excel,Win32com,Office 2013,我在office 2010中使用python和excel,没有问题。 我使用python的makepy模块绑定到TXCELCOM对象 但是,在另一台计算机上,我安装了office 2013,并且在启动makepy时没有列出excel选项(与office 2010不同,在office 2010中,makepy列出了“Microsoft excel 14.0对象库”) 我在注册表中搜索了“Microsoft Excel 15.0对象库”,它就在那里。 我尝试使用:makepy-d'Microsoft

我在office 2010中使用python和excel,没有问题。 我使用python的makepy模块绑定到TXCELCOM对象

但是,在另一台计算机上,我安装了office 2013,并且在启动makepy时没有列出excel选项(与office 2010不同,在office 2010中,makepy列出了“Microsoft excel 14.0对象库”)

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

非常感谢您的帮助。
谢谢。

在这里,我从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>
win32上的PythonWin 3.3.1(v3.3.1:d9893d13c628,2013年4月6日,20:30:21)[MSC v.1600 64位(AMD64)]。 部分版权1994-2008 Mark Hammond-有关更多版权信息,请参阅“帮助/关于蟒蛇”。 >>> >>> >>>从win32com.client导入gencache >>>gencache.EnsureModule({00020813-0000-0000-C000-0000000000 46}',0,1,8) 正在加载注册表类型库{00020813-0000-0000-C000-0000000000 46}1 8 0 重建:18 >>>将win32com.client作为客户端导入 >>>client.Dispatch(“Excel.Application”) 正如你所看到的,它工作得很好

我已启用gencache模块中的所有打印语句,以供参考


谢谢

问题在于,win32 COM模块仅在
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

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

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

这对我很有帮助,非常感谢!但是,我没有直接修改代码,而是修改了win32的注册表项。win32注册表项的路径无效,而win32注册表项的路径正确。