首页 文章

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

提问于
浏览
0

我想知道是否有办法创建一个基于时间的触发器使用谷歌应用程序脚本创建的谷歌电子表格 . 我google了很多,没有运气 . 我正在寻找的是,我创建了一个谷歌电子表格并采取了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 回答

  • 1

    这里的问题是你的触发函数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

相关问题