Сценарий Google Apps обновляет определенную ячейку на основе оператора if - PullRequest
0 голосов
/ 11 марта 2019

В настоящее время мой сценарий обновляет все ячейки в выбранном диапазоне с помощью «ДА», но я хочу, чтобы он обновлял только ячейки, соответствующие условиям if. Любая помощь будет высоко ценится.

//Active spreadsheet var that can be used anywhere in the programme
var ss = SpreadsheetApp.getActiveSpreadsheet();

// Get and check if there is an email address
function checkSendEmailAdd () {

  //Getting the array of values 
  var activeSheet = ss.getActiveSheet();
  var emailCol = activeSheet.getRange(2, 9, activeSheet.getLastRow() - 1, 2).getValues();
//Looping over the array of values
      emailCol.forEach(function(val){
      var email = val[0].toLowerCase();
      var sentEmail = val[1];
      //If the send date column is empty and the email column has a @ within the string an email will be sent           
          if (email.indexOf("@") !== -1 && sentEmail == ""){

              //Email contents
              var subject = "Survey";
              var body = "Hi" + "<br><br>" +
                         "Testing 123";

               GmailApp.sendEmail(email, subject, "", { htmlBody: body } );

                //Update and set a new value in the sent email column
                var newSetValue = "YES";
                var updateSentEmail = activeSheet.getRange(2, 10, activeSheet.getLastRow() - 1, 1).setValue(newSetValue);

          } else {
          }
      });

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

Изображение того, что выполняется в данный момент

1 Ответ

0 голосов
/ 11 марта 2019

Попробуйте так:

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

function sendEmail() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet0');
  var vA=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn()).getValues();
  var sentA=sh.getRange(2,2,sh.getLastRow()-1,1).getValues();
  var html='';
  for(var i=0;i<vA.length;i++) {
    var email=vA[i][0].toString().trim().toLowerCase();
    var sentEmail=vA[i][1];
    if(email && email.indexOf("@")>-1 && !sentEmail){
      var subject = "Survey";
      var body = "Hi<br><br>Testing 123";

      //GmailApp.sendEmail(email, subject, "", { htmlBody: body } );
      html+=Utilities.formatString('<br />%s -<br />Email: %s<br />Subject: %s<br />Body: %s<br /><hr/>', Number(i+1),email,subject,body);
      sentA[i][0]="Yes";
    } 
  }
  sh.getRange(2,2,sh.getLastRow()-1,1).setValues(sentA);
  var userInterface=HtmlService.createHtmlOutput(html);
  SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Emails Sent');
}

Таблица перед отправкой:

enter image description here

Электронная таблица после отправки:

enter image description here

Я удалил строку Gmail и использовал диалоговое окно для отображения сообщений электронной почты:

enter image description here

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