我正在尝试编写一个代码,如果C,D或E列(日期)等于今天的日期,该代码将自动触发电子邮件,我一直在研究Or for Js的逻辑运算符,但没有用,我收到“ SyntaxError:意外令牌”错误,是今天的情况还是因为Or运算符(||)?
更新的脚本,现在可以使用const currenttime = new Date()来定义今天的日期了,但是我收到的是每个订单项的电子邮件,而不仅仅是具有今天日期的那些线索?
function sendEmails() {
const sheet1 = SpreadsheetApp.getActive();
const sheet = sheet1.getSheetByName('Sheet1');
const dataRange = sheet.getRange("A1:E1000");
const data = dataRange.getValues();
const currenttime = new Date();
data.forEach(function (rowData) {
const recipient = rowData[0];
const emailAddress = rowData[1];
const Notes = rowData[5];
const date = rowData[2];
const date2 = rowData[3];
const date3 = rowData[4];
if (date == currenttime || date2 == currenttime || date3 == currenttime) {return}
const greeting = 'Dear ' + recipient + ',\n'
const customerMessage = 'Please follow up with ' + Notes + ' By today!';
const greatJobMessage = 'Thanks';
const message = [greeting, customerMessage, greatJobMessage].join('\n');
const subject = 'Reminder to Follow up!';
MailApp.sendEmail("ecmoranavila@gmail.com", subject, message);
})
}
答案 0 :(得分:0)
您的脚本有一些问题需要解决才能使其正常工作。
首先,您的if
条件没有执行任何操作。它的返回值为空(?),然后关闭。发送电子邮件的代码超出条件,因此它将始终运行。
第二,Date声明返回如下字符串:Fri Mar 13 12:30:50 GMT+01:00 2020
,因此除非表中的日期还应指定小时,分钟和秒(错过一秒钟,并且不会发送电子邮件),否则它无用)。
修复:
使用getDisplayValues()获取工作表的数据。否则,脚本将以与工作表完全不同的格式获取日期:
const data = dataRange.getDisplayValues();
在我的工作表中,日期看起来像这样:13-03-2020
,但是您可以使用任何其他format。
格式化当前时间的日期。如前所述,new Date()
返回一个长字符串。您可以使用Utilities class对其进行格式化,以使其与工作表中写入的日期一致:
const currenttime = Utilities.formatDate(new Date(), 'UTC', 'dd-MM-yyyy');
if
条件,使其涵盖其余的代码。另外,请删除return
,因为它没有执行任何操作: if (date == currenttime || date2 == currenttime || date3 == currenttime) {
const greeting = 'Dear ' + recipient + ',\n'
const customerMessage = 'Please follow up with ' + Notes + ' By today!';
const greatJobMessage = 'Thanks';
const message = [greeting, customerMessage, greatJobMessage].join('\n');
const subject = 'Reminder to Follow up!';
MailApp.sendEmail("ecmoranavila@gmail.com", subject, message)}
});
}