从 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