使用Python中的win32com加载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实例,并收到一条安全消息,要求我validation是否要打开此加载项。 如果我单击“仅此会话启用此加载项”Excel立即closures,并不会打开我所需的xlsx文件。

有没有人有任何想法如何强制插件加载,然后让我打开我的文件?

非常感谢您的帮助!

我实际上已经设法通过从这个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') 

我通过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的最后一个答案中的四个步骤- 标准的插件不会在启动时加载 ,我在这里复制它们:

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

我有同样的问题,但不能使用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")