通过win32com从Python加载Excel插件
我在这里看到的各种问题中,有人提到如果通过Python打开Excel实例,使用:
xl = win32com.client.gencache.EnsureDispatch('Excel.Application')
xl.Visible = True
wb = xl.Workbooks.Open('Test.xlsx')
那么默认的插件是不会加载的。我尝试通过运行以下代码来强制加载我的插件:
xl = win32com.client.gencache.EnsureDispatch('Excel.Application')
xl.Visible = True
addin = xl.Workbooks.Open('C:/path/addIn.xll')
wb = xl.Workbooks.Open('Test.xlsx')
但是,当我这样做时,Excel会打开一个窗口,并且我会收到一个安全提示,询问我是否确认要打开这个插件。如果我点击“仅在此会话中启用此插件”,Excel会立刻关闭,并且不会打开我想要的xlsx文件。
有没有人知道如何强制加载插件,然后让我打开我的文件呢?
非常感谢你的帮助!
3 个回答
1
我发现通过win32com使用Excel的效果比其他方法要好得多,不过你也可以看看pyxll(https://www.pyxll.com/introduction.html)。这里还有一些其他的建议:
- 你检查过
addin.Installed == True
吗? - 你试过
AddIns.Add("c:\windows\addins\TSXL\TSXL.xll").Installed = True
吗? - 在打开工作簿之前,试试
xl.DisplayAlerts=False
。 你尝试过在通过COM/Python自动化Excel - 标准插件在启动时无法加载的最后一个回答中的四个步骤吗?我把它们复制过来了:
- 打开代表你要使用的插件的XLA / XLL文件。
- 设置addins(addin_name).Installed = False。
- 添加插件:Addins(addin_name).Add(addin_file_path)。
- 设置addins(addin_name).Installed = True。
5
我也遇到过同样的问题,但我不能使用 xl.RegisterXLL('C:/path/addin.xla')
这个方法,因为它只适用于 .XLL 文件,而我手头的是 .XLA 文件。
不过,我发现这个方法可以解决我的问题:
xl = win32com.client.gencache.EnsureDispatch('Excel.Application')
# Need to load the addins before opening the workbook
addin_path = r'C:\path\addin.xla'
xl.Workbooks.Open(addin_path)
xl.AddIns.Add(addin_path).Installed = True
wb = xl.Workbooks.Open(r"C:\my_workbook.xlsm")
6
我其实是通过借鉴了一篇关于用VBA做同样事情的MSDN文章,成功解决了这个问题:
http://support.microsoft.com/default.aspx?scid=KB;en-us;q213489
现在下面的代码运行得非常好:
xl = win32com.client.gencache.EnsureDispatch('Excel.Application')
xl.Visible = True
xl.RegisterXLL('C:/path/addin.xll')
wb = xl.Workbooks.Open('Test.xlsx')