【发布时间】:2021-09-22 05:28:56
【问题描述】:
我正在使用 Google 表格发送电子邮件通知(此处不提供 Google 表单)。我的消息文本有问题。
本质上,电子表格会根据用户数据添加新行。它增加了五列:
目标是电子表格随后向每个学生发送一封电子邮件,告诉他们在哪里报告。它应该只给每个学生发送一次电子邮件,但对于每封电子邮件,姓名、学院教师和请求教师字段应该是动态的。
工作原理:如果您只有一行数据(或一行新行),它会发送正确的信息,并记录他们已收到通知。无论是向一个人还是多个人(一个新行或多个)发送电子邮件,它至少会发送一条消息,并记录该消息已发送。
什么不起作用:如果您有不止一行的新数据,它会向所有人发送电子邮件,但每封电子邮件中的姓名、学院教师和请求教师变量仅参考到第一行新数据。因此,Harry、Seamus 和 Hermione 都收到了正确地址的电子邮件,但电子邮件的文本都是相同的,并且反映了 Harry 的会议,而不是每个人的动态。同样,如果只添加了一个新行,则不存在此问题。
我不希望使用 onEdit 标记,我知道这可以解决问题。数据输入错误时有发生,人们可以改变主意。我宁愿将函数设置为每 10 分钟触发一次。
这是我根据我见过的其他编码拼凑而成的代码:
function SendEmail() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet1=ss.getSheetByName('ConcatenatedReport');
var subject = sheet1.getRange(2,7).getValue();
var message = sheet1.getRange(2,9).getValue();
var n=sheet1.getLastRow();
for (var i = 2; i < n+1 ; i++ ) {
var name=sheet1.getRange(i,1).getValue();
var teacher=sheet1.getRange(i,4).getValue();
var instructor=sheet1.getRange(i,3).getValue();
var teacher1=sheet1.getRange(i,4).getValue();
var emailAddress = sheet1.getRange(i,5).getValue();
var emailstatus = sheet1.getRange(i,6).getValue();
if(emailstatus == ""){
message=message.replace("<name>",name).replace("<teacher>",teacher).replace("<instructor>",instructor).replace("<teacher1>",teacher1);
MailApp.sendEmail(emailAddress, subject, message);
sheet1.getRange(i,6).setValue("Notified");}}}
Notified 值可防止我们一遍又一遍地向同一个人发送电子邮件。消息内容如下:
您好name variable,这封电子邮件是为了通知您,在您的下一个班主任课程期间,您与一位教授(teacher variable)有约会。在第三个小时后立即与您的班主任教授(instructor variable)签到,然后在接到通知后立即前往teacher1 variable 的房间。
我哪里错了?如何让电子邮件正确地适合每个学生?
PS - 我也非常希望在电子邮件中只使用他们的名字,而不是 Last, First Middle。有没有办法做到这一点?我的编码技能很弱,所以我不知道很多。非常感谢任何帮助!
【问题讨论】:
标签: email google-apps-script google-sheets google-sheets-formula