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

问题描述 投票:0回答:6

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

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

python excel vba xlwings
6个回答
18
投票

这尚未实现,但有一个未解决的问题,请参阅此处。同时,您可以像这样解决它(这是针对 Windows 的,但 Mac 版本也可以相应地工作,请再次参见 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

5
投票

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

希望能有所帮助。


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 编程,它真的很强大。


0
投票

如果您已经打开了 Excel,还有另一种简单的方法。

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

0
投票

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

您可以在下面进行更改,

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


0
投票

快速附加问题。 Felix Zumstein 的“Update2”答案对我有用。我可以使用“wb.macro('MyMacro')”调用 Excel 宏。但是,只有当 Excel 中的模块名称为“Module1”时,它才适用于我。如果我修改模块名称,然后尝试“wb.macro('MyModule.MyMacro')”,它不起作用,即使我发现的文献说我应该能够做到这一点(https:/ /docs.xlwings.org/en/latest/api/book.html#xlwings.Book.macro)。有什么想法吗?

© www.soinside.com 2019 - 2024. All rights reserved.