У меня есть скрипт, который копирует таблицу из 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});
}
}
Текущий вывод электронной почты выглядит следующим образом:
Я хочу, чтобы он исключал строки со значениями «Нет» (пустые ячейки)
Используйте .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();
Не беспокойтесь — вы правы getDataRange()
будет слишком много данных, если у вас есть данные в других столбцах. Я отредактировал свой ответ и включил решение, которое вместо этого использует getLastRow()
, посмотрите и посмотрите, поможет ли это вам.
Привет @ross, к сожалению, это тоже не помогло. Если, например, таблицы в столбцах A:F имеют 10 строк, этот скрипт также возьмет 10 строк из столбцов K:P, даже если данные могут быть только в первых 4 строках столбцов K:P.
Привет, @ross, у меня все получилось. По сути, я использовал ваш код, но просто переместил таблицу, которую хочу отправить по электронной почте, на отдельную вкладку. Большое спасибо!
Здорово! Я рвал на себе волосы, пытаясь найти способ отфильтровать все пустые значения, но это тоже работает. Какое облегчение.
Привет, @ross, спасибо за предложение, но проблема в том, что, например, в столбцах A: F есть и другие данные, которые я не хочу включать в электронное письмо. Я хочу включить только данные, находящиеся в столбцах K:P.