如何为使用apps脚本创建的Google电子表单创建基于时间的触发器

时间:2015-02-15 09:23:45

标签: google-apps-script

我想知道是否有办法创建一个基于时间的触发器使用谷歌应用程序脚本创建的谷歌电子表格。我搜索了很多,没有运气。我正在寻找的是,我创建了一个谷歌电子表格和拿这张电子表格的ID就像这样

    var spreadSheet = SpreadsheetApp.create('Google Contacts');
    var id = spreadSheet.getId();
    PropertiesService.getScriptProperties().setProperty('ssId', id);

然后我试图像这样

为这个电子表格创建一个触发器
ScriptApp.newTrigger("myTrigger").timeBased().everyMinutes(1).create();

和myTrigger就是这个

    function myTrigger(e) {
    var range = e.range;
    range.setNote('Last modified: ' + new Date());
}

我想运行这个触发器,即这个基于时间的触发器在我用前一个方法创建的电子表格上。现在我找不到办法。 我正在寻找的是,我想用这个id在电子表格上运行这个基于时间的触发器 var id = PropertiesService.getScriptProperties().getProperty('ssId'); 我能够使用代码ScriptApp.newTrigger('myTrigger').forSpreadsheet(id).onEdit().create();为此电子表格创建此触发器,但这不会基于时间触发,而不是在编辑上述电子表格时触发。 感谢。

1 个答案:

答案 0 :(得分:1)

这里的问题是你的触发函数myTrigger被编码为期望onEdit事件而不是基于时间的触发事件,因此当你的基于时间的触发器调用它时脚本会崩溃。

您可以在脚本编辑器的执行脚本中查看此失败的详细信息。

原因是对e.range的引用,OnEdit触发器e.range是编辑范围,但在基于时间的触发器上,e.range未定义。这是因为基于时间的触发器与任何给定的单元格范围无关。

由于您的目标似乎是设置一个注释,说明上次修改给定范围时,我认为您不能轻易地通过基于时间的触发器实现最终目标,为什么不简单地使用onEdit触发器呢? / p>

如果您想要从基于时间的触发器与电子表格进行互动,则需要打开电子表格并获取范围,然后采取行动。

function myTrigger(e) {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var range = ss.getRange("A1:B1");
    range.setNote('...')

您可以在此处的表格中看到事件与时间驱动触发器的不同属性:https://developers.google.com/apps-script/guides/triggers/events#google_sheets_events