【问题标题】:Load Excel add-in using win32com from Python从 Python 使用 win32com 加载 Excel 加载项
【发布时间】:2014-03-04 10:51:50
【问题描述】:

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

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

非常感谢您的帮助!

【问题讨论】:

  • 您需要与 Excel 交互还是只读取电子表格数据?如果是后者,那么您可以使用例程(甚至可以在 Unix 上工作!)从电子表格(xlrd、python-excel 等)中读取数据。
  • 我需要在 Python 中进行一些计算,将结果传递到 Excel,然后能够使用 Excel 插件提供的函数对这些结果进行操作。我很清楚这可能不是一个理想的设置,但我只是在帮助一个小项目,并不能真正决定他们如何设置一切!
  • 嗨。我还有一些我希望能够在 Python 中加载和使用的 xll Excel 加载项。你有没有找到办法做到这一点?你能分享你的解决方案吗?谢谢
  • 我下面的回答对你不起作用吗?

标签: python excel win32com


【解决方案1】:

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

【讨论】:

  • 很高兴您找到答案并将其发布。这很有趣,因为我遇到了 RegisterLL(虽然不是您引用的那个特定页面,很好找)但这是我没有足够信息来确定它是否相关的一个选项。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我通过 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).Add(addin_file_path)
      4. 设置插件(addin_name).Installed = True

    【讨论】:

    • 感谢您的回复 Schollii!
    • @Ben Np。我很想知道您是否尝试过上述任何方法。
    • 我没有机会(我在发布问题和查看您的回复之间偶然发现了另一个解决方案)。如果我有时间,我会研究他们是否也解决了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 2019-11-26
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多