Google表格脚本编辑器触发器无效

时间:2018-01-18 12:34:48

标签: javascript google-sheets

我有一个简单的脚本,它可以在100%的时间内手动运行它,但是如果我设置了一个触发器,它就没有。

我的触发器: enter image description here

我的剧本

function sendEmail() {    
    var sheet = SpreadsheetApp.getActiveSheet();
    var date = new Date();
    var hours = date.getHours();
    var excelCheck = "B" + (hours + 3);
    var excelCheck2 = "C" + (hours + 3);
    var istrue = sheet.getRange(excelCheck).getValue();
    var istrue2 = sheet.getRange(excelCheck2).getValue();
    
    if ( istrue == "TRUE" ){
      MailApp.sendEmail('pedro@pedroferrari.com', 'GA-alert Spam', 'Too many visits in the last hour. Check it up!');
    }
    if ( istrue2 == "TRUE" ){
      MailApp.sendEmail('pedro@pedroferrari.com', 'GA-alert Slow', 'Website is underperforming. Check it up!');
    }
  }
}

如果我手动运行脚本,如果我的Sheet在该单元格中具有TRUE值,我将收到该电子邮件。 即使我使用Utilities.sleep(300 * 1000);执行FOR循环,它也可以,但最长等待时间为5分钟,而且显然不是这样做的。

但是,如果我这样做:

function sendEmail() {    
    var sheet = SpreadsheetApp.getActiveSheet();
    var date = new Date();
    var hours = date.getHours();
    var excelCheck = "B" + (hours + 3);
    var excelCheck2 = "C" + (hours + 3);
    var istrue = sheet.getRange(excelCheck).getValue();
    var istrue2 = sheet.getRange(excelCheck2).getValue();
    
    // This will send
    MailApp.sendEmail('pedro@pedroferrari.com', istrue2, istrue);
    
    // These will not
    if ( istrue == "TRUE" ){
      MailApp.sendEmail('pedro@pedroferrari.com', 'GA-alert Spam', 'Too many visits in the last hour. Check it up!');
    }
    if ( istrue2 == "TRUE" ){
      MailApp.sendEmail('pedro@pedroferrari.com', 'GA-alert Slow', 'Website is underperforming. Check it up!');
    }
  }
}

然后触发器适用于第一封电子邮件,其中变量是正确的主题/内容。它不适用于其他两封电子邮件。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在触发器中,您没有活跃的"上下文了。 因此,使用getActiveSheet似乎并不相关。

您最好指定您要定位的工作表:

SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1")