Электронная почта НЕ должна отправляться, когда на выбранном листе НЕТ данных - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть скрипт, который извлекает данные из определенного имени вкладки «Мастер» на листе Google, который затем отправляет электронное сообщение, инициирующее в указанное c время.

Моя проблема в том, что я не хочу, чтобы скрипт отправлял пустое письмо, если таблица в «Мастер» пуста. Скрипт должен прекратить отправку электронной почты.

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

function sendEmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Master");
  var range = sheet.getDataRange();
  var recipient = 'email@gmail.com'
  var subject = 'Stock Report'
  var date = Utilities.formatDate(new Date(), "GMT+1", "dd/MM/yyyy")
  var schedRange = sheet.getRange("A1:L21"); 

  var body = '<div style="text-align:center;display: inline-block;font-family: arial,sans,sans-serif">'
  body += '<H1>'+ 'Low Stock Report ' +'</H1>';
  body += '<H2>'
  body += getHtmlTable(schedRange);
  body += '</div>'; 
  GmailApp.sendEmail(recipient, subject, "Requires HTML", {htmlBody:body}) 
  //End sendNotification

}

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Как проверить, не является ли таблица пустой

  • Если ваша таблица var schedRange = sheet.getRange("A1:L21");, вы можете проверить либо пустую ее, получив ее значения и отправить ее только в случае найдено непустое значение.
  • Вы можете реализовать логическую переменную - как только в таблице будет найдено первое непустое значение - для нее будет установлено значение true и будет отправлено электронное письмо.

Пример:

function sendEmail() {
  ...
  var schedRange = sheet.getRange("A1:L21"); 
  var values = schedRange.getValues();
  var send = false;
  for (var i = 0; i < values.length; i++){
    for (var j = 0; j < values[0].length; j++){
      var value = values[i][j];
      if (value !="" && value !=" "){
        return send = true;
      }
    }
  }
  if (send == true){   
    var body = '<div style="text-align:center;display: inline-block;font-family: 
    ...
    GmailApp.sendEmail(recipient, subject, "Requires HTML", {htmlBody:body}) 
  }
}

Вы также можете сделать что-то вроде этого:

  var schedRange = sheet.getRange("A1:L21"); 
  var values = schedRange.getValues();
  if (values.flat(2).length>0) {
    //Send
    var body = '<div style="text-align:center;display: inline-block;font-family: 
    ...
    GmailApp.sendEmail(recipient, subject, "Requires HTML", {htmlBody:body}) 
  }

Благодаря тому, что flat() сделает 2D массив в простой массив, удаляя пустые элементы, мы можем использовать его, чтобы в основном удалить все пустые значения из массива, эффективно проверяя, пуст он или нет.

0 голосов
/ 13 апреля 2020

После применения примера кода я не получаю электронное письмо, я пробовал оба способа с данными и без данных в Мастер-листе, но без электронного письма. Я не уверен, правильно ли я поступаю.

Пример:

function sendEmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Master");
  var range = sheet.getDataRange();
  var recipient = 'alislife87@gmail.com'
  var subject = 'Stock Report'
  var date = Utilities.formatDate(new Date(), "GMT+1", "dd/MM/yyyy")
  var schedRange = sheet.getRange("A1:L21"); 
  var values = schedRange.getValues();
  var send = false;
  for (var i = 0; i < values.length; i++){
    for (var j = 0; j < values[0].length; j++){
      var value = values[i][j];
      if (value !="" && value !=""){
        return send = true;
      }
    }
  }
  if (send == true){   
    var body = '<div style="text-align:center;display: inline-block;font-family: 
    arial,sans,sans-serif">'
    body += '<H1>'+ 'Low Stock Report ' +'</H1>';
    body += '<H2>'
    body += getHtmlTable(schedRange);
    body += '</div>';
    GmailApp.sendEmail(recipient, subject, "Requires HTML", {htmlBody:body})  
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...