我已经使用
RunPython
一段时间了,下面的结构来自 Excel VBA
Sub GetModel()
RunPython ("from [...] import fill_model; fill_model()")
End Sub
python 函数如下所示,在我更新到 xlwings 0.15.6 之前一直有效。
from xlwings.main import Book
def fill_model():
wb = Book.caller()
现在从 Excel 运行时出现以下异常:
Exception: Book.caller() 不能被直接调用。通过 Excel 调用或先使用 Book.set_mock_caller() 设置模拟调用者。
但是,这不是模拟呼叫者设置,因为我是从 excel 呼叫的。我知道我可以使用像
wb = Book('name_of_sheet.xlsm')
这样的电话,但有时用户在使用时会重命名工作表。获得电话单的正确方法是什么?
您可以在定义参数时使用 'vba' 关键字,然后使用 VBA 对象作为活动工作表名称,如下所示:
@xw.sub
@xw.arg('active_sheet', vba='ActiveSheet.Name')
def my_macro(active_sheet):
sheet = xw.Book.caller().sheets[active_sheet]
sheet.range('A1').value = 'hello world'