デバッグ

xlwingsを実行するPython環境に合わせて、デバッグ方法を選べます。

  • RunPython: RunPython でPythonを呼び出している場合、 mock_caller を設定することで、ExcelとPythonの間で関数の実行を簡単に行き来できるようになります。

  • UDFs: UDF関数のデバッグには、xlwingsのデバッグ サーバーを利用します。

実行時、Pythonのエラーは、Excelのメッセージボックスに表示されます:

_images/debugging_error.png

注釈

Macの場合、 xlwings のインポートの前にモジュール/パッケージの import が失敗したら、メッセージボックスは表示されず、ステータス バーはリセットされません。ただし、エラーはログファイル(/Users/<User>/Library/Containers/com.microsoft.Excel/Data/xlwings.log)に記録されます。

RunPython

次のサンプルコード(Pythonのソース ファイル my_module.py)を例にします:

# my_module.py
import os
import xlwings as xw

def my_macro():
    wb = xw.Book.caller()
    wb.sheets[0].range('A1').value = 1

if __name__ == '__main__':
    # Expects the Excel file next to this source file, adjust accordingly.
    xw.Book('myfile.xlsm').set_mock_caller()
    my_macro()

my_macro() は、デバッグはPythonから、実行はExcelの Runpython から、ソース コードを変更することなく簡単に実行できます。

Sub my_macro()
    RunPython "import my_module; my_module.my_macro()"
End Sub

UDF デバッグ サーバー

UDFをデバッグするには、アドインおよび設定Debug UDFs をチェックします。 続いて、以下のコードをPythonソース ファイルの最後に追加して実行します。使用しているIDEによっては、コードを "debug" モードで実行する必要があります(例:PyCharmやPyDev)

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

シートの再計算(Ctrl-Alt-F9)時に、ブレークポイントによるコードの停止やprint関数による出力を行えます。

以下のスクリーン ショットは、community バージョンのPyCharmで、コードをブレークポイントで止めたときのものです:

_images/udf_debugging.png

注釈

コマンド プロンプトからデバッグ サーバーを実行している場合、現在のバージョンではデバッグ サーバーのみを終了することができないため、コマンド プロンプトを閉じて終了します。