Google Sheets - Скрипт для отправки электронной почты, когда ячейки в столбце R меньше или равны 0 - PullRequest
1 голос
/ 02 октября 2019

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

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

(значения в столбце R зависят от того, что указано в столбце A)

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

function sendEmailonEdit()
{
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var cellValue = ss.getActiveSheet().getActiveRange().getA1Notation();
    var getColumn = ss.getActiveSheet().getActiveRange().getColumn();
    var sheetname = ss.getActiveSheet().getName();
    var user = Session.getActiveUser().getEmail();
    var Toemail = 'userid@company.com';
    var subject = 'Warning -' + ss.getName();
    var body = 'Your file has a new entry in - ' + sheetname + ' Updated by - ' + 
        user + ' New Value in - '+ cellValue + '= '+ss.getActiveCell().getValue() +
        ' check file- ' + ss.getUrl();

    if(user !='abc@company.com' && Number(ss.getActiveCell().getValue()<= 0) && getColumn == 18)
    {
        MailApp.sendEmail(Toemail,subject, body);
    }
};

1 Ответ

0 голосов
/ 02 октября 2019

EDIT:

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

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

Если вы хотите отправить электронное письмо только для вновь отредактированных полей, вы должны добавить что-то вроде столбца «статус» (столбец S в примере ниже). Примерно так:

enter image description here

function workflow (){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var range = ss.getDataRange();
  var values = range.getValues();

  var cellValue;
  var sheetname = ss.getActiveSheet().getName();
  var user = Session.getActiveUser().getEmail();

  for (var i=0; i < values.length; i++){
    //[17] == Column R || [18] == Column S
    if (values[i][17] <= 0 && values[i][18] != "processed"){

    cellValue = values[i][17];
    var cell = 'R'+(i+1)
    var statusCell = 'S'+(i+1)

    var Toemail = 'mail@domain.com';
    var subject = 'Warning -' + ss.getName();
    var body = 'Your file has a new entry in ' + sheetname + '.\n'+'Updated by ' + user + '.\n New Value in '+ cell + '= '+cellValue+ '.\n check file ' + ss.getUrl();

    MailApp.sendEmail(Toemail,subject, body);

    ss.getSheetByName(sheetname)
      .getRange(statusCell)
      .setValue('processed')
    } else {
      var statusCell = 'S'+(i+1)
      ss.getSheetByName(sheetname)
        .getRange(statusCell)
        .setValue('processed')
    }
  }
}

Это может сработать, но я не знаю, действительно ли вы этого хотите. Он проверяет столбец R и ищет значения <= 0. Когда он находит одного из них, отправляется электронное письмо. </p>

function workflow (){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var range = ss.getDataRange();
  var values = range.getValues();

  var cellValue;
  var sheetname = ss.getActiveSheet().getName();
  var user = Session.getActiveUser().getEmail();

  for (var i=0; i < values.length; i++){
    //[17] == Column R
    if (values[i][17] <= 0){

      cellValue = values[i][17];
      var cell = 'R'+(i+1)

      var Toemail = 'mail@domain.com';
      var subject = 'Warning -' + ss.getName();
      var body = 'Your file has a new entry in ' + sheetname + '.\n'+'Updated by ' + user + '.\n New Value in '+ cell + '= '+cellValue+ '.\n check file ' + ss.getUrl();

      MailApp.sendEmail(Toemail,subject, body);
    }
  }
}

В этом случае:

enter image description here

Мы отправим 3 таких письма:

enter image description here

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