如何使用xlwings在列中显示np.array

时间:2016-01-14 16:32:32

标签: python excel xlwings

我在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但它会在一行而不是列中显示结果。 我怎么能纠正这个?

1 个答案:

答案 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对此还不够清楚。