excel 如何从xlwings获得电话单?

vcirk6k6  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(132)

我已经使用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运行时得到以下异常:
例外:不能直接调用Book.caller()。请通过Excel调用或先使用Book.set_mock_caller()设置一个模拟调用者。
然而,这不是一个模拟调用者设置,因为我是从excel调用的。我知道我可以使用像wb = Book('name_of_sheet.xlsm')这样的调用,但有时用户在使用它时会重命名工作表。什么是获得调用工作表的正确方法?

lp0sw83n

lp0sw83n1#

您可以在定义参数时使用'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'

相关问题