Справка Google Script - прекратите попытку, если какие-либо данные пусты - PullRequest
0 голосов
/ 08 января 2019

У меня есть скрипт Google, который я использую, когда сотрудники вводят в электронную таблицу такие данные, как адрес электронной почты учащегося и информацию о домашнем задании. Исходя из этих данных, студенту по электронной почте каждый день в 10:00, если они нуждаются в дополнительной помощи. Это работает очень хорошо, однако время от времени возникает ошибка, когда строка заполнена не полностью. Это просто приведет к ошибке и остановит процесс, оставив всех учеников на листе под этой неполной записью без электронного письма на день. Я пытаюсь включить функцию перехвата ошибок, которая заметит, что ячейка пуста, и пропустит эту строку, переходя к следующей, а не просто останавливаясь.

Вот суть того, что у меня сейчас. Может ли кто-нибудь указать мне правильное направление? Я не очень хороший программист.

var mainSheet = ivList[i];  
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(mainSheet);


//empty row checker. Ends with lastFullRow
var range = sheet.getDataRange();
var values = range.getValues();
var row = 0;
for (var row=0; row<values.length; row++) {
  if (!values[row].join("")) break;
}
var lastFullRow = row;
//Stop empty row Check

var cell = sheet.getRange(3, 1, lastFullRow, 7);
Logger.log(lastFullRow);

var UserData = cell.getValues();
  try{
    for (var j in UserData) {
      var row = UserData[j];
      var grade = row[0];
      var lastName = row[1];
      var firstName = row[2];
      var studentEmail = row[3];
      var staffEmail= row[4];
      var iCanStatement = row[5];
      var date = row[6];


      // if IV sheet send IV email
     if (i == 0 || i == 2) {
       var emailSubject = "INTERVENTION NOTICE for "+date;
       var studentBody = "NOTICE: This is an automated message confirming that you have been assigned to the INTERVENTION LIST."+"\n"+"\n"+"DATE: "+date+"\n"+"\n"+"FIRST NAME: "+firstName+"\n"+"\n"+"LAST NAME: "+lastName+"\n"+"\n"+"EMAIL ADDRESS: "+studentEmail+"\n"+"\n"+"STAFF MEMBER: "+staffEmail+"\n"+"\n"+"I CAN STATEMENT: "+iCanStatement;
       var staffBody = "NOTICE: This is an automated message confirming that you have assigned a student to the INTERVENTION LIST"+"\n"+"\n"+"DATE: "+date+"\n"+"\n"+"FIRST NAME: "+firstName+"\n"+"\n"+"LAST NAME: "+lastName+"\n"+"\n"+"EMAIL ADDRESS: "+studentEmail+"\n"+"\n"+"STAFF MEMBER: "+staffEmail+"\n"+"\n"+"I CAN STATEMENT: "+iCanStatement;
       var fromName = "**"
     } 

     // if homework sheet send homework Email
     if (i == 1 || i ==3) {
        var emailSubject = "HOMEWORK ROOM NOTICE for "+date;
        var studentBody = "NOTICE: This is an automated message confirming that you have been assigned to the HOMEWORK LIST."+"\n"+"\n"+"DATE: "+date+"\n"+"\n"+"FIRST NAME: "+firstName+"\n"+"\n"+"LAST NAME: "+lastName+"\n"+"\n"+"EMAIL ADDRESS: "+studentEmail+"\n"+"\n"+"STAFF MEMBER: "+staffEmail+"\n"+"\n"+"ASSIGNMENT: "+iCanStatement;
        var staffBody = "NOTICE: This is an automated message confirming that you have assigned a student to the HOMEWORK LIST"+"\n"+"\n"+"DATE: "+date+"\n"+"\n"+"FIRST NAME: "+firstName+"\n"+"\n"+"LAST NAME: "+lastName+"\n"+"\n"+"EMAIL ADDRESS: "+studentEmail+"\n"+"\n"+"STAFF MEMBER: "+staffEmail+"\n"+"\n"+"ASSIGNMENT: "+iCanStatement;
        var fromName = "**"
     }

     // Send Emails
        MailApp.sendEmail(studentEmail, emailSubject, studentBody, {bcc:"**@**.org", name:fromName, replyTo:staffEmail});
        MailApp.sendEmail(staffEmail, emailSubject, staffBody, {name:fromName, replyTo:staffEmail});
      }
  }

  catch(e) {
   MailApp.sendEmail("**@**.org", "Error on Intervention Spreadsheet 3.0", e.message);
  }

1 Ответ

0 голосов
/ 09 января 2019

проблема в ваших строках, которые вычисляют количество строк для обработки:

for (var row=0; row<values.length; row++) {
  if (!values[row].join("")) break;
}
var cell = sheet.getRange(3, 1, lastFullRow, 7);

при этом скрипт будет обрабатывать только первые заполненные строки. рассмотрите возможность использования getLastRow и перемещения проверки заполненной строки в последующий цикл for:

var mainSheet = ivList[i];  
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(mainSheet);

var range = sheet.getDataRange();
var values = range.getValues();


var UserData = values;
  try{
    for (var j in UserData) {
      var row = UserData[j];
      // do nothign if the row is empty
      // Updates
      if (!row.join("")) continue;

      // proceed with non empty rows
      var grade = row[0];
      var lastName = row[1];
      var firstName = row[2];
      var studentEmail = row[3];
      var staffEmail= row[4];
      var iCanStatement = row[5];
      var date = row[6];


      // if IV sheet send IV email
     if (i == 0 || i == 2) {
       var emailSubject = "INTERVENTION NOTICE for "+date;
       var studentBody = "NOTICE: This is an automated message confirming that you have been assigned to the INTERVENTION LIST."+"\n"+"\n"+"DATE: "+date+"\n"+"\n"+"FIRST NAME: "+firstName+"\n"+"\n"+"LAST NAME: "+lastName+"\n"+"\n"+"EMAIL ADDRESS: "+studentEmail+"\n"+"\n"+"STAFF MEMBER: "+staffEmail+"\n"+"\n"+"I CAN STATEMENT: "+iCanStatement;
       var staffBody = "NOTICE: This is an automated message confirming that you have assigned a student to the INTERVENTION LIST"+"\n"+"\n"+"DATE: "+date+"\n"+"\n"+"FIRST NAME: "+firstName+"\n"+"\n"+"LAST NAME: "+lastName+"\n"+"\n"+"EMAIL ADDRESS: "+studentEmail+"\n"+"\n"+"STAFF MEMBER: "+staffEmail+"\n"+"\n"+"I CAN STATEMENT: "+iCanStatement;
       var fromName = "**"
     } 

     // if homework sheet send homework Email
     if (i == 1 || i ==3) {
        var emailSubject = "HOMEWORK ROOM NOTICE for "+date;
        var studentBody = "NOTICE: This is an automated message confirming that you have been assigned to the HOMEWORK LIST."+"\n"+"\n"+"DATE: "+date+"\n"+"\n"+"FIRST NAME: "+firstName+"\n"+"\n"+"LAST NAME: "+lastName+"\n"+"\n"+"EMAIL ADDRESS: "+studentEmail+"\n"+"\n"+"STAFF MEMBER: "+staffEmail+"\n"+"\n"+"ASSIGNMENT: "+iCanStatement;
        var staffBody = "NOTICE: This is an automated message confirming that you have assigned a student to the HOMEWORK LIST"+"\n"+"\n"+"DATE: "+date+"\n"+"\n"+"FIRST NAME: "+firstName+"\n"+"\n"+"LAST NAME: "+lastName+"\n"+"\n"+"EMAIL ADDRESS: "+studentEmail+"\n"+"\n"+"STAFF MEMBER: "+staffEmail+"\n"+"\n"+"ASSIGNMENT: "+iCanStatement;
        var fromName = "**"
     }

     // Send Emails
        MailApp.sendEmail(studentEmail, emailSubject, studentBody, {bcc:"**@**.org", name:fromName, replyTo:staffEmail});
        MailApp.sendEmail(staffEmail, emailSubject, staffBody, {name:fromName, replyTo:staffEmail});
      }
  }

  catch(e) {
   MailApp.sendEmail("**@**.org", "Error on Intervention Spreadsheet 3.0", e.message);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...