任何人都可以提供帮助。 我有一个简单的谷歌电子表格,使我能够在不同的场地,不同的时间和日期预约代表到各种课程。 我去年使用了相同的电子表格,由Bob Rashkin亲自设置!当代表预订课程时,它完美地工作并发送电子邮件,并且当课程开始9天左右时自动发送电子邮件提醒。
我已经复制了这个术语的电子表格,但是表单拒绝发送提醒电子邮件,我真的可以在这方面做一点帮助吗?
次要问题是,当脚本发送预订确认电子邮件时,它有时会发送两封电话,这会产生很多电话,询问他们是否预订了两次。
请帮助别人
这是我正在使用的提醒脚本
function Reminder() {
var ss=SpreadsheetApp.getActiveSpreadsheet();
var s=ss.getActiveSheet();
var r1=s.getDataRange().getRow()+1;//Start past the header row!!! Doh!
var r2=s.getDataRange().getLastRow();
var mn,m,days,d=new Date(),coursedate=new Date(),dlen=8.64e7,i,course,r,year;//8.64e7
var subject="Just a gentle reminder that you or colleague(s) from your setting have a Paediatric First Aid course coming up in the next week or so. ";
var recipient, body, tail="Please be aware that Entrust (formerly Staffs Early Years) will make a charge for non attendance so";
tail+=" please make sure that you familiarise yourself with the times and dates of the course. ";
tail+="If you need help finding the venue then please follow the link below to find the venue and print off a map if required.";
tail+="\n\nhttp://www.blithfieldsafety.co.uk/venues/";
for (r=r1;r<=r2;r++) {
recipient=s.getRange(r,9).getValue();
course=s.getRange(r, 2).getValue();
body=subject+"\nCourse Details\n"+course+"\n\nDelegate Name: "+s.getRange(r,4).getValue()+"\n\n"+tail; //changed (r,2) to (r,4)
mn=course.match(/Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec/)[0];
m=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"].indexOf(mn);
days=course.match(/(\d{1,2})(st|nd|rd|th)/g);
year=d.getFullYear();
for (i in days) {
coursedate.setMonth(m);
coursedate.setDate(days[i].slice(0,-2));
if ((coursedate-d)/dlen<14 && s.getRange(r,16).getValue()!="mail sent") {
GmailApp.sendEmail(recipient, subject, body);
s.getRange(r,16).setValue("mail sent");//arbitrarily picked col 15
}
}
}
};
答案 0 :(得分:0)
看起来直到课程开始的剩余时间用这一行检查:
if ((coursedate-d)/dlen<14 && s.getRange(r,16).getValue()!="mail sent") {
该行正在进行日期计算,并检查单元格的值是否包含“mail sent”文本。如果单元格没有发送邮件并且日期计算为真,则会发送电子邮件。请注意,除数dlen
是一个硬编码的值。
var mn,m,days,d=new Date(),coursedate=new Date(),dlen=8.64e7,i,course,r,year;//8.64e7
变量dlen
的值设置为常量值8.64e7。但我猜测数学因某种原因不再适用。
dlen
的值为86400000。
一天24小时,一小时60分钟,一分钟60秒。
24 * 60 * 60 =一天86,400秒。因此,显然,86,400,000的数字是一天中秒数的倍数。
我猜每个月都有新课程?
您可以在代码中添加Logger.log()
语句,然后运行它以查看变量值:
Logger.log('coursedate: ' + coursedate);
如果您在代码中添加该行:
for (i in days) {
coursedate.setMonth(m);
Logger.log('coursedate: ' + coursedate);
coursedate.setDate(days[i].slice(0,-2));
Logger.log('coursedate: ' + coursedate);
Logger.log('d: ' + d);
if ((coursedate-d)/dlen<14 && s.getRange(r,16).getValue()!="mail sent") {
这会告诉您在进行计算时,变量coursedate
和d
的值是正确的。
然后你可以想出数学就是这样的原因。要查看Logger.log()
输出,请单击查看菜单,然后选择日志菜单项。记录值列表将显示在窗口中。