使用Python的win32com加载Excel加载项

Ben*_*Ben 5 python excel win32com

我从这里的各种问题中看到,如果使用以下方法从Python打开Excel实例:

xl = win32com.client.gencache.EnsureDispatch('Excel.Application')
xl.Visible = True
wb = xl.Workbooks.Open('Test.xlsx')
Run Code Online (Sandbox Code Playgroud)

然后它不加载默认加载项.我尝试通过运行强制加载加载项:

xl = win32com.client.gencache.EnsureDispatch('Excel.Application')
xl.Visible = True
addin = xl.Workbooks.Open('C:/path/addIn.xll')
wb = xl.Workbooks.Open('Test.xlsx')
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,Excel的一个实例打开,我收到一条安全消息,要求我验证我是否要打开此加载项.如果我单击"仅为此会话启用此加载项",Excel将立即关闭,并且不会打开我想要的xlsx文件.

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

非常感谢您的帮助!

Ben*_*Ben 6

我实际上通过借用这篇与MSBA做同样事情的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')
Run Code Online (Sandbox Code Playgroud)


rle*_*elr 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")
Run Code Online (Sandbox Code Playgroud)