我在带有 xlwings 的 python 中有以下代码
@xlfunc
@xlarg('x', 'nparray', ndim=1)
@xlarg('y', 'nparray', ndim=1)
def test_sum(x,y):
return(x+y)
在 excel 中,我提交 ctrl+shift+Enter 但它在一行中而不是在列中显示结果。我该如何纠正这个?
由于您强制输入为形式的 1 维 numpy 数组np.array([1, 2, 3])
,因此结果也是一个 1 维 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]
你是对的,文档对此不够清楚。