我已经为我们的发动机工作建立了一个结帐系统。该计划的一部分是必须每天进行结帐。我创建了一个脚本,该脚本在当天未填写电子邮件时发送电子邮件。它运行良好,我每天晚上9点和10点触发它。现在,这些钻机有时会停止服务,并且在停工时不需要进行检查。我做到了,所以当他们停止使用钻机时,它就会反映在他们的每日记录中。
我以为我可以正常工作,但是我的第一个钻机停产了,但仍然发送了电子邮件。我认为具有条件条件IF的第三列中的值不是“服务停止”,它将继续,并且如果它确实说“服务停止”,则将停止脚本。我对代码做了什么错?
https://docs.google.com/spreadsheets/d/134DFqUNgUihWacm3hNd4B9Zqe-BYubYRXd-hh15fgK8/edit?usp=sharing
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var lastRow = CountColA();
var lastDate = new Date(sheet.getRange(lastRow,1).getValues());
var thisDate = new Date();
var DateDiff = (thisDate.getTime() - lastDate.getTime())/1000/60/60/24;
var emailSent = lastRow[3]; // Third column
if (emailSent != "Out of service") { // Prevents sending duplicates
if (DateDiff > 0.35) {
MailApp.sendEmail("[email protected]" + "," + "[email protected]", "Unit Has Not Signed Narcotics Form", "BR133 has not signed the narcotics log today");
}
}
}
function CountColA() {
var sheet = SpreadsheetApp.getActiveSheet();
var data = sheet.getDataRange().getValues();
for(var i = data.length-1 ; i >=0 ; i--){
if (data[i][0] != null && data[i][0] != ''){
return i+1 ;
}
}}
var lastRow = CountColA();
[var emailSent=lastrow[3];
但lastRow
不是数组。
因此很难说出此行中的电子邮件已发送:if (emailSent != "Out of service")
sheet.getLastRow();
并获得像这样的列C值:
sheet.getRange(lastRow, 3).getValue();
而且,我测试了您的代码,并且lastDate
变量不正确,因此您应该查看如何从字符串[2]创建日期或在时间戳列中输入日期的数据验证,以便您可以检索日期直接值。
[1] https://developers.google.com/apps-script/reference/spreadsheet/sheet#getlastrow[2] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date