# VBA: 用户自定义函数 (UDFs)
本教程将帮助您快速了解如何编写用户自定义函数。
>[info]注意
·UDF目前仅在Windows上可用。
·有关如何控制参数行为和返回值的详细信息,请查看[转换器和选项](converters.md)。
·有关可用装饰器及其选项的全面概述,请查看相应的API文档:[api](api.md)。
## 一次性Excel准备
1) 在`文件>选项>信任中心>信任中心设置>宏设置`下启用`信任访问VBA项目对象模型`
2. 通过命令提示符安装加载项:`xlwings addin install`(参见[加载项](addin.md))。
## 工作簿准备
启动新项目的最简单方法是在命令提示符下运行`xlwings quickstart myproject`(请参阅[命令行客户端](command_line.md))。 这会自动将xlwings引用添加到生成的工作簿。
## 一个简单的UDF
默认的插件设置需要一个Python源文件,其方式与`quickstart`一样:
* 在与Excel文件相同的目录中
* 与Excel文件同名,但使用`.py`结尾而不是`.xlsm`。
或者,您可以通过xlwings功能区中的`UDF Modules`指向特定模块。
假设您有一个工作簿`myproject.xlsm`,那么您可以在`myproject.py`中编写以下代码:
~~~
import xlwings as xw
@xw.func
def double_sum(x, y):
"""返回两个参数之和的两倍"""
return 2 * (x + y)
~~~
* 现在单击xlwings选项卡中的`Import Python UDFs`以获取对`myproject.py`所做的更改。
* 在单元格中输入公式`= double_sum(1,2)`,您将看到正确的结果:
![](https://i.vgy.me/WWFx3y.png)
* 文档字符串(三引号)将在Excel中显示为函数描述。
>[info]注意
·如果更改函数参数或函数名称,则只需重新导入函数。
·自动拾取实际函数中的代码更改(即,在下一次计算公式时,例如,由`Ctrl-Alt-F9`触发),但导入的模块中的更改不会。 这是Python导入工作方式的行为。 如果要确保所有内容都处于新鲜状态,请单击`Restart UDF Server`。
·当函数导入Excel时,`@xw.func`装饰器仅由xlwings使用。 它告诉xlwings它应该创建一个VBA包装函数的函数,否则它