google-apps-script - onEdit 可以以编程方式创建触发器吗?

标签 google-apps-script google-sheets triggers

我编写了一个简单的脚本,试图以编程方式从 onEdit 函数创建脚本

function onEdit() {
  test();
}

function test() {
  triggerLater();
}

function customMsgBox() {
  Browser.msgBox("hello world");
}

function triggerLater() {
  var date = new Date();
  date.setMinutes(date.getMinutes() + 1);
  try {
    var oneTimeOnly = ScriptApp.newTrigger("customMsgBox")
      .timeBased()
      .at(date)
      .create();
    return oneTimeOnly.getUniqueId();
  }
  catch (e) {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    ss.toast("error");
  }
}

如果我尝试从脚本编辑器运行 onEdit,则会创建触发器,但电子表格上的每次编辑都会在 toast 中收到一条“错误”消息

有人可以帮我理解吗?

最佳答案

onEdit 简单事件处理函数具有有限的权限(即它不能发送电子邮件、打开日历等)。因为它在没有用户权限的情况下运行。因此,它不能设置触发器(没有任何限制,会是一个巨大的安全漏洞)。

如果您希望在您的帐户下创建触发器,请使用可安装的编辑触发器。首先,将 onEdit 函数重命名为其他名称(这样它就不会作为简单的事件处理程序触发),然后转到“资源”菜单并选择要在电子表格编辑事件上运行的函数。看看docs了解更多。

关于google-apps-script - onEdit 可以以编程方式创建触发器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10736454/

相关文章:

sql-server - 插入 View ,而不是触发器、身份、多个表?

css - 如何在点击(或滚动)时触发 CSS-Filter 动画

javascript - 如何仅在 HTML 表格的最后一行设置边框底部样式?

使用 Google App 脚本的电子邮件名称 - 让用户名出现在收件人电子邮件的 "From"部分中

java - 如何将 Gradle + Google Sheets API + Java 制作成单个可下载程序?

javascript - 如果单元格包含值,则可以在 Google 表格中的数据验证中选中复选框

javascript - 将数组作为 URL 参数传递 JavaScript/GAS

google-apps-script - 谷歌应用程序脚本 TextBox 值未传递给 e.parameter.TextBoxName

google-apps-script - 将列和行大小重置为默认值

java - 打开/关闭 wifi 或 gps 时,我的 BroadcastReceiver 被调用两次?