我在python with xlwings
中有以下代码@xlfunc
@xlarg('x', 'nparray', ndim=1)
@xlarg('y', 'nparray', ndim=1)
def test_sum(x,y):
return(x+y)
一旦进入excel,我提交ctrl + shift + Enter但它会在一行而不是列中显示结果。 我怎么能纠正这个?
答案 0 :(得分:0)
由于您强制输入为np.array([1, 2, 3])
形式的一维numpy数组,因此结果是一个1-dim numpy数组,它们(如简单列表)在写入时被解释为行方向Excel中。要以列方向编写数组,您需要返回np.array([[1], [2], [3]])
形式的二维数组或列表:[[1], [2], [3]]
。
在您的情况下,您只需将ndim=1
更改为ndim=2
,如果输入也是列,则会以列方向返回。如果您希望将输入保持在1d(无论出于何种原因),那么您可以强制输出为列方向,例如通过这样做:
from xlwings import xlfunc, xlarg
import numpy as np
@xlfunc
@xlarg('x', 'nparray', ndim=1)
@xlarg('y', 'nparray', ndim=1)
def test_sum(x,y):
return(x+y)[:, np.newaxis]
你是对的docs对此还不够清楚。