Могу ли я автоматизировать электронную почту с листов Google на основе определенных обновленных столбцов и строк? - PullRequest
0 голосов
/ 29 мая 2019

Мне было интересно, можете ли вы помочь мне.Я знаю, что этот код неполон, это была своего рода откровенная статья, которую я сделал по многим другим вопросам, близким мне.Я просто не могу найти именно то, что я ищу.Я не знаю Java, и я новичок в листах google и google-apps-scripts

Проблема: я хочу создать скрипт, который автоматически отправляет мне электронное письмо при обновлении электронной таблицы и сообщает мне, что такое Cellобновлено.У меня проблема в том, что она мне нужна, чтобы соответствовать определенным критериям.Например, если значение ячейки в столбце i = «Имя» и в этой строке столбцы w, x, ae или af обновляются или изменяются.Затем отправьте автоматическое электронное письмо.

Если бы вы, ребята, могли помочь, я был бы очень признателен.

Спасибо!

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

function sendNotification(e){
  var ss = SpreadsheetApp.getActive().getSheetByName('Datasheet');
  //var gg = ss.getActiveCell().getValue().toString().getFilter('Person');
  //var sheet = ss.getActiveSheet();
  var cell = ss.getActiveCell().getA1Notation();
  var row = ss.getActiveRange().getRow();
  var column = ss.getActiveRange().getColumn().toString();
  var cellvalue = ss.getActiveCell().getValue().toString();
  var subject = '____ '+ ss.getName();
  var lastColumn = ss.getLastColumn();
  var lastRow = ss.getLastRow();
  var range = ss.getRange(1,1,lastRow,lastColumn);

  MailApp.sendEmail({
    to: "Email@gmail",
    subject: subject,
    htmlBody: "<br><br>"+
    "The following cell has been updated. <br><br>"+
    "<font size=\"3\" color=\"black\"><b> Cell: </b></font>" +
    cell + "<br><br>" +
    "The update was the following: " + cell + "<br>" + "<br><br>" + 
    "Column: " + column + "<br>Updated Cell: " + cellvalue + "<br><br>" + 
    "<br><br>Thank you. <br>"
  });
};

Поэтому я хочу иметь возможность отфильтровывать конкретного человека и определенные столбцы, которые обновляются.В настоящее время я пробую это из importrange в новом листе.Когда я обновляю мастер-лист, я получаю письмо с сообщением, что он обновлен.Но обновленная ячейка - это ячейка, в которой находится формула importrange.Я хотел бы просто вставить код прямо в основной список, если смогу отфильтровать то, что мне нужно.

1 Ответ

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

Вам нужно заявление if, чтобы достичь своей цели.Я также изменил многие ваши переменные, чтобы использовать объект события e, это значительно упрощает захват диапазонов, которые были отредактированы и т. Д.

function sendNotification(e){
  var ss = e.source.getSheetByName('Datasheet');
  var cell = e.range.getA1Notation();
  var row = e.range.getRow();
  var col = e.range.getColumn();
  var cellvalue = e.range.getValue();
  var subject = '____ '+ ss.getSheetName();
  var name = ss.getRange(row, 9).getValue(); //get column 9 for current row

  if (name === 'Name' && (col === 23 || col === 24 || col === 31 || col === 32) === true) {

    MailApp.sendEmail({
      to: "Email@gmail",
      subject: subject,
      htmlBody: "<br><br>"+
      "The following cell has been updated. <br><br>"+
      "<font size=\"3\" color=\"black\"><b> Cell: </b></font>" +
      cell + "<br><br>" +
      "The update was the following: " + cell + "<br>" + "<br><br>" + 
      "Column: " + col + "<br>Updated Cell: " + cellvalue + "<br><br>" + 
      "<br><br>Thank you. <br>"
    })
  }
}

Оператор if проверяет, чтобы сделатьОбязательно переменная name (я взял это буквально из вашего вопроса), которая является столбцом I, установлена ​​на «Имя».Я понял это буквально, но вы можете поменять эту проверку на любую, для которой вы хотите, чтобы скрипт работал.Затем он проверяет, обновлены ли столбцы W, X, AE или AF, а затем отправляет электронное письмо, если оба критерия совпадают.

if (name === 'Name' && (col === 23 || col === 24 || col === 31 || col === 32) === true) {
...