Скрипт электронных таблиц Google Apps не всегда завершает итерацию, в противном случае работает нормально - PullRequest
1 голос
/ 19 февраля 2012

Я пытаюсь создать сценарий, который просматривает электронную таблицу данных об ученике по одной строке за раз и отправляет электронное письмо учащемуся и его родителям, если оценка ученика меньше 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;
  }
}

Ответы [ 2 ]

0 голосов
/ 02 марта 2012

Есть много недокументированных лимитов, иногда Utilities.Sleep(ms) может помочь

0 голосов
/ 25 февраля 2012

Попробуйте использовать отладчик и выполните пошаговый цикл for.

Вы можете установить остановку в любой строке кода, дважды щелкнув рядом с номером строки в редакторе скриптов.Отладчик запускается нажатием на значок, похожий на паука.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...