我有一个简单的脚本,它可以在100%的时间内手动运行它,但是如果我设置了一个触发器,它就没有。
我的剧本
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!');
}
}
}
然后触发器适用于第一封电子邮件,其中变量是正确的主题/内容。它不适用于其他两封电子邮件。
感谢您的帮助!
答案 0 :(得分:1)
在触发器中,您没有活跃的"上下文了。
因此,使用getActiveSheet
似乎并不相关。
您最好指定您要定位的工作表:
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1")