Google Script - отправка электронной почты из выпадающего - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь исправить код, который нашел в Интернете. Моя цель состоит в том, чтобы после того, как на вкладке «Сводка» столбец I был отредактирован с раскрывающимся списком «утверждено» для листа, чтобы отправить электронное письмо человеку с именем в столбце D. Однако электронное письмо находится на вкладке диапазона. Это то, что у меня есть ...

var admin_email='taniapeche@gmail.com';

function triggerOnEdit(e)
{
  sendEmailOnApproval(e);
}

function checkStatusIsApproved(e)
{ var sheet = SpreadsheetApp.getActive().getSheetByName('Summary');
  var range = e.range;

  if(range.getColumn() <= 9 && 
     range.getLastColumn() >=9 )
  {
    var edited_row = range.getRow();

    var status = SpreadsheetApp.getActiveSheet().getSheetName('Summary').getRange(edited_row,9).getValue();
    if(status == 'Approved')
    {
      return edited_row;
    }
  }
  return 0;
}

function sendEmailOnApproval(e)
{ var sheet = SpreadsheetApp.getActive().getSheetByName('Range');
  var approved_row = checkStatusIsApproved(e);

  if(approved_row <= 0)
  {
    return;
  }

  sendEmailByRow(approved_row);
}

function sendEmailByRow(row)
{ 
  var values = SpreadsheetApp.getActiveSheet().getSheetName('Range').getRange(row,1,row,5).getValues();
  var row_values = values[0];

  var mail = composeApprovedEmail(row_values);


 //SpreadsheetApp.getUi().alert(" subject is "+mail.subject+"\n message "+mail.message);

  MailApp.sendEmail(admin_email,mail.subject,mail.message);

}



function composeApprovedEmail(row_values)
{
  var first_name = row_values[1];

  var last_name = row_values[2];

  var email = row_values[3];

  var message = "The following mileage is approved: "+first_name+" "+last_name+
    " email "+email;
  var subject = "Mileage approved "+first_name+" "+last_name

  return({message:message,subject:subject});
}

Вот как выглядит лист:

https://docs.google.com/spreadsheets/d/1lWORvuwAHducEIiL-VVidJ-wjujE344udPbWCZpE1kw/edit?usp=sharing

Спасибо за помощь:)

1 Ответ

0 голосов
/ 12 февраля 2020

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

function createTriggerOnEdit(e) {
  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger("sendEmailOnApproval")
  .forSpreadsheet(ss)
  .onEdit()
  .create();
}

В результате функция sendEmailOnApproval будет срабатывать при каждом редактировании электронной таблицы. Эта функция может быть чем-то вроде следующих строк (проверьте подробные пояснения в встроенных комментариях):

function sendEmailOnApproval(e) {
  // Get the edited range and sheet using the event object:
  var range = e.range;
  var editedSheet = range.getSheet();
  var textToSearch = "Approved"; // Set which value will cause the email to be sent
  // Check that edited cell is in column I, its value is "Approved" and its sheet is "Summary":
  if (range.getColumn() === 9 && range.getValue() === textToSearch &&
        editedSheet.getName() === "Summary") {
    var rowIndex = range.getRow(); // Get index of the edited row
    var name = editedSheet.getRange(rowIndex, 4).getValue(); // Get corresponding name in column D
    var rangeValues = e.source.getSheetByName("Range").getDataRange().getValues(); // Get values in sheet "Range"
    // Iterate through the rows in "Range", looking for the name retrieved from sheet "Summary"
    for (var i = 0; i < rangeValues.length; i++) {
      var rowValues = rangeValues[i];
      if (name === rowValues[0]) { // Check if name matches the one in column D from "Summary"
        var mail = composeApprovedEmail(rowValues); // Compose email (your function)
        MailApp.sendEmail(admin_email, mail.subject, mail.message); // Send email
        return; // End execution so that the script stops iterating through the rows in "Range"
      }
    }
  }
}

Примечания:

  • В этом примере вызывается функция composeApprovedEmail. Это так же, как тот, который вы предоставили. Остальные предоставленные вами функции не используются.

Ссылка:

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