Я пытаюсь реализовать UDF через xlwings из существующего сценария python, который реализует win32com.client. Сценарий успешен, если выполняется из оболочки, но завершается с ошибкой автоматизации, если вызывается из соответствующей UDF. С помощью отладки я обнаружил, что ошибка возникает при попытке установить новое значение для sel_range.Interior.Color
, где sel_range
- это объект Range из активного листа (из win32com.client).
В частности, исключение повышается с Python38-32\Lib\site-packages\win32com\client\__init__.py
, строка 482, при попытке вызвать self._oleobj_.Invoke(*(args + (value,) + defArgs))
. Сравнивая запуск из оболочки и из UDF, все объекты и аргументы одинаковы.
К сожалению, я не могу отлаживать дальше в Invoke, и я только начинаю с COM-объектами.
У кого-нибудь есть идея, в чем может быть проблема? Почему у Invoke of the oleobj такое разное поведение? Базовый сценарий полностью основан на win32com, и из xlwings я использую только надстройку с декоратором xw.fun c.
EDIT Я обнаружил, что это действительно желаемое поведение xlwings, и диапазоны не могут быть установлены в UDF. Есть ли обходной путь? Нечто эквивалентное.