UDF 装饰器

xlwings.func(category='xlwings', volatile=False, call_in_wizard=True)

用装饰器装饰的函数xlwings.func在运行“导入Python UDFs”时将被导入为Function到Excel中。

参数:

category整数或字符串,默认为“xlwings”

1-14代表内置类别,对于用户定义的类别使用字符串

在版本0.10.3中添加。

volatile布尔值,默认为False

标记一个用户定义的函数为易失性。一个易失性函数在工作表中的任何单元格进行计算时都必须重新计算。非易失性函数仅在输入变量发生变化时重新计算。如果不在用于计算工作表单元格的用户定义函数中,则此方法无效。

在版本0.10.3中添加。

call_in_wizard布尔值,默认为True

设置为False以抑制函数向导中的函数调用。

在版本0.10.3中添加。

xlwings.sub()

用装饰器装饰的函数xlwings.sub在运行“导入Python UDFs”时将被导入为Sub(即宏)到Excel中。

xlwings.arg(arg, convert=None, **options)

将转换器和选项应用于参数,另见Range.options().

示例:

转换为二维numpy数组:x into a 2-dimensional numpy array:

import xlwings as xw
import numpy as np

@xw.func
@xw.arg('x', np.array, ndim=2)
def add_one(x):
    return x + 1
xlwings.ret(convert=None, **options)

将转换器和选项应用于返回值,另见Range.options().

示例

  1. 抑制返回的DataFrame的索引和标题:

import pandas as pd

@xw.func
@xw.ret(index=False, header=False)
def get_dataframe(n, m):
    return pd.DataFrame(np.arange(n * m).reshape((n, m)))
  1. 动态数组:

注意

如果您的Excel版本支持新的原生动态数组,则您不需要做任何特殊操作,并且不应该使用expand装饰器!要检查您的Excel版本是否支持它,请查看您是否有=UNIQUE()公式可用。原生动态数组于2018年9月底在Office 365 Insider Fast中引入。

expand='table'将UDF转换为动态数组。目前,您不能将易失性函数作为动态数组的参数使用,例如,您不能使用=TODAY()作为动态数组的一部分。另外请注意,动态数组需要在其底部和右侧留出空行和空列,并且会无警告地覆盖现有数据。

与标准Excel数组不同,动态数组从单个单元格像标准函数一样使用,并根据返回数组的维度自动扩展:

import xlwings as xw
import numpy as np

@xw.func
@xw.ret(expand='table')
def dynamic_array(n, m):
    return np.arange(n * m).reshape((n, m))

在版本0.10.0中添加。