如何使用 xlwings 从 Python 调用 Excel 宏?

How do I call an Excel macro from Python using xlwings?

我已经阅读了 xlwings 的 API docs,并在解释器中使用了 Workbook 和 Sheet 对象,但我不知道如何从 [=17 调用宏=].

如何使用 xlwings 从 Python 调用 Excel 宏?

这还没有实现,但有一个未解决的问题,请参阅 here. In the meantime, you can work around it like so (this is for Windows, but the Mac version works accordingly, see again in the issue):

from xlwings import Workbook
wb = Workbook(...)
wb.application.xl_app.Run("your_macro")

更新:对于更新的版本,你必须做:

from xlwings import Workbook, Application
wb = Workbook(...)
Application(wb).xl_app.Run("your_macro")

更新 2:现在从 >=v0.7.1 开始原生支持此功能。假设,有一个 VBA 函数 YourMacro 求和两个数字:

>>> import xlwings as xw
>>> wb = xw.Book(r'C:\path\to\mybook.xlsm')
>>> your_macro = wb.macro('YourMacro')
>>> your_macro(1, 2)
3.0

我知道这是一个迟到的答案,但上面发布的所有方法都不适合我。 但是我找到了另一种方法,通过使用 xlwings.

提供的令人敬畏的 api-interface

这是我用来 运行 宏的代码:

xlApp = xw.App(visible=False)
wb= xw.books.open('.\Path\To\File.xlsm')
a = xlApp.api.Application.Run("macroTest")

我的宏打开一个 MsgBox 并返回值 1 只是为了测试,它工作得很好。 虽然应该避免使用 MsgBox,因为它是在后台打开的。

顺便说一句。 api 接口在许多(当不是全部)对象中可用,如果您习惯于 VBA 编程,它真的很强大。

我将 xlwings 更新到 0.9+ 版本时遇到问题。 对于带有 xlwings 的 运行 vba 宏,我使用了下面为个人工作簿 (PERSONAL.XLSB) 中的 运行ning 宏编写的代码。 Felix 的更新代码 2 对我不起作用,因为个人工作簿中的宏。

import xlwings as xw

wb = xw.Book(excel_file_path)
app = wb.app
# into brackets, the path of the macro
macro_vba = app.macro("'PERSONAL.XLSB'!my_macro") 
macro_vba()

希望对您有所帮助。

另一个简单的方法,如果你已经打开 excel。

xw.apps.active.macro('yourMacro')(1, 2)

在这里扩展@Felix Zumstein 的答案和所有其他答案,请确保您已禁用宏设置,因为您以后可能会遇到 COM 问题。

您可以在

下进行更改

文件 > 选项 > 信任中心 > 信任中心设置 > 宏设置 > 启用所有宏(不推荐...)