我有一堆适用于 Google 表格的自定义函数,目前我将它们复制粘贴为容器绑定(bind)脚本。我想打包成一个独立的附加组件。但是,当我创建一个独立的 Apps 脚本项目并部署它(通过部署 > 测试部署 > 测试最新代码 > 安装
菜单选项)时,虽然插件确实已安装(例如,我在我的工作表中看到它的图标),它没有注册任何我的自定义功能。如何创建一个独立的 Apps 脚本项目,在安装该项目的电子表格中注册自定义函数?
This question是相关的,但我认为那里的讨论不适用。特别是,该答案表明脚本必须添加一些自定义菜单项,大概使用类似的代码
function onOpen() {
SpreadsheetApp.getUi().createMenu('My Extension')
.addItem('Enable', 'doNothing')
.addToUi();
}
function doNothing() {
}
因为在用户通过此类菜单项或其他内容与脚本交互之前,自定义函数不会注册,原因不明™。然而,这个答案是几年前的,似乎不起作用。
特别是,当我尝试执行此操作时,我的独立脚本甚至无法成功添加 Enable
菜单项。我做了一些探索,并提出了一个假设,即我应该添加某种“触发器”,告诉 Google 在用户打开电子表格时运行 onOpen
函数,并且事实上,我可以在容器绑定(bind)的脚本中执行此操作(通过触发器 > 添加触发器 > 选择事件源:来自电子表格
路径),但我的独立脚本没有来自电子表格
作为可用的事件源
,因此我不确定如何让我的菜单添加函数在独立脚本中运行onOpen
。也就是说,我什至不知道如何直接添加用户可以与之交互的菜单项以尝试加载自定义功能。
但是,我能够转到 list 文件并配置addOns.common.homepageTrigger.runFunction
,并命名一个生成 Card 的函数。其中包含一个按钮,按下该按钮会添加一个菜单项,希望按下按钮或与添加的菜单项交互失败时,可以让 Google 相信是时候加载自定义函数了。
但是:没有骰子。 homepageTrigger
工作(生成带有按钮的卡片),按钮工作(通过添加新菜单项),新菜单项工作(通过尽职地调用 doNothing
),但这些都不会导致自定义函数在工作表中可用。这表明我并没有完全无法运行我的脚本(它肯定已安装,并且对我做出响应,例如,更改按钮文本,表明我不仅仅停留在旧版本或 w/e 上),并且上面链接的相关问题不适用于我的情况。
而且,不用说,我的代码作为容器绑定(bind)脚本工作得很好,所以我相当有信心我没有搞砸添加自定义函数的基础知识(并使用 将它们注册到智能感知中) jsdocs 中的@customfunction
)。那么,我是否可以通过独立的 Apps 脚本加载项在 Google 表格中注册自定义函数呢?
最佳答案
问题:
- 你搞混了 Workspace add-ons ,通过 card-based interfaces 工作和 editor add-ons ,其中包括 custom functions 的功能。
部署 > 测试部署 > 测试最新代码 > 安装
指的是测试 Workspace 插件,但您需要一个编辑器插件才能使用自定义功能。 - 目前,自定义函数仅适用于已发布的编辑器插件,而 testing them 则不起作用。 (参见"Test as add-on" from standalone project to Google Sheets doesn't link custom functions)。
解决方案:
关于google-sheets - 使用独立插件向 Google 表格添加自定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69385629/