现在,我想在满足两个条件时向自己发送电子邮件:
基于此条件,脚本应在20190110触发,因为F中的值为0.7。但是,该脚本不会触发,因为执行时间过长。既然要遍历那么多行,这可能与循环相关吗?
这是我到目前为止所拥有的。我将不胜感激如何真正触发电子邮件。谢谢!
function readCell() {
var sheet = SpreadsheetApp.getActive().getSheetByName('test');
var dates = sheet.getRange('D1:D').getValues(); //date column
var date = null;
var dateRow = 0;
var dateCount = dates.length;
var yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
var yesterdayString = yesterday.toDateString();
for (dateRow; dateRow < dateCount; ++dateCount) {
date = dates[dateRow];
if (date instanceof Date) {
date = date.toDateString();
if (date === yesterdayString) {
++dateRow;
// To account for zero-based array
break;
}
}
}
var value = sheet.getRange('F' + dateRow).getValue();
if (value >= 0.5) {
var result = 'Result found on: ' + date;
MailApp.sendEmail('test@gmail.com', 'Alert', result);
}
};
答案 0 :(得分:0)
您可能想尝试以下方法:
function readCell() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('test');
var rg=sh.getDataRange()
var vA=rg.getValues();
var yesterday=new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()-1);
var yesterdayString=Utilities.formatDate(yesterday, Session.getScriptTimeZone(), "yyyyMMdd")
for(var i=0;i<vA.length;i++) {//Start at one if you have a header line
if (isDate(vA[i][3])) {
var t1=Utilities.formatDate(new Date(vA[i][3]),Session.getScriptTimeZone(),"yyyyMMdd");
if(Utilities.formatDate(new Date(vA[i][3]),Session.getScriptTimeZone(),"yyyyMMdd")==yesterdayString && Number(vA[i][5])>=0.5) {
//MailApp.sendEmail('test@gmail.com','Alert', 'Result found on: ' + Number(i+1))
SpreadsheetApp.getUi().alert(i+1);
}
}
}
}
function isDate(date){
return(Object.prototype.toString.call(date) === '[object Date]');
}
我刚刚用这些数据进行了测试。
警报显示在第11行,即昨天。