【发布时间】:2018-01-20 04:31:29
【问题描述】:
好的,我是一名教师,我制作了一个谷歌表格,要求填写时间、作业和截止日期。之后,我可以选择学生给家长发一封电子邮件(这是为了迟到的作业,我敢肯定孩子们会讨厌它)。
我的脚本只匹配“if”语句中的第一个匹配项时遇到问题。这是发生了什么:
上图显示了响应。电子邮件模板使用期间、分配和截止日期单元格来制作电子邮件。 (可行)脚本使用“学生”单元格中的电子邮件。
接下来,脚本使用上面的表格创建一个值数组。循环从表单响应表(第一个)中“学生”单元格中的第一个电子邮件地址开始。然后嵌套循环遍历花名册表中的学生电子邮件并尝试匹配电子邮件。找到匹配项后,将收集父电子邮件并用于发送电子邮件。
这是我的代码!
function homeworkEmail() {
var lastRow = sheet1.getLastRow();
var emailArray = "";
for (c=4; c<=9; c+=1) { //begin array starting with P1 column and end with P6 column
var students = sheet1.getRange(lastRow,c).getValue();
if (students) {
var sendToStudents = students.split(',');
}
}
var period = sheet1.getRange(lastRow,3).getValue(); //Value of period column (3)
var assignment = sheet1.getRange(lastRow,10).getValue(); //Value of assignment column (10)
var due = sheet1.getRange(lastRow,11).getValue(); //Value of due date column (11)
var allRosterValues = sheet2.getDataRange().getValues();
for (s=0; s < sendToStudent.length; s++) { //start loop through students array to send
var student = sendToStudents[s].replace(/\s+/g, '');
for (r=1; r < sheet2.getLastRow(); r++) { //start loop across entire roster sheet
var studentInRoster = allRosterValues[r][2].replace(/\s+/g, '');
if (String(sendToStudents[s]) == String(allRosterValues[r][2])) { //look for student email in array to match roster list
Logger.log("SEND EMAIL HERE");
break;
}
}
}
}
问题是,这个 if 语句总是捕获第一封电子邮件匹配并且有效,但之后的所有其他电子邮件(因此表单中的第二封电子邮件,sendToStudent[s]...)永远不会匹配。我开始直接在 if 语句中声明所有内容,现在已经为每个步骤声明了单独的 var,希望这可能有效。我已经将它们打印出来,可以从字面上看到电子邮件字符串如何匹配 100%,没有空格或任何东西,它只是通过了它。我已经检查了它们是否匹配类型,甚至删除了空格并在前后用“-”打印出来以检查长度。它都是小写的,我已经将大小写更改为小写只是为了检查。当我使用 else 语句检查事物时,它甚至记录了“不匹配”,因此它实际上正在运行 if 语句并且无法识别匹配项。我完全迷路了!
【问题讨论】:
-
if 块中的 break 语句是有意的?如果不是,请尝试删除它
-
是的,我打算使用休息时间。否则,将发送一封电子邮件,但循环继续通过名册的其余 100 多人。我把它放在那里是为了结束循环并立即开始检查第二个学生的电子邮件地址是否匹配。
-
比较中是否存在案例问题?也许转换为小写然后比较?
-
不,都是小写的。我将添加描述...
-
如果 (String(student) == String(studentInRoster))。您正在剥离变量但不使用它们。
标签: javascript if-statement google-apps-script google-sheets-api