如果Statement仅在首次通过循环

时间:2018-01-20 04:31:30

标签: javascript if-statement google-apps-script google-sheets-api

好的,我是老师,我已经制作了一份谷歌表格,要求提供一段时间,作业和截止日期。在那之后,我可以选择学生向家长发送电子邮件回家(对于迟到的作业,孩子们会讨厌它,我确定)。

我的脚本问题只与#34中的第一场比赛匹配;如果"声明。这是正在发生的事情: Form responses

上图显示了回复。电子邮件模板使用期间,分配和截止日期单元格来发送电子邮件。 (有效)脚本使用"学生"中的电子邮件。细胞

roster list

接下来,该脚本使用上面的工作表创建值数组。循环开始于"学生的第一个电子邮件地址"表单响应表中的单元格(第一个)。然后,嵌套循环遍历名单中的学生电子邮件并尝试匹配电子邮件。找到匹配项后,将收集父电子邮件并用于发送电子邮件。

这是我的代码!

    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%,没有空格或任何东西,它只是通过它。我已检查过它们是否匹配类型,甚至删除了空格并用&#34;&#34;打印出来。之前和之后检查长度。它全是小写的,我已经将案例改为小写只是为了检查。它甚至记录了#34;不匹配&#34;当我使用else语句检查事物时,它实际上正在运行if语句而没有识别匹配。我完全失去了!

1 个答案:

答案 0 :(得分:0)

如JAZ所述,剥离变量就可以解决问题。