Копирование только непустых ячеек в объект HTML, отправляемый по электронной почте

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

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 = "[email protected]";
    // 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});
    }
}

Текущий вывод электронной почты выглядит следующим образом: Копирование только непустых ячеек в объект HTML, отправляемый по электронной почте

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Редактировать:

Так как вы не можете использовать .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();

Привет, @ross, спасибо за предложение, но проблема в том, что, например, в столбцах A: F есть и другие данные, которые я не хочу включать в электронное письмо. Я хочу включить только данные, находящиеся в столбцах K:P.

Banker 31.05.2019 10:24

Не беспокойтесь — вы правы getDataRange() будет слишком много данных, если у вас есть данные в других столбцах. Я отредактировал свой ответ и включил решение, которое вместо этого использует getLastRow(), посмотрите и посмотрите, поможет ли это вам.

ross 31.05.2019 10:34

Привет @ross, к сожалению, это тоже не помогло. Если, например, таблицы в столбцах A:F имеют 10 строк, этот скрипт также возьмет 10 строк из столбцов K:P, даже если данные могут быть только в первых 4 строках столбцов K:P.

Banker 31.05.2019 11:59

Привет, @ross, у меня все получилось. По сути, я использовал ваш код, но просто переместил таблицу, которую хочу отправить по электронной почте, на отдельную вкладку. Большое спасибо!

Banker 31.05.2019 12:25

Здорово! Я рвал на себе волосы, пытаясь найти способ отфильтровать все пустые значения, но это тоже работает. Какое облегчение.

ross 31.05.2019 12:29

Другие вопросы по теме