Флажок, чтобы утвердить запись в Google таблицах и отправить электронное письмо с подтверждением

#google-apps-script #google-sheets

#google-apps-script #google-sheets

Вопрос:

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

 function function1() {
  var sheet= SpreadsheetApp.openById("xxxx").getSheetByName("payments");
  var ui = SpreadsheetApp.getUi();

  var result = ui.prompt('Please enter the S. No of the entry you want to approve', ui.ButtonSet.OK_CANCEL);
  var button = result.getSelectedButton();
  var sno = result.getResponseText();

  for (var i=1; i<=100 ; i  )
  {
    Logger.log(sheet.getRange(i,1).getValue());
    if(sno == sheet.getRange(i,1).getValue())
    {
      var index = i;
    }

  }
  Logger.log(index);
  var invitem = sheet.getRange(index,5).getValue();
  var invdesc = sheet.getRange(index,6).getValue();
  var reqby = sheet.getRange(index,3).getValue();
  var amount = sheet.getRange(index,8).getValue();
  
  if (button == ui.Button.OK)
  {
    var subject = 'Payment release request approved';
    var body = '<p>Hello</p> <p>This particular payment release is approved from my end</p> <p>Invoice Item: '  invitem  '</p> <p>Description: '  invdesc  '</p> <p>Requested By: ' reqby 'amp;nbsp;</p> <p>Requested By: ' amount 'amp;nbsp;</p> <p>amp;nbsp;</p> <p><em>This is an automated email triggerred post approval</em></p>'
    var email= 'finance@xxxx.xxx';
    GmailApp.sendEmail(email, subject, "Requires HTML", {
        htmlBody: body})

    sheet.getRange(index,16).setValue("Approved").setBackground('#008000');
  }
}
 

Комментарии:

1. Ну, как дела?

2. Мне здесь нелегко. Когда я устанавливаю флажок, функция запускается, но мне все равно приходится вводить индекс строки вручную через диалоговое окно, чтобы получить все данные из строки.

3. Почему бы не передать e функции, потому что строка e.range.rowStart

4. Это сработало великолепно. Спасибо. Однако электронное письмо отправляется от человека, который настроил триггер, а не от человека, который на самом деле ставит флажок. Могу ли я в любом случае отправлять отправляемые электронные письма от человека, который на самом деле устанавливает флажок?

5. Вероятно, вы можете получить это из Session.getActiveUser().getEmail();

Ответ №1:

Хорошо, вот функция и устанавливаемая функция создания триггера

 function onMyEdit(e) {
  const sh = e.range.getSheet();
  if(sh.getName() == 'Your sheet name' amp;amp; e.range.columnStart == '15' amp;amp;  e.value == "TRUE") {
    let snum = sh.getRange(e.range.rowStart,1).getValue();
    ApproveAndSendEmail({snum:snum});
  }
}

function createTrigger() {
  const ss = SpreadsheetApp.getActive();
  if(ScriptApp.getProjectTriggers().filter(t => t.getHandlerFunction() == "onMyEdit").length == 0) {
    ScriptApp.newTrigger('onMyEdit').forSpreadsheet(ss).onEdit().create();
  }
}
 

Комментарии:

1. Не могли бы вы подробнее рассказать о том, что здесь нужно сделать. Нужно ли настраивать какие-либо триггеры?

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

3. Что означает сбор S. num. Для отправки электронного письма требуется разрешение, поэтому потребуется установить триггер.

4. 1-я строка — это то, как я управляю rn. Я хочу, чтобы это было так, как во 2-й строке, где есть флажок. imgur.com/a/1EafVRu . S. Нет — это счетчик серийных номеров, который я запускаю для индексации каждой строки