问题
I've seen from various questions on here that if an instance of Excel is opened from Python using:
xl = win32com.client.gencache.EnsureDispatch('Excel.Application')
xl.Visible = True
wb = xl.Workbooks.Open('Test.xlsx')
Then it does not load the default add-ins. I've tried forcing my add-in to load by instead running:
xl = win32com.client.gencache.EnsureDispatch('Excel.Application')
xl.Visible = True
addin = xl.Workbooks.Open('C:/path/addIn.xll')
wb = xl.Workbooks.Open('Test.xlsx')
However, when I do this an instance of Excel opens and I get a security message asking me to verify I want to open this add-in. If I click "Enable this add-in for this session only" Excel immediately closes and does not open my desired xlsx file.
Does anyone have any ideas how to force the add-in to load and then to allow me to open my file?
Thanks very much for your help!
回答1:
I have actually managed to resolve this by borrowing something from this MSDN article relating to doing the same thing with VBA:
http://support.microsoft.com/default.aspx?scid=KB;en-us;q213489
The following now works perfectly:
xl = win32com.client.gencache.EnsureDispatch('Excel.Application')
xl.Visible = True
xl.RegisterXLL('C:/path/addin.xll')
wb = xl.Workbooks.Open('Test.xlsx')
回答2:
I had the same problem, but couldn't use xl.RegisterXLL('C:/path/addin.xla')
from the accepted answer, because it only works with .XLL files, and I had a .XLA file.
Instead, I found that this worked:
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")
回答3:
I have had much better success using Excel via win32com than any of the other methods, but you might want to look at pyxll (https://www.pyxll.com/introduction.html). Here are a few other things:
- Have you checked that
addin.Installed == True
? - Have you tried
AddIns.Add("c:\windows\addins\TSXL\TSXL.xll").Installed = True
? - Try
xl.DisplayAlerts=False
before opening the workbooks Have you tried the four steps in last answer of Automating Excel via COM/Python - standard addins won't load at startup, I copy them here:
- Open the XLA / XLL file representing the addin in question
- Set addins(addin_name).Installed = False
- Addins(addin_name).Add(addin_file_path)
- Set addins(addin_name).Installed = True
来源:https://stackoverflow.com/questions/22169877/load-excel-add-in-using-win32com-from-python