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

时间:2015-05-18 16:30:28

标签: python excel excel-vba xlwings vba

我已经阅读了API docs的xlwings,并在解释器中使用了Workbook和Sheet对象,但我无法弄清楚如何从Python调用宏。

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

5 个答案:

答案 0 :(得分:8)

这还没有实现,但它有一个未解决的问题,请参阅here。在此期间,您可以像这样解决它(这适用于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

答案 1 :(得分: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-interface在很多(当不是全部)对象中都可用,如果你习惯了VBA编程,它就非常强大。

答案 2 :(得分:1)

当我将xlwings更新为0.9+版本时,我遇到了问题。 要使用xlwings运行vba宏,我使用下面编写的代码在个人工作簿(PERSONAL.XLSB)中运行宏。 对于我来说,Felix的更新代码no2不适用于个人工作簿中的宏。

import xlwings

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

希望它会有所帮助。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

您可以在下面更改

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