如何为使用应用程序脚本创建的 google 传播 sheet 创建基于时间的触发器

How to create a time based trigger for a google spread sheet created with apps script

我想知道是否有一种方法可以创建基于时间的触发器,用于使用 google 应用程序 script.I googled 创建的 google 传播 sheet很多但没有 luck.what 我正在寻找的是,我创建了一个 google 传播 sheet 并采用了传播的 id sheet 像这样

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

然后我试图为这种传播创建触发器 sheet 就像这样

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

myTrigger 就是这个

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

我想运行这个触发器,也就是说,这次基于我的传播sheet的触发器是用以前的method.And创建的,现在我找不到办法了。 我正在寻找的是,我想 运行 这次基于此 ID 的价差 sheet 触发 var id = PropertiesService.getScriptProperties().getProperty('ssId'); 我能够使用代码 ScriptApp.newTrigger('myTrigger').forSpreadsheet(id).onEdit().create(); 为此传播 sheet 创建此触发器,但这不是基于时间触发,而不是在编辑上述传播 sheet 时触发。 谢谢。

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

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

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

由于您的目标似乎是设置一个说明上次修改给定范围的时间,我不认为您可以使用基于时间的触发器轻松实现最终目标,为什么不简单地使用 onEdit 触发器?

如果您想通过基于时间的触发器与电子表格进行交互,您需要打开电子表格并获取范围,然后执行操作。

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