Google Scripts触发器未触发

时间:2017-10-09 13:27:22

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

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

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);


}

2 个答案:

答案 0 :(得分:1)

问题是由于使用getActiveSheet检索UI上显示的工作表,但是当时间驱动的触发器运行时,UI上没有显示工作表。

getSheetByName替换getActiveSheet或更好地通过它的ID获取工作表(有关详细信息,请参阅Get Google Sheet by ID?

参考:

答案 1 :(得分:0)

我不是百分百肯定,但原因可能是在触发期间,如果脚本没有直接链接到电子表格(因为电子表格已关闭),则没有“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')};