我已经阅读了xlwings 的API 文档,并在解释器中使用了 Workbook 和 Sheet 对象,但我不知道如何从 Python 调用宏。
如何使用 xlwings 从 Python 调用 Excel 宏?
这尚未实现,但有一个未解决的问题,请参见此处。同时,您可以像这样解决它(这适用于 Windows,但 Mac 版本可以相应地工作,请在问题中再次查看):
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 更新到 0.9+ 版本时遇到问题。要使用 xlwings 运行 vba 宏,我使用下面编写的代码在个人工作簿 (PERSONAL.XLSB) 中运行宏。对于个人工作簿中的宏,Felix 的更新代码 no2 对我不起作用。
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()
希望它会有所帮助。
我知道这是一个迟到的答案,但上面发布的所有方法都对我不起作用。但我找到了另一种方法,即使用 xlwings 提供的很棒的 api 接口。
这是我用来运行宏的代码:
xlApp = xw.App(visible=False)
wb= xw.books.open('.\\Path\\To\\File.xlsm')
a = xlApp.api.Application.Run("macroTest")
我的宏打开了一个 MsgBox 并返回值 1 只是为了测试,它工作得很好。虽然应该避免使用 MsgBox,因为它是在后台打开的。
顺便提一句。api 接口可用于许多(如果不是全部)对象,如果您习惯于 VBA 编程,它真的很强大。
如果您已经打开了一个excel,另一种简单的方法。
xw.apps.active.macro('yourMacro')(1, 2)
在此处扩展@Felix Zumstein 的答案和所有其他答案,请确保您已禁用宏设置,因为您以后可能会遇到 COM 问题。
你可以在下面改变它,
文件 > 选项 > 信任中心 > 信任中心设置 > 宏设置 > 启用所有宏(不推荐...)