我们有一个 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 中工作正常,但是三个数据框以某种方式被截断并且不显示其内容。
调用其他一些返回长列表的函数时也会发生同样的情况。你能帮我弄清楚如何修复显示器吗?谢谢。
那些“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 中显示的值
有关此问题的更多帮助,请参阅此处的(最近更新的)文档https://www.pyxll.com/docs/userguide/pandas.html#returning-multiple-dataframes