11

我已经阅读了xlwings 的API 文档,并在解释器中使用了 Workbook 和 Sheet 对象,但我不知道如何从 Python 调用宏。

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

4

5 回答 5

15

这尚未实现,但有一个未解决的问题,请参见此处。同时,您可以像这样解决它(这适用于 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
于 2015-05-18T20:56:33.340 回答
3

当我将 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()

希望它会有所帮助。

于 2018-03-13T09:34:54.913 回答
1

我知道这是一个迟到的答案,但上面发布的所有方法都对我不起作用。但我找到了另一种方法,即使用 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 编程,它真的很强大。

于 2017-09-21T16:05:56.777 回答
0

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

xw.apps.active.macro('yourMacro')(1, 2)
于 2020-06-11T09:09:20.607 回答
0

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

你可以在下面改变它,

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

于 2020-07-10T01:07:40.170 回答