如何选择win32com.client必须在python中使用的excel版本?

sam*_*sam 10 python windows excel win32com

我有一个excel 2007文件(*.xlsx),它将通过python脚本打开.但问题是我的计算机上安装了两个版本的MS office(2003和2007).虽然我尝试将Excel 2007作为打开xlsx文件的默认应用程序,但win32com.client正在尝试使用Excel 2003打开我的xlsx文件.此外,这将恢复Excel 2003作为默认应用程序.

有没有办法强制win32com.client选择Excel 2007来打开xlsx文件?

Raf*_*ffi 5

对于Excel 2013,您可以键入:

o = win32com.client.Dispatch("Excel.Application.15")
Run Code Online (Sandbox Code Playgroud)

因为该程序位于以下某处:

C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE 
Run Code Online (Sandbox Code Playgroud)

由于我没有安装任何其他版本,我想如果你只需要替换15你需要的版本就可以了.您可以看到命令启动的二进制文件的路径,例如.过程探索者.

编辑:这是不可能的"编程":(

尝试过这个之后:

excel15 = win32com.client.dynamic.Dispatch("Excel.Application.15")
excel14 = win32com.client.dynamic.Dispatch("Excel.Application.14")
Run Code Online (Sandbox Code Playgroud)

产生这样的对象:

>> print excel15
<COMObject Excel.Application.15>
>> print excel14
<COMObject Excel.Application.14>
Run Code Online (Sandbox Code Playgroud)

在进程资源管理器中只能看到一个Excel(14)实例.干

excel15.Visible = True
Run Code Online (Sandbox Code Playgroud)

证实了这一点.

事实证明,使用自动化来控制两个版本的Excel是不可能的.检查注册表,程序(Excel.Application.1415)共享相同的CLSID.LocalServer每个CLSID 只有一个(HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{00024500-0000-0000-C000-000000000046}\LocalServer在我的计算机上).此LocalServer指向我计算机上最后安装的版本Excel14(试用版).这是该Dispatch调用创建的唯一对象.

所有这些都在这里解释(§"使用自动化控制Microsoft Excel").

还有希望

正如我所说,这LocalServer指向最后安装的版本.因此,您有机会实现您想要的目标:

  • 要么您有信心手动更改注册表.我会说"简单"(更改指定的应用程序LocalServer,以及Excel.Application条目的默认应用程序),但我更喜欢以下简单的解决方案
  • 重新安装2007应用程序(当然,如果可以的话).这是一个糟糕/不优雅但简单的修复.