Если значение O2 обновляется, то мне нужно отправить электронное письмо на адрес в C2 с шаблоном.Письмо должно отправляться только C2, если ячейка O2 обновлена - PullRequest
0 голосов
/ 28 мая 2019

Я использую электронную таблицу Google.

У меня есть адреса электронной почты участников в столбце C и соответствующий им статус в столбце O. (Статус будет либо DONE, либо OPEN, либо ONGOING, либо пустой).

Если значение O2 обновлено, то мне нужно отправить электронное письмо на адрес в C2 с шаблоном. Письмо должно отправляться только C2, если ячейка O2 обновлена.

Надеюсь, вы поможете мне с этим.

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

Надеюсь, ты сможешь мне помочь.

Спасибо

function StatusChange() {


  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("R & A").activate();

  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lr = ss.getLastRow(); 

  var templateText = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Template for Email").getRange(1,1).getValue();

  var quotaLeft = MailApp.getRemainingDailyQuota();

  if((lr-1) > quotaLeft){
    Browser.msgBox("You have " + quotaLeft + " left and you're trying to send " + (lr-1) + " emails. Emails were not sent.");
  } else {

    for (var i = 2;i<=lr;i++){

      var currentEmail = ss.getRange(i, 3).getValue();
      var currentSheetTitle = ss.getRange(i, 11).getValue();
      var currentName = ss.getRange(i, 4).getValue();

      var messageBody = templateText.replace("{name}",currentName).replace("{title}",currentSheetTitle);
      var subjectLine = "Reminder: " + currentSheetTitle + " Status Change";


    MailApp.sendEmail(currentEmail, subjectLine, messageBody);


    } // close for loop


  } //close else statement


}

Если значение O2 обновлено, то мне нужно отправить электронное письмо на адрес в C2 с шаблоном. Электронное письмо следует отправлять только C2, если ячейка O2 обновлена.

1 Ответ

0 голосов
/ 28 мая 2019

Это может быть достигнуто с помощью устанавливаемого триггера onEdit, вам нужно настроить его, либо перейдя к своим триггерам, либо запустив приведенный ниже код , предоставленный Google один раз.

function createSpreadsheetEditTrigger() {
  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger('statusChange')
      .forSpreadsheet(ss)
      .onEdit()
      .create();
}

Делая это, вы можете проверить, обновляется ли столбец O, а затем выполнить свои if else операторы на основе этого результата. Я также очистил некоторые переменные, чтобы вы не выполняли множественные вызовы SpreadsheetApp.getActiveSpreadsheet() без необходимости.

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

function statusChange(e){

  var sp = SpreadsheetApp.getActiveSpreadsheet();
  var ss = sp.getSheetByName('R & A');
  var row = e.range.getRow(); //get row # for edited range
  var col = e.range.getColumn(); //get column # for edited range

  if(col === 15){ //check if column O was updated

    var templateText = sp.getSheetByName("Template for Email").getRange(1,1).getValue();

    var quotaLeft = MailApp.getRemainingDailyQuota();

    if(quotaLeft < 1){
      Browser.msgBox("You have " + quotaLeft + " left and you're trying to send 1 email. Email was not sent.");
    } else{

      var currentEmail = ss.getRange(row, 3).getValue();
      var currentSheetTitle = ss.getRange(row, 11).getValue();
      var currentName = ss.getRange(row, 4).getValue();

      var messageBody = templateText.replace("{name}",currentName).replace("{title}",currentSheetTitle);
      var subjectLine = "Reminder: " + currentSheetTitle + " Status Change";

      MailApp.sendEmail(currentEmail, subjectLine, messageBody);
    } //close else statement
  } //close if statement
}

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

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