0

我在带有 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 但它在一行中而不是在列中显示结果。我该如何纠正这个?

4

1 回答 1

0

由于您强制输入为形式的 1 维 numpy 数组np.array([1, 2, 3]),因此结果也是一个 1 维 numpy 数组,当写入 Excel 时,它们(如简单列表)被解释为行方向。np.array([[1], [2], [3]])要以列方向编写数组,您需要返回表单或列表的二维数组: [[1], [2], [3]]

在您的情况下,您可以简单地更改ndim=1ndim=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]

你是对的,文档对此不够清楚。

于 2016-01-14T22:03:09.643 回答