从 xlwings 调用 Pycharm 中的断点

Posted

技术标签:

【中文标题】从 xlwings 调用 Pycharm 中的断点【英文标题】:Breakpoint in Pycharm when called from xlwings 【发布时间】:2017-11-20 15:42:49 【问题描述】:

当我从 xlwings 调用 python 代码时,我无法让断点工作。

testme.py:

import xlwings as xw

def add(n):
    result = []
    while len(result) < n:
        result.append(1+4)
    return result

def xl_add():
    sht = xw.Book.caller().sheets[0]           
    n = sht.range('B1').options(numbers=int).value
    seq = add(n)
    sht.range('C1').expand('vertical').clear_contents()
    sht.range('C1').options(transpose=True).value = seq

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

我使用此 VBA 代码将 XL 表保存在同一目录中:

Sub CallTestMe()
    RunPython ("import testme; testme.xl_add()")
End Sub

在 xlwings.bas 我将设置更改为:

PYTHON_WIN = "D:\Anaconda3\python.exe"
UDF_DEBUG_SERVER = True

然后我启动了 pycharm 并在 add(n) 中设置了一个断点,然后启动了调试器。

D:\Anaconda3\python.exe "D:\Program Files\JetBrains\PyCharm Community Edition 2017.1.4\helpers\pydev\pydevd.py" --multiproc --qt-support --client 127.0.0.1 --port 18601 --file D:/sletmig/xlwings/testme.py
pydev debugger: process 8684 is connecting

Connected to pydev debugger (build 171.4694.38)
xlwings server running, clsid=506E67C3-55B5-48C3-A035-EED5DEEA7D6D

我调用 VBA 代码,它在 C 列中返回一行 5s 但没有命中断点。在单元格 B1 中,我有一个数字 10。

软件版本 Pycharm 社区版 2017.4 xlwings v0.10.4 Python 3.6.1 :: Anaconda 4.4.0(32 位) Office 2013 32 位 Windows 10、64 位

【问题讨论】:

【参考方案1】:

只能在这样的 UDF 函数中设置断点:

@xw.func
def double_sum(x, y):
    """Returns twice the sum of the two arguments"""
    return 2 * (x + y)                   

def main():
    # To run this with the debug server, set UDF_DEBUG_SERVER = True in the xlwings VBA module
    xw.serve()

if __name__ == '__main__':
    main()

断点是当你在 Pycharm 中启动服务器并从 XL =DOUBLE_SUM(1,2) 调用它时

【讨论】:

以上是关于从 xlwings 调用 Pycharm 中的断点的主要内容,如果未能解决你的问题,请参考以下文章

使用xlwings在excel中的函数调用之间保留python全局变量

xlwings module.py 从 excel 调用 python

断点调试

通过 python 中的 xlwings 调整 Excel 中的数字格式

插上翅膀,让Excel飞起来——xlwings

pycharm的断点调试与TODO标记