Я уже некоторое время использую 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')
, но иногда пользователи переименовывают лист, когда они его используют. Как правильно получить лист вызова?