调试#
因为xlwings可以在每种Python环境中运行,因此你可以选择自己喜欢的环境进行调试。
RunPython: 通过
RunPython
调用Python时,可以设置一个mock_caller
以便可以在Excel和Python的函数调用之间自由切换。UDFs: 为了调试用户定义函数,xlwings提供了一个方便的调试服务器。
首先,Excel会在消息框中显示Python错误:

备注
在Mac系统中,如果在 xlwings
被导入之前就有模块或程序包导入失败,不会弹出提示框、状态栏也不会重置。 但是,错误信息仍旧会写入日志文件(/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]['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测试服务器#
仅适用于Windows系统:要调试UDF,只需要在xlwings的 Add-in & Settings 功能区的VBA模块上部选中 Debug UDFs
, 然后再Python源文件的结尾加上下面几行,就可以进行测试了。根据调试时用的Python集成环境,可能需要使用调试模式来运行代码(比如,使用PyCharm或者PyDev时):
if __name__ == '__main__':
xw.serve()
接下来,当你刷新工作表时(用 Ctrl-Alt-F9
),代码会停止你设置的断点处,或者会输出你设置过的打印信息。
下面的截图显示了这PyCharm的社区版集成环境中,代码停在断点处的情况:

备注
当从命令行启动调试服务器的时候,现在这个版本中要终止服务器还没有什么比较优雅的办法,只能是通过关掉命令行窗口来停止进程。