时间驱动触发器在 Google 电子表格中不起作用

Time-driven trigger not working in Google Spreadsheet

我有一个简单的代码,如下所示:

function setValue() {
  var col = "E";
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  var values = sh.getRange("Sheet2!"+col+"1:"+col).getValues()
  var ct = 0;
  while ( values[ct][0] != "" ) {
    ct++;
  }
  ct++;
  sh.getRange(col+ct).setValue(Math.floor((Math.random() * 10) + 1));
};

这是在 E 列上循环以查找第一个空行,并在其中放置一个随机值。这仅用于测试目的,如果我手动触发该功能,则可以正常工作。该函数甚至在我设置 on change 触发器时触发,因此每次我按下退格键或在 Sheet 中执行某些操作时,都会在 列中出现一个新的随机数E。但是,这不适用于时间驱动的触发器。我已经测试了一切,从每分钟设置一个触发器到:

脚本编辑器... --> 资源 --> 所有触发器 --> 时间驱动 --> 分钟计时器

甚至放置此代码:

 ScriptApp.newTrigger("setValue")
   .timeBased()
   .after(1 * 60 * 1000)
   .create();

这假设应该在 1 分钟过去后的给定时间触发该功能。 None 这些工作,我不明白为什么。还有其他方法可以每分钟触发此功能吗?由于该函数也会在 on change 上触发(但这只是一种解决方法),是否有一个脚本可以产生 on change 对 sheet哪个最终会触发这个函数?

此致问候!

将函数命名为 setValue() 以外的名称,因为这已经是 API 中的方法名称,这可能会使编译器感到困惑。

你应该可以使用触发器菜单,我刚更改函数名称后你的代码更新得很好。

顺便说一句,如果您想以编程方式执行此操作,则需要使用 everyMinutes() 方法。

ScriptApp.newTrigger("myFunction")
   .timeBased()
   .everyMinutes(1)
   .create();

如果您希望此函数在电子表格发生变化时触发,您只需使用

 function onEdit(e) {
     myfunction();
 }