Сценарий запуска при не ручном изменении / редактировании в ячейку - Google Script - PullRequest
0 голосов
/ 30 августа 2018

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

Однако это происходит только в том случае, если ячейка вручную изменяется на " Да ", введенный в ячейку. И триггеры, основанные на триггере пользовательского интерфейса редактирования.

Но ячейка обновляется в соответствии с формулой, которая ссылается на другой лист, где она берет " Нет " и " Да ", поэтому редактирование / обновление вручную не выполняется. ячейка в этом листе.

Как я могу получить его для отправки электронного письма без каких-либо изменений в ячейках вручную, только при изменении с " Нет " на " Да "

Буду признателен за любую помощь.

function sendNotification(e){
  var s = SpreadsheetApp.getActiveSpreadsheet();
  var ss = s.getSheetByName("Order Details")
  if(e.range.getColumn()==3 && e.value=='Yes'){
  var cell = ss.getActiveCell();
  var row = cell.getRow();

  var ordernumber = ss.getRange(row,4).getValue();  //Column D
  var sku = [{}]; sku = ordernumber.toString().split("-")

 var sizewidth = ss.getRange(row,5).getValue();  //Column E
 var sizeheight = ss.getRange(row,6).getValue();  //Column F
 var qty = ss.getRange(row,8).getValue();    //Column H
 var country = ss.getRange(row,10).getValue();  //Column J
 var tube = ss.getRange(row,9).getValue();   //Column I
 var paintingimage = ss.getRange(row,7).getValue();  //Column G
 var orderlink = ('http://testly/Km345TS');



 MailApp.sendEmail({
  to: "xxx@gmail.com",
  subject:  country + " New Order No. " + ordernumber, // note the spaces between the quotes...
  //attachment: [file,blob],
  htmlBody: "Hello XYZ,  <br><br>"+
   "Please find order details below. <br><br>"+
    sku[1] + "<br><br>" +
   "Size - Width: " + sizewidth + " x " + "Height: " + sizeheight + "<br><br>"+
   "Quantity - " + qty + "<br><br>"+
   "- It needs to be tube rolled"+ "<br>" +
   "- Shipment to " + country + "<br>" +
   "- Order image is " + paintingimage + "<br><br>" +
   "Please fill in cost and delivery details at this link " + orderlink + "<br><br>" +
   "The order is for a customer from " + country + "<br><br>" +
   "Thanking you, <br>" +
   "ABC",            
                   })
 }
} 

Обновление: решение - большое спасибо Рону.

function sendNotification2(){
  var sSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet 1");
  var data = sSheet.getRange(2, 1, sSheet.getLastRow(), sSheet.getLastColumn()).getValues(); //get the values of your table, without the header
  var EMAIL_SENT = 'EMAIL_SENT';

  for (var i = 0; i < data.length; i++) {
    var row = data[i];

    var send = row[16];  //Column Q
    var emailSent = row[17];   //Column R
    var ordernumber = row[4];  //Column E
    var country = row[10];  //Column K
    var orderlink = ('http:/testly/Khghgy');
    var shipaddress = row[18];  //Column S

 if (send == "Yes"){
    if (emailSent != EMAIL_SENT) { // Prevents sending duplicates

 MailApp.sendEmail({
   to:  "xx@gmail.com",
  subject:  country + " Ship Order No. " + ordernumber, // note the spaces between the quotes...
  htmlBody: "Hello XYZ,  <br><br>"+

   "Thanking you, <br>" +
   "ABC",            
    })
  sSheet.getRange(i+2, 18).setValue(EMAIL_SENT);
   }
  }
 }
} 

1 Ответ

0 голосов
/ 31 августа 2018

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

Что-то вроде:

function onEdit(){
  var s = SpreadsheetApp.getActiveSpreadsheet();
  var ss = s.getSheetByName("Other Sheet Name");
  if(e.range.getColumn()==3 && e.value=='Yes'){  //change this if the data setup is different on the other sheet
    sendNotification();
  }
}

Проблема заключается в том, что эта установка затем отправит электронное письмо каждому «Да» на листе электронной почты. Это можно исправить с помощью индикатора «Email_Sent» (вы можете посмотреть его - доступно множество примеров).

** Другой вариант, как я упоминал в последнем вопросе , - это запуск функции sendNotification каждую минуту, 5 минут, 10 минут или ??? Это не обеспечит немедленные электронные письма, но это будет почти так.

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