Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌脚本不会触发_Javascript_Google Apps Script_Google Sheets_Google Apps - Fatal编程技术网

Javascript 谷歌脚本不会触发

Javascript 谷歌脚本不会触发,javascript,google-apps-script,google-sheets,google-apps,Javascript,Google Apps Script,Google Sheets,Google Apps,我正在努力让我的脚本在早上6点自动运行。我已经设置了触发器,在“6-7 am”之间的“日计时器”上运行这个脚本“时间驱动”。我没有收到任何失败通知(设置为立即向我发送电子邮件),但脚本没有运行。当我手动运行它时,它完全按照我所希望的那样工作,但整个要点是使它自动化,所以我不确定我在这里做错了什么。我查找了其他实例,它们似乎已通过删除并重新添加触发器得到修复,但这并不能解决我的问题。我的脚本中有什么东西阻止自动运行吗 function getMessagesWithLabel() { var

我正在努力让我的脚本在早上6点自动运行。我已经设置了触发器,在“6-7 am”之间的“日计时器”上运行这个脚本“时间驱动”。我没有收到任何失败通知(设置为立即向我发送电子邮件),但脚本没有运行。当我手动运行它时,它完全按照我所希望的那样工作,但整个要点是使它自动化,所以我不确定我在这里做错了什么。我查找了其他实例,它们似乎已通过删除并重新添加触发器得到修复,但这并不能解决我的问题。我的脚本中有什么东西阻止自动运行吗

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

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

将getActiveSheet替换为或更好地通过其ID获取工作表(有关详细信息,请参阅)

参考:


您已接近问题的根源。活动的电子表格是脚本绑定到的电子表格,但是没有活动的工作表,因为时间驱动触发器没有“看到”UI。嗯,好吧,这很有意义。有我想要的数据的电子邮件每天都会出现,每种类型都有一封,所以我只需要今天的两封电子邮件,所以我把它限制在有标签的前两封。我尝试了SpreadsheetApp.openById(id).getSheetByName(name)并在参数列表后得到了“Missing(Missing)”作为错误消息,但关闭了代码中仅有的两个圆括号。这里我遗漏了什么?只要id和name是定义的变量,就没有错。(id应该是电子表格的id和工作表的名称,两个字符串)我打赌是一个野生的;导致这个问题的是tho。