Проверка значения ячейки, соответственно изменение значения другой ячейки и отправка электронного письма - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь написать скрипт, который проверит ячейку на значение «Готово». Если скрипт обнаружит, что «Done» присутствует в этой первой ячейке, он запишет значение «X» в соответствующую ячейку (в той же строке). Кроме того, электронное письмо будет отправлено с другой соответствующей информацией в той же строке.

Каждый раз, когда электронная таблица открывается, я хочу, чтобы скрипт выполнялся. Цель записи «X» в соответствующей ячейке состоит в том, чтобы скрипт мог проверить, была ли эта строка уже учтена, и электронное письмо уже было отправлено. Присутствие символа «X» приведет к тому, что скрипт переместится на следующую строку без отправки электронного письма (избегая отправки двух электронных писем об одной строке).

В конечном итоге мне понадобится проверить три строки на «Готово» (и три соответствующие строки на «Х»).

Я нахожусь в точке, где мой сценарий может успешно проверить:

1) Если присутствует «Готово» 2) Если присутствует «Х» 3) Отправить электронное письмо соответственно.

Мне нужна помощь:

1) Выяснить, как написать «Х» в ячейку! Я не могу разобраться. Моя текущая методология может не соответствовать тому, что я пытаюсь сделать.

Мне, к сожалению, не хватает "репутации", чтобы опубликовать скриншот листа Google.

Я пытался использовать setValue для присвоения "X" соответствующей ячейке, но мне выдается следующая ошибка:

TypeError: Невозможно найти функцию setValue в объекте. (строка 35, файл «Попытка объединения»)

function SendEmails() {

  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  sheet.setActiveSheet(sheet.getSheetByName("Sheet1"));

  var DataRange = sheet.getRange("A:J");
  var data = DataRange.getValues();

  //iterating through the data
  for (i in data) {
    var rowData = data[i];

    var emailAddress = rowData[0];
    var parameter = rowData[1];
    var user = rowData[2];
    var message1 = rowData[3];
    var parameter2 = rowData[4];
    var message2 = rowData[5];
    var parameter3 = rowData[6];

    var p1Check = rowData[7];
    var p2Check = rowData[8];
    var p3Check = rowData[9];

    //checking to see if the value "Done" is present
    if (parameter == "Done") {

      //checking to see if the value "X" is present (implying a corresponding email has already been sent)
      if (p1Check !== "X") {

        var messageComplete = message1 + " This is for " + user;
        var subject = 'Client Status email update for ' + user;      

        //this line below is what I am trying to use to set the corresponding cell value to "X"; it doesn't work
        //p1Check.setValue("X");


        //Sending the email
        MailApp.sendEmail(emailAddress, subject, messageComplete); 
      }
      else {
          }

    }
    else {
    }


}
}

Как уже упоминалось выше, мне нужна соответствующая ячейка в столбце H, чтобы в нее было записано «X», когда условие «Готово». Этого не происходит, и я получаю ошибку с моей текущей попыткой решения.

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

В объекте нет функции setValue p1Check.setValue(s) присутствует только в range объекте, а p1Check является элементом двумерного массива.

Самый простой способ - изменить массив data и установить его обратно в DataRange

for(var i in data){
  if (parameter === "Done" && p1Check !== "X" ) {
      var messageComplete = message1 + " This is for " + user;
      var subject = 'Client Status email update for ' + user;      
      rowData[7] = "X"; //set rowdata[7](p1Check) as X
  }
}
DataRange.setValues(data);//modified data is set back
0 голосов
/ 05 апреля 2019

Попробуйте:

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

function SendEmails() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  var rg=sheet.getRange(1,1,sh.getLastRow(),sh.getLastColumn());
  var data=rg.getValues();
  for(var i=0;i<data.length;i++) {
    var rowData=data[i];
    var emailAddress=rowData[0];
    var parameter=rowData[1];
    var user=rowData[2];
    var message1=rowData[3];
    var parameter2=rowData[4];
    var message2=rowData[5];
    var parameter3=rowData[6];
    var p1Check=rowData[7];
    var p2Check=rowData[8];
    var p3Check=rowData[9];
    if(parameter=="Done" && p1Check!="X") {
      var messageComplete=message1 + " This is for " + user;
      var subject='Client Status email update for ' + user;      
      sh.getRange(i+1,8).setValue("X");
      MailApp.sendEmail(emailAddress, subject, messageComplete); 
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...