对于Excel 2013,您可以键入:
o = win32com.client.Dispatch("Excel.Application.15")
因为该程序位于以下某处:
C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE
由于我没有安装任何其他版本,我想如果您只需用您需要的版本替换 15 就可以了 . 您可以看到命令启动的二进制文件的路径,例如 . 过程探索者 .
编辑:这不可能“以编程方式”:(
尝试过这个之后:
excel15 = win32com.client.dynamic.Dispatch("Excel.Application.15")
excel14 = win32com.client.dynamic.Dispatch("Excel.Application.14")
产生这样的对象:
>> print excel15
>> print excel14
在进程资源管理器中只能看到一个Excel(14)实例 . 干
excel15.Visible = True
证实了这一点 .
事实证明,使用自动化来控制两个版本的Excel是不可能的 . 检查注册表,程序( Excel.Application.14 和 15 )共享相同的CLSID . 每个CLSID只有一个 LocalServer (我的计算机上是 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{00024500-0000-0000-C000-000000000046}\LocalServer ) . 此LocalServer指向我计算机上最后安装的版本Excel14(试用版) . 这是 Dispatch 调用创建的唯一对象 .
所有这些都解释为here(§"Using Automation to Control Microsoft Excel") .
有希望
正如我所说,这个 LocalServer 指向最后安装的版本 . 因此,您有机会实现您想要的目标:
要么您有信心手动更改注册表 . 我会说"easy"(更改 LocalServer 指向的应用程序,以及 Excel.Application 条目的默认应用程序),但我更喜欢以下简单的解决方案
重新安装2007应用程序(当然,如果可以的话) . 这是一个糟糕/不优雅但简单的修复 .