【发布时间】:2021-09-29 23:38:15
【问题描述】:
我有一堆用于 Google 表格的自定义函数,我目前将其复制粘贴为容器绑定脚本。我想打包成一个独立的附加组件。但是,当我创建一个独立的 Apps 脚本项目并部署它(通过 Deploy > Test Deployments > Test latest code > Install 菜单选项)时,虽然确实安装了插件(例如,我在我的工作表中看到了它的图标),但它没有注册任何我的自定义函数。如何制作一个独立的 Apps 脚本项目,在安装它的电子表格中注册自定义函数?
This question 是相关的,但我认为那里的讨论不适用。特别是,该答案表明脚本必须添加一些自定义菜单项,大概使用类似
的代码function onOpen() {
SpreadsheetApp.getUi().createMenu('My Extension')
.addItem('Enable', 'doNothing')
.addToUi();
}
function doNothing() {
}
因为 Unexplained Reasons™ 在用户通过此类菜单项或其他内容与脚本交互之前,不会注册自定义函数。然而,这个答案是多年前的,而且似乎不起作用。
特别是,当我尝试这样做时,我的独立脚本甚至无法成功添加 Enable 菜单项。我做了一些探索,并提出了一个假设,即我应该添加某种“触发器”,告诉 Google 在用户打开电子表格时运行onOpen 函数,实际上我可以做到这一点在容器绑定脚本中(通过Triggers > Add Trigger > Select event source: From spreadsheet 路径),但我的独立脚本没有From spreadsheet 作为可用的event source,所以我什至不知道如何让我的菜单添加功能运行onOpen 在独立脚本中。也就是说,我什至不知道如何直接添加用户可以与之交互的菜单项以尝试加载自定义功能。
然而,我能够转到清单文件并配置 addOns.common.homepageTrigger.runFunction,并命名一个生成 Card 的函数,该函数包含一个按钮,当按下该按钮时,会添加一个菜单项,希望按下按钮,或者与添加的菜单项的交互失败,会让 Google 相信是时候加载自定义功能了。
但是:没有骰子。 homepageTrigger 有效(生成带有按钮的卡片),按钮有效(通过添加新菜单项),新菜单项有效(通过尽职尽责地调用 doNothing),但这些都不会导致自定义表中提供的功能。这表明我并没有完全无法让我的脚本运行(它肯定已经安装,并且对我有响应,例如,更改按钮文本,表明我不只是停留在旧版本或 w/e 上),并且上面链接的相关问题不适用于我的情况。
而且,不用说,我的代码作为容器绑定脚本工作得很好,所以我很有信心我不会混淆添加自定义函数的基础知识(并使用@customfunction 将它们注册到智能感知中)在 jsdocs 中)。那么,我是否可以通过独立的 Apps 脚本插件在 Google 表格中注册自定义函数?
【问题讨论】:
-
这里是链接 WebApp 的“SO 版本” -> stackoverflow.com/q/30878247/1595451。长话短说:相关问题仍未解决 -> Issue #36763437. "Test as add-on" from standalone project to Google Sheets doesn't link custom functions (rel. stackoverflow.com/a/61887467/1595451)您是否已经尝试过发布您的插件?
-
谢谢!对我来说,“新”部署工作流程(涉及通过谷歌云平台项目进行路由,并且具有不同的公共和私有 iiuc 概念)与该评论适用的旧“测试作为附加”工作流程相匹配,这对我来说并不明显.特别是,即使我进行了非测试“版本化”部署,我也无法让自定义功能正常工作。因此,如果旧状态仍然适用,那么新的解决方法是什么以及如何在新的部署工作流程中使用它仍然存在问题。
-
您是否已经尝试过发布您的插件? (很有可能您必须将精力集中在 P.S. 不要忘记包含自定义菜单,以帮助用户在电子表格上启用插件,以便他们可以使用自定义功能)
标签: google-sheets google-apps-script google-workspace