使用Python的win32com加载Excel加载项

时间:2014-03-04 10:51:51

标签: python excel win32com

我从这里的各种问题中看到,如果使用以下命令从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 个答案:

答案 0 :(得分: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')

答案 1 :(得分: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")

答案 2 :(得分: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
  • 您是否尝试了Automating Excel via COM/Python - standard addins won't load at startup的最后一个答案中的四个步骤,我将其复制到此处:

    1. 打开代表有问题的插件的XLA / XLL文件
    2. 设置插件(addin_name).Installed = False
    3. 加载项(addin_name)。新增(addin_file_path)
    4. 设置插件(addin_name).Installed = True