从Python使用win32com加载Excel加载项

2024-05-15 14:54:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我从这里的各种问题中看到,如果从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文件。

有人知道如何强制加载外接程序,然后允许我打开我的文件吗?

非常感谢你的帮助!


Tags: 实例testclienttrueapplicationopenxlsxexcel
3条回答

我也遇到了同样的问题,但无法使用接受的答案中的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")

通过win32com使用Excel比使用其他任何方法都要成功得多,但是您可能想看看pyxll(https://www.pyxll.com/introduction.html)。以下是一些其他事情:

  • 你检查过了吗?
  • 你试过AddIns.Add("c:\windows\addins\TSXL\TSXL.xll").Installed = True吗?
  • 打开工作簿前请尝试xl.DisplayAlerts=False
  • 你试过Automating Excel via COM/Python - standard addins won't load at startup最后一个答案中的四个步骤了吗,我把它们复制到这里:

    1. 打开表示相关加载项的XLA/XLL文件
    2. 设置加载项(加载项名称)。已安装=False
    3. 加载项(加载项名称)。加载项(加载项文件路径)
    4. 设置加载项(加载项名称)。已安装=真

实际上,我是通过借用MSDN文章中有关使用VBA执行相同操作的内容来解决这个问题的:

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')

相关问题 更多 >