Копирование только непустых ячеек в объект HTML, который отправляется через электронную почту - PullRequest
0 голосов
/ 29 мая 2019

У меня есть скрипт, который копирует таблицу из Google Sheet в электронное письмо, которое отправляется автоматически каждый день (есть триггер).Таблица всегда начинается в ячейке K1 и в ней всегда 6 столбцов, однако количество строк всегда различается.Я хочу объяснить это и сделать ее динамичной.Вот скрипт Google:

function CheckShare() {
  // Fetch the monthly sales
  var Range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Daily AA Catergory Share").getRange("I2"); 
  var result = Range.getValue();
  var data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Daily AA Catergory Share").getRange("K1:P10").getValues();


  var TABLEFORMAT = 'cellspacing="2" cellpadding="2" dir="ltr" border="1" style="width:100%;table-layout:fixed;font-size:10pt;font-family:arial,sans,sans-serif;border-collapse:collapse;border:1px solid #ccc;font-weight:normal;color:black;background-color:white;text-align:center;text-decoration:none;font-style:normal;'

  var htmltable = '<table ' + TABLEFORMAT +' ">';

for (row = 0; row<data.length; row++){

htmltable += '<tr>';

for (col = 0 ;col<data[row].length; col++){
  if (data[row][col] === "" || 0) {htmltable += '<td>' + 'None' + '</td>';} 
  else
    if (row === 0)  {
      htmltable += '<th>' + data[row][col] + '</th>';
    }

  else {htmltable += '<td>' + data[row][col] + '</td>';}
}

     htmltable += '</tr>';
}

     htmltable += '</table>';
     Logger.log(data);
     Logger.log(htmltable);
  // Check totals sales
  if (result >0){
    // Fetch the email address
      var emailAddress = "reports@gmail.com";
    // Send Alert Email.
    var message = 'There are ' + result +' deviating metrics: https://docs.google.com/spreadsheets/d/1AQEBTt919TIu92Gb9TeZRD3KpSm3L_WCHgTOmw/edit#gid=1525731698'
    + ' See the dashboard here: <link> ';
    var subject = 'Transaction Monitoring Alert: AA Share';
    MailApp.sendEmail(emailAddress, subject, message, {htmlBody:htmltable});
    }
}

Текущий вывод электронной почты выглядит следующим образом: enter image description here

Я хочу исключить строки со значениями "Нет"(пустые ячейки)

1 Ответ

2 голосов
/ 29 мая 2019

Используйте .getDataRange() вместо .getRange(K1:P10), это должно возвращать только строки с фактическими данными.

var data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Daily AA Catergory Share").getDataRange().getValues();

Edit:

Поскольку вы не можете использовать .getDataRange() для достижения своей цели. Попробуйте использовать .getLastRow() вместо того, чтобы передать это на getRange(). Приведенный ниже код должен получить диапазон K1: Px (x = сколько у вас строк данных).

var dataSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Daily AA Catergory Share");
var lastRow = dataSheet.getLastRow();
var data = dataSheet.getRange(1, 11, lastRow, 6).getValues();
...