Подсчитайте, сколько раз значение появляется в столбце таблицы на основе критериев в скрипте Google Apps - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь создать скрипт приложения электронной таблицы, который отправляет электронные письма разным пользователям, чтобы уведомить их о необходимости что-то сделать.

Конечно, я заставил его отправить письмо, но не могу заставить его отправить количество ячеек, в которых упоминается то же письмо, так что пользователь будет уведомлен о количестве задач, над которыми ему нужно работать.

С другой стороны, я изо всех сил пытаюсь сделать скрипт просто отправьте одно электронное письмо Пользователям.

Это код, который я пытаюсь написать:

var enviado = 'ok';
function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;
  var numRows = 1000;
  // Rango J2:J
  var dataRange = sheet.getRange(startRow, 9, numRows, 4);
  var data = dataRange.getValues();
  var nextEmail = '';
  for (var i = 0; i < data.length; ++i) {
    if (i < data.length - 1) {
     nextEmail = data[i+1][11] //busca la siguiente fila, en la columna 11
    } 
    else {  //si i es la fila máxima
     nextEmail = ''
    }
    var row = data[i]; 
    var registrado = row[1];
    var name = row[0]
    var emailAddress = row[2];
    var contarMails = 0;
     for (var mails in emailAddress) {
       if (emailAddress[mails][0] == emailAddress) { //Here's where I'm stuck
       contarMails++;
       };
      };
    var mensaje = 
        '<p>¡Hola, '+name+'!</p>'+ 
        '<br>Tenés '+contarMails+' <strong>partida(s) no conciliada(s)</strong> asignada(s) en la Planilla Conciliaciones bancarias.</br><br></br>'+
        '<br>Ingresá al archivo para revisar: </br>'+'<a href="https://docs.google.com/spreadsheets/d/1kzaDQSMDwi_SFKaB4SDVYraeS8wqMjIVl_Tt20wfX1o/">Planilla Conciliaciones bancarias</a>'
    var mailEnviado = row[3];
    if (mailEnviado !== enviado) { // Previene el envío de duplicadios
      var asunto = 'Notificación PNC - Conciliaciones bancarias';
      if (emailAddress !== "" && mailEnviado !== enviado && nextEmail !== emailAddress){ //esto deberia evitar el envio de multiples mails a un mismo destinatario, pero no funciona
        if (registrado == false) {
          MailApp.sendEmail({
             to: emailAddress, 
             subject: asunto, 
             htmlBody: mensaje, 
             noReply: true
            });
          sheet.getRange(startRow + i, 12).setValue(enviado);
         // Asegura que la celda se complete automaticamente por si el script se detiene
        SpreadsheetApp.flush();
        }
      }
     }
   }
}

Я ценю любую помощь

Спасибо!

1 Ответ

2 голосов
/ 29 февраля 2020

Только что заметил проблему

var dataRange = sheet.getRange(startRow, 9, sheet.getLastRow()-startRow+1, 4);

Строка выше создает диапазон от столбца I до столбца L

  var data = dataRange.getValues();

, поэтому данные в строке выше индексы шириной всего 4 столбца 0,1,2,3

  var nextEmail = '';
  for (var i=0;i<data.length;++i) {
    if (i < data.length - 1) {

Так что данных нет [i + 1] [11]

     nextEmail = data[i+1][11] 
    } else { 
      nextEmail = ''
    }
...