onEdit可以通过编程方式创建触发器吗?

时间:2012-05-24 11:18:45

标签: google-apps-script

我编写了一个简单的脚本,尝试以编程方式从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 中收到“错误”消息

有人可以帮助我理解吗?

1 个答案:

答案 0 :(得分:3)

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

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