时间驱动的触发器无法在Google电子表格中使用

时间:2015-03-16 15:19:45

标签: javascript google-apps-script google-sheets

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

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 列上循环以查找第一个空行,并在其中放置一个随机值。这仅用于测试目的,如果我手动触发该功能,则工作正常。当我在 触发器上设置时,该函数会触发,因此每当我点击退格键或在Sheet中执行某些操作时,列 E 中会出现一个新的随机数。但是,这不适用于时间驱动的触发器。我已经测试了所有东西,从每分钟设置一次触发器到:

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

甚至放置此代码:

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

假设在1分钟后的某个时间内触发该功能。这些都不起作用,我无法弄清楚原因。是否有其他方法可以每分钟启动此功能?由于该函数也会触发 on change (但这只是一种解决方法),是否有一个脚本在工作表上产生 on change 效果,最终将触发此功能?

最好的问候!!

1 个答案:

答案 0 :(得分:1)

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

您应该可以使用触发菜单,我刚刚更改了函数名后您的代码就更新了。

BTW如果你想以编程方式进行操作,你需要everyMinutes()方法。

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

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

 function onEdit(e) {
     myfunction();
 }