从 xlwings 获取电话表的正确方法是什么?

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

我已经使用

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')
这样的电话,但有时用户在使用时会重命名工作表。获得电话单的正确方法是什么?

python excel vba xlwings
1个回答
0
投票

您可以在定义参数时使用 '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'
© www.soinside.com 2019 - 2024. All rights reserved.