javascript - Google Apps 电子表格脚本并不总是完成迭代,否则工作正常

标签 javascript iterator google-apps google-sheets google-apps-script

我正在尝试创建一个脚本,该脚本一次一行地查看学生数据的电子表格,如果学生的成绩低于 60 分,则向学生及其家长发送电子邮件。电子表格中的列包括:学生 ID、学生姓名、学生电子邮件地址、家长电子邮件地址、年级。电子表格中有 30 行 - 我预计最多使用其中 25 行,其余空白。一些家长电子邮件地址字段将留空,这在代码中已说明。所有学生都有电子邮件地址。

该脚本实际上运行良好,只是它并不总是完成所有必要的迭代的运行。它每次都会在不同次数的迭代后停止 - 有时它会完成所有迭代,但通常不会。当它停止时没有错误或任何东西,它只是停止弹出消息框或向学生发送电子邮件。

知道为什么它在执行所有行之前停止运行吗?

代码如下:

function onOpen(){
  loadMenu();
}

function loadMenu() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  ss.addMenu("F-Watch Emailer", [{"name":"Send Emails", "functionName":"sendEmails"}]);
}

function sendEmails() {
  var ss  = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var range = sheet.getRange("B2:E30");
  var data = range.getValues();
  //Browser.msgBox(data);

  for (var i = 0; i < 30; i++){
    //set variables
    var row = data[i];
    var emailAddress = row[1];
    var parentEmailAddress = row[2];
    var grade = row[3];

    Browser.msgBox("email = "+emailAddress);

    //email student if necessary, return true or false
    if(emailAddress !== ""){
      var emailSent = sendStudentEmail(emailAddress, grade);     
    }
    else{
      //Browser.msgBox("Student Email Field " + (i + 1) + " is Empty");
    }

    //email parent if necessary, return true or false
    if(parentEmailAddress !== ""){
      var parentEmailSent = sendParentEmail(parentEmailAddress, grade);     
    }
    else{
      //Browser.msgBox("Parent Email Field " + (i + 1) + " is Empty");
    }
  }
}

function sendStudentEmail(emailAddress, grade){
  if(grade < 60){
    var subject = "Weekly F-Watch Email for Mr. Lipson's Class";
    var body = "Attention Students: If you are receiving this automated email, your term grade is currently below 60. Please check iPass and speak to me to make up any late assignments (please refer to my Late Work Policy). If you have any questions, feel free to email me.Have a good day, - Mr. L Note: This is the first in a weekly series of automated emails, and it's in beta. Please forgive any formatting issues. Also, beginning next week, this email will be sent to parents/guardians as well.";
    //MailApp.sendEmail(emailAddress, subject, body);
    //Browser.msgBox("Email sent to " + emailAddress);
    return true;
  }
  else{
    //Browser.msgBox("Email not sent to " + emailAddress);
    return false;
  }
}

function sendParentEmail(parentEmailAddress, grade){
  if(grade < 60){
    var subject = "Weekly F-Watch Email for Mr. Lipson's Class";
    var body = "Parent Email Text";
    //MailApp.sendEmail(emailAddress, subject, body);
    //Browser.msgBox("Email sent to " + parentEmailAddress);
    return true;
  }
  else{
    //Browser.msgBox("Email not sent to " + emailAddress);
    return false;
  }
}

最佳答案

尝试使用调试器并逐步执行失败的 for 循环。

您可以通过双击脚本编辑器中行号附近的位置来在代码中的任意行设置停止点。通过单击看起来像蜘蛛的图标来运行调试器。

关于javascript - Google Apps 电子表格脚本并不总是完成迭代,否则工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9347008/

相关文章:

javascript - Regex JS - 创建没有指定单词的捕获模式

ruby-on-rails - rails : An elegant way to display a message when there are no elements in database

java - 如何将迭代器中的值传递给paintComponent

lua - lua中如何实现递归迭代器?

javascript - 使用谷歌工作表脚本移动过滤值(复制和粘贴值),同时忽略列标题/标题

javascript - 在 reduce 中连接同一对象属性中的值

javascript - Angular JS过滤器: Why does this remove other LIKE options?

android - 如何以开发者身份隐藏 Google Play 商店中的应用

php - WMD Markdown 编辑器 - HTML 到 Markdown 的转换

google-api - 以编程方式订阅外部 ical