使用 PyXll 时 Excel 会截断函数返回值

问题描述 投票:0回答:1

我们有一个 Python 函数,可以使用 PyXll 插件在 Excel 中调用。为此,使用以下代码调用该函数:


import myfunction
from pyxll import xl_func
import pandas as pd

@xl_func('float[][], float[]', auto_resize=True)
def myfunction_xl(
    x: Iterable,
    y: Iterable,
) -> Tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame]:
    (
        df1,
        df2,
        df3,
    ) = myfunction(x, y)
    return (
        df1,
        df2,
        df3,
    )

这调用了

myfunction
的代码,它在经过一些计算后返回三个不同大小和列的数据帧的元组。

函数调用在 Excel 中工作正常,但是三个数据框以某种方式被截断并且不显示其内容。

enter image description here

调用其他一些返回长列表的函数时也会发生同样的情况。你能帮我弄清楚如何修复显示器吗?谢谢。

python excel excel-addins pyxll
1个回答
0
投票

那些“DataFrame@X”字符串是对象句柄。它们可以传递给其他 Python 函数,PyXLL 插件会将底层 DataFrame 对象传递给 Python 函数。

要将这些对象句柄转换为 Excel 数组,您需要另一个函数来转换它们。这个转换函数不需要做任何事情,它只需要指定 'dataframe' 作为返回类型 PyXLL 就会为你做转换:

import pandas as pd
from pyxll import xl_func

@xl_func("object df: dataframe")
def expand_df(df):
    if not isinstance(df, pd.DataFrame):
        raise TypeError("Expected a DataFrame object")

    # Will be converted to an Excel array because of the return type
    return df

然后您可以使用对象句柄调用“expand_df”函数来获取 Excel 中显示的值

calling the expand_df Python function from Excel

有关此问题的更多帮助,请参阅此处的(最近更新的)文档https://www.pyxll.com/docs/userguide/pandas.html#returning-multiple-dataframes

© www.soinside.com 2019 - 2024. All rights reserved.