Google 脚本触发器未触发

Google Scripts Trigger not firing

我正在努力让我的脚本在早上 6 点(大约)自动 运行。我将触发器设置为 运行 这个脚本,"Time-Driven",在“早上 6 点到 7 点”之间的 "day timer"。我没有收到任何失败通知(设置为立即通过电子邮件发送给我),但脚本未 运行ning。当我手动 运行 它时,它完全按照我想要的方式工作,但重点是自动化它,所以我不确定我在这里做错了什么。我查找了其他实例,它们似乎已通过删除和重新添加触发器得到修复,但这并不能解决我的问题。我的脚本中有什么东西阻止了 auto-运行 吗?

function getMessagesWithLabel() {

 var destArray = new Array();
 var label= GmailApp.getUserLabelByName('Personal/Testing');
 var threads = label.getThreads(0,2);

  for(var n in threads){
        var msg = threads[n].getMessages();
        var body = msg[0].getPlainBody();
        var destArrayRow = new Array();
        destArrayRow.push('thread has '+threads[n].getMessageCount()+' messages');
          for(var m in msg){
                     destArrayRow.push(msg[m].getPlainBody());
           }
  destArray.push(destArrayRow);           
        }
Logger.log(destArray);
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();
if(ss.getLastRow()==0){sh.getRange(2,1).setValue('getMessagesWithLabel() RESULTS')};
sh.getRange(2,1,destArray.length,destArray[0].length).setValues(destArray);


}

我不是 100% 确定,但这样做的原因可能是在触发器期间没有 "ActiveSpreadsheet" 如果脚本没有直接链接到电子表格(因为电子表格已关闭)。所以你应该尝试使用:

var ss = SpreadsheetApp.openById(id); // id is the id of the spreadsheet
                                      // https://docs.google.com/spreadsheets/d/id_is_here/
var sh = ss.getSheetByName(name); // name of the actual sheet ("Sheet 1" for example)

否则我认为您的代码没有任何问题(除了您使用 label.getThreads(0,2) 将要引入的最大线程数设置为 2,但我认为这是故意的)

此外,您在

中设置 2,1 而不是我假设需要的 1,1
if(ss.getLastRow()==0){sh.getRange(2,1).setValue('getMessagesWithLabel() RESULTS')};

问题是由于使用了 getActiveSheet,因为它检索 UI 上显示的 sheet,但是当您的时间驱动触发器运行时,没有 sheet 显示在 UI.

将 getActiveSheet 替换为 getSheetByName or better get the sheet by it's ID (for details see Get Google Sheet by ID?)

参考: