Google Sheets自定义函数使用的是Apps Script的哪个部署版本?
Google Sheets 自定义函数的部署版本调用规则
核心结论
首先明确:Google Sheet 工作表内调用的自定义函数,默认始终调用绑定脚本的 @HEAD 版本(也就是你编辑器里最新保存的未发布版本),不会主动关联你创建的任何已命名部署(包括 production 部署)。
这个是 Apps Script 的现有设计逻辑:所有直接从容器(Sheet、Doc 等)内部触发的脚本执行(包括自定义函数、容器绑定的简单触发器比如 onOpen、onEdit),默认都走 @HEAD 版本,只有你主动配置的可安装触发器、部署为 Web App/API 执行的请求,才会关联你指定的部署版本。
实现自定义函数绑定指定部署版本的方案
目前没有官方原生配置项可以直接修改自定义函数的调用版本,但可以通过以下方案实现和你现有生产发布流程对齐:
- 方案1:用库引用间接实现版本绑定
- 把你现有的所有自定义函数代码抽离成一个独立的 Apps Script 项目,作为公共库
- 给这个库打版本,每次迭代完成后发布新的库版本
- 在你绑定 Sheet 的主项目里,引用这个库,并且固定引用的库版本为你 production 对应的版本号
- 主项目里只保留一层极简的包装函数,直接调用库内对应的自定义函数即可,示例代码:
// 主项目里的包装代码,假设你引用的库命名为ProdLib function MY_CUSTOM_FUNC(param1, param2) { return ProdLib.MY_CUSTOM_FUNC(param1, param2); }- 每次要更新生产版本时,只需要在主项目里把库的引用版本改成你新发布的生产版本即可,主项目的 HEAD 不需要做其他改动,也不会影响线上自定义函数的逻辑
- 方案2:发布更新时同步覆盖 HEAD
如果不想改现有代码结构,可以在你用 clasp 更新 production 部署的流程里,加一条自动执行的命令:把当前要发布的 production 分支代码直接 push 到绑定脚本的 HEAD,确保 HEAD 的代码和 production 部署代码完全一致,这样自定义函数运行的代码和触发器运行的代码版本就是对齐的。用 clasp 的话只需要在发布脚本里加一行clasp push即可。
注意事项
- 自定义函数有缓存机制:如果你的函数参数没有变化,Sheet 会缓存返回结果最长几分钟,就算你更新了代码也不会立刻重新计算,测试的时候可以修改参数或者给函数加一个随机数参数强制刷新,比如
=MY_CUSTOM_FUNC(A1, B1, RAND()) - 可安装触发器的版本绑定逻辑不会受上述改动影响,你依然可以让触发器固定跑 production 部署版本。
内容的提问来源于stack exchange,提问作者jkff
相关产品推荐
相关产品推荐

