我很难让我的脚本在早上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);
}
答案 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')};