我曾经使用这个问题中的信息来运行一个VBA脚本,它在运行我的python代码后执行一些基本的格式化 .
How do I call an Excel macro from Python using xlwings?
具体来说我使用了第一次更新 .
from xlwings import Workbook, Application
wb = Workbook(...)
Application(wb).xl_app.Run("your_macro")
现在我正在使用xlwings的v0.10.0,这段代码不再有效 .
当我尝试v0.10.0的建议新代码时:
wb.app.macro('your_macro')
Python返回一个对象:
<xlwings.main.Macro at 0x92d3198>
我的宏不在Excel中运行 .
文档(http://docs.xlwings.org/en/stable/api.html#xlwings.App.macro)有一个自定义函数的例子,但我有一个脚本可以在Excel中执行多项操作(格式化我从python输出的数据,在工作表中添加一些公式等),我想运行它 .
我确定我在这里缺少一些基本的东西 .
Update 根据Felix Zumstein的建议,我试过:
import xlwings as xw
xlfile = 'model.xlsm'
wb = xw.Book(xlfile)
wb.macro('your_macro')
这返回与wb.app.macro('your_macro')相同的内容:
<xlwings.main.Macro at 0x92d05888>
并且没有在Excel中运行VBA脚本 .
3 回答
你需要使用
Book.macro
. 正如您对文档的链接所说,App.macro
仅适用于不属于工作簿的宏(即插件) . 所以使用:也许你面临的情况与此处所说的相似:Possible bug? xlwings cannot run an Excel macro?
由于某些原因,当宏没有收到某些参数时,它们无法正常运行 . 即使在VBA宏中未使用此参数,也需要该参数 .
示例:以下VBA和python代码可能无法运行:
Python代码:
所以你必须做适当的改变 .
VBA代码:
Python代码:
当我将xlwings更新为0.9版时,我遇到了问题 . 要使用xlwings运行vba宏,我使用下面编写的代码在个人工作簿(PERSONAL.XLSB)中运行宏 . 对于我来说,Felix的更新代码no2不适用于个人工作簿中的宏 .
希望它会有所帮助 .