xlwings — удаленная отладка udf в pydev eclipse

Я хочу отлаживать код udf python в pydev на том же хосте, что и excel. Я просмотрел официальный документ, но не смог понять концепцию или заставить ее работать. . В соответствии с документом я поместил эти строки в конец моего модуля udfs:

if __name__ == '__main__':
    xw.serve()

Док также говорит:

В зависимости от того, какую IDE вы используете, вы можете запускать вещи в режиме «отладки» (например, если вы используете PyCharm или PyDev):

Я не понимаю, что означает фраза управлять вещами выше.

Кроме того, согласно инструкциям pydev для удаленной отладки, в Eclipse необходимо использовать одну из кнопок меню ниже:

  1. Прикрепить к процессу
  2. Сервер отладки Pydev

и добавьте этот код:

import pydevd
pydevd.settrace()

Я смущен тем, какие все шаги нужно выполнить для удаленной отладки в pydev вызовом udf, сделанным из excel. Может ли кто-нибудь поделиться шагами отладки udf и pydev?

Pydev — это 64-разрядная версия Win, а Excel — 2007 (32-разрядная версия).


person Jorge    schedule 06.04.2016    source источник


Ответы (1)


С xlwings вам не потребуется удаленная отладка или подключение к работающему процессу, поэтому нет необходимости вводить какой-либо новый код, например settrace(). На самом деле приятно то, что стандартная отладка работает из коробки с xlwings и, следовательно, с любой IDE.

Вам нужно установить UDF_DEBUG_SERVER = True в настройках VBA. Затем, когда вы пересчитаете электронную таблицу Excel, формулы выдадут вам ошибку.

Это означает, что теперь вам нужно запустить файл Python, который включает это в конце:

if __name__ == '__main__':
    xw.serve()

Эти строки запускают COM-сервер. В Eclipse, если вы просто нажмете Run > Run last launched, он будет работать нормально, т. е. вы увидите любые выходные данные вашего кода (например, команды печати) в консоли PyDev, когда вы снова пересчитаете UDF.

Однако, чтобы код останавливался в точках останова, вам нужно выбрать Run > Debug Last Launched.

person Felix Zumstein    schedule 06.04.2016