代码之家  ›  专栏  ›  技术社区  ›  emmalo

谷歌脚本触发器未触发

  •  2
  • emmalo  · 技术社区  · 7 年前

    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 回复  |  直到 7 年前
        1
  •  1
  •   Imme    7 年前

    我不是百分之百确定,但这可能是因为在触发器期间,如果脚本未直接链接到电子表格,则没有“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')};
    
        2
  •  1
  •   Wicket    7 年前

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

    getSheetByName 或者最好通过ID获取表单(有关详细信息,请参阅 Get Google Sheet by ID? )

    参考: