установить значения после отправки почты - PullRequest
0 голосов
/ 07 марта 2020


Я хочу, чтобы скрипт отправлял электронное письмо на те почтовые адреса, где непроверенные ящики находятся в ряду - это отлично работает. Но я хочу, чтобы значение флажка было установлено как «True» после того, как письма были отправлены.


Моя проблема в том, что мне нужно, чтобы последний параметр -l oop останавливался после того, как все флажки отмечены , Другими словами: последний l oop должен остановиться, когда появится пустая ячейка.


Первым делом я вручную запускаю скрипт - позже запустю его с помощью кнопки в меню (функция onOpen ...)


Ценю любую помощь - большое спасибо!


Проверьте лист и код ниже:




    function sendmail() {

      var ui = SpreadsheetApp.getUi();
      var ss = SpreadsheetApp.getActiveSpreadsheet();  
      var s = ss.getSheetByName('Sheet1');
      var r = s.getRange('C:C');                     //Checkboxes
      var v = r.getValues();    
       for(var i=v.length-1;i>=0;i--) 
       if(v[0,i]=='false') { 
        var range = ss.getRange("A1:D4");
        var UserData = range.getValues();
        var UserData = range.getValues();
        var row = UserData[i];
        var name = row[0];
        var email = row[1];

        MailApp.sendEmail(row[1], "Test", "Hello " + name + ", This is an email");   
        var response = ui.alert("mail was send to ", ui.ButtonSet.OK);

    }
         for (k=1; k < 20; k++) {               //loop which has to stop
         s.getRange(k, 3).setValue("True");
    }
    }

1 Ответ

0 голосов
/ 08 марта 2020

Пара серьезных изменений в вашем скрипте.

  1. Неправильное условие для l oop. Измените на:
    for(var i=v.length-1;i>0;i--)
  2. В ответе пользовательского интерфейса отсутствует имя получателя. Изменить на:
    var response = ui.alert("mail was send to "+name, ui.ButtonSet.OK);
  3. var UserData = range.getValues(); объявляется дважды: удалить одну строку
  4. Сразу после предупреждения UI (и в пределах IF l oop) добавить строка для обновления флажка: UserData[i][2] = true;
  5. Упростить обновление флажков.
    • Удалить существующие строки:
      for (k=1; k < 20; k++) {
      s.getRange(k, 3).setValue("True");
      }
    • Заменить:
      range.setValues(UserData)

Пересмотренный скрипт


function sosendmail() {

      var ui = SpreadsheetApp.getUi();
      var ss = SpreadsheetApp.getActiveSpreadsheet();  
      var s = ss.getSheetByName('Sheet1');
      var r = s.getRange('C:C');                     //Checkboxes
      var v = r.getValues();    
       for(var i=v.length-1;i>0;i--) 
       if(v[0,i]=='false') { 

        var range = ss.getRange("A1:D4");
        var UserData = range.getValues();       
        var row = UserData[i];
        var name = row[0];
        var email = row[1];
        // MailApp.sendEmail(row[1], "Test", "Hello " + name + ", This is an email"); 
        Logger.log("mail sent")
        var response = ui.alert("mail was send to "+name, ui.ButtonSet.OK);
        UserData[i][2] = true;

    }

    range.setValues(UserData)
}

Альтернативный скрипт

В качестве альтернативы предлагается следующий скрипт. Он избегает нескольких getRange()/getValue операторов и использует более обычный нисходящий l oop.

function sosendmail01() {

  var ui = SpreadsheetApp.getUi();
  var ss = SpreadsheetApp.getActiveSpreadsheet();  
  var s = ss.getSheetByName('Sheet1');

  // get the number of rows (Alast)
  var Avals = ss.getRange("A2:A").getValues();
  var AlastRow = Avals.filter(String).length;
  // Logger.log("DEBUG: number of rows  = "+AlastRow)

  // get the data range
  var r = s.getRange(2, 1, AlastRow, 3);// get all the data
  // Logger.log("DEBUG: the data range = "+r.getA1Notation())
  var v = r.getValues(); // get the data 

  // loop through the rows of data 
  for (var i = 0;i<AlastRow;i++){
    if (v[i][2] != false) { 
      // the checkbox is ticked Don't sent an email
      // Logger.log("DEBUG: i:"+i+", name = "+v[i][0]+" - the checkbox is ticked");

    } else{
      // the checkbox IS NOT ticked - send an email
      //Logger.log("DEBUG: i:"+i+", name = "+v[i][0]+" checkbox = "+v[i][2]+" - the checkbox is NOT ticked");
      var name = v[i][0];
      var email = v[i][1];

      //MailApp.sendEmail(email, "Test", "Hello " + name + ", This is an email");   
      Logger.log("DEBUG: mail sent to "+name+" at "+email)
      var response = ui.alert("mail was send to "+name, ui.ButtonSet.OK);
      v[i][2] = true;
  }

}
  r.setValues(v);

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