有没有办法发布使用 OnEdit 触发器的附加组件?

Is there a way to publish an add-on that uses the OnEdit trigger?

我目前正在开发一个预算插件,允许用户在输入交易金额时自动更新他们的每月交易金额,无论是收入还是支出。该插件使用可安装的触发器 onMyEdit(e) 来更新每月交易金额。例如,如果用户在单元格 A1 中输入他们在 1 月份花费了 5 美元,则 1 月份的费用单元格将更新为 =SUM(A1)。该脚本有一个用户可以输入的设置菜单,因此它知道电子表格的边界。该脚本通过使用 documentProperties 管理用户输入的设置来维护它们。在文档中,我发现简单的触发器无法在附加组件上使用,因为它们缺少授权,而且我不知道可安装的触发器是否也可以使用。

我能否发布使用此可安装触发器的附加组件,onMyEdit(e)?我应该用 'Enable on this Document' 复选框更新设置菜单,以便脚本知道要在哪个电子表格上启用还是放弃拥有 onEdit 附加组件的整个想法?

这是我的第一次堆栈溢出 post,如果您需要更多说明,请告诉我。我对使用 Google Apps 脚本能做什么感到很困惑。感谢您查看我的问题。

如何在Add-ons

中使用触发器

如 add-ons 中触发器的文档中所述,您可以在 Add-ons 中使用简单触发器和 onEdit 可安装触发器 - 因此限制会有所不同,具体取决于类型您更喜欢使用的触发器。

重要的是要知道对于Add-ons的具体情况:

Add-ons can programmatically create and modify installable triggers with the Apps Script Script service. Add-on installable triggers can't be created manually. Unlike simple triggers, installable triggers can use services that require authorization.

见: Installable triggers in add-ons

如何为 Add-on 创建可安装的触发器以及脚本如何知道用户正在处理哪个 sheet?

流程如下:

  • 创建一个简单的 onOpen 触发器,它将创建自定义菜单 - 针对已打开的特定价差sheet
  • 将一个函数绑定到自定义菜单,该函数将 build 以编程方式触发 onEdit
  • 以编程方式构建触发器时,您需要将触发器指定为参数to which spreadsheet 应链接触发器
  • 显而易见的选择是活动传播sheet - 自定义菜单功能来自的传播运行。

样本:

function onInstall(e) {
  onOpen(e); 
}
function onOpen(e) {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Custom Menu')
  .addItem('Add a trigger', 'addTriggers')
  .addToUi();
}


function addTriggers() {
  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('doItOnEdit')
    .forSpreadsheet(ss)
    .onEdit()
    .create();     
  }
function doItOnEdit(){
  console.log("An edit has taken place");
}