使用Google Apps脚本确认某个值位于电子表格列中

时间:2018-03-18 21:04:52

标签: google-apps-script

此功能根据一些条件发送电子邮件提醒。我需要检查的一件事是访问ID(位于"电子邮件日志"表格中的第11列)存在于单独的表格中(" DATA",存储在enrollmentData变量)。如何搜索此数组并返回ID以匹配下面的IF语句?

function sendReminders() {
      var ss = SpreadsheetApp.getActiveSpreadsheet ();
      var sheet = ss.getSheetByName("Email Log");
    var rows = sheet.getLastRow()-1;
      var startRow = 2;  // First row of data to process
      var numRows = rows;   // Number of rows to process
      var now = new Date();

  // Fetch the range of cells
  var dataRange = sheet.getRange(startRow, 1, numRows, 22)

  // Fetch values for each row in the Range.
  var data = dataRange.getValues();

  var today = Utilities.formatDate(new Date(), "GMT-5", "m/d/yyyy")
  var reminderSent = "Reminder Sent";

  //get email body and subject
  var bodyTem = ss.getSheetByName("Email Templates").getRange('b8').getValues();
  var subject = ss.getSheetByName("Email Templates").getRange('d13').getValues();

  //get enrollments data to search for visit ID
  var enrollmentData = ss.getSheetByName("DATA").getRange('H:H').getValues();

  for (var i = 0; i < data.length; i++) {
    var row = data[i];




   //set conditions
    var sendReminder = row[18];
    var reminderDate = row[19];
    var reminderStatus = row[20];
    var visitID = row[11]
    //need condition to look for visit ID to not include already cancelled. Search enrollmentData for visitID and return as foundID for conditional below


    if (sendReminder == "Yes" && reminderStatus != reminderSent && reminderDate >= today && visitID == foundID) {


      //assemble email
      var studentEmail = row[13];
      var firstName = row[12];
      var instructor = row[0];
      var body1 = bodyTem.replace(/*name*/gi,firstName); 
      var body2 = body1.replace(/*instructorFull*/gi,instructor);



      MailApp.sendEmail(studentEmail, subject, body2);

      //need to write in that the reminder email was sent.
      sheet.getRange(startRow + i, 20).setValue(reminderSent);
      sheet.getRange(startRow + i, 21).setValue(now);




    };
  };
};

1 个答案:

答案 0 :(得分:2)

您想要搜索数组

var enrollmentData = ss.getSheetByName("DATA").getRange('H:H').getValues();

方法getValues总是返回一个双数组:在这种情况下,它的形式为[[1], [2], [3],..],因为每一行都有一个元素。我通常会把它弄平:

var enrollmentDataFlat = enrollmentData.map(function(row) {return row[0];});

现在enrollmentDataFlat[1, 2, 3, ..]类似,因此indexOf将照常运作:

if (enrollmentDataFlat.indexOf(visitID) != -1) {
    // it's there 
}
else {
    // it's not there
}