仅将非空单元格复制到通过电子邮件发送的 HTML 对象中
Copying only non-empty cells into the HTML object which is being sent vie e-mail
我有一个脚本可以将 table 从 Google Sheet 复制到每天自动发送的电子邮件中(有一个触发器)。 table 总是从单元格 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});
}
}
当前的电子邮件输出如下所示:
我希望它排除值为 "None" 的行(空单元格)
使用 .getDataRange()
而不是 .getRange("K1:P10")
,这应该只有 return 行包含实际数据。
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();
我有一个脚本可以将 table 从 Google Sheet 复制到每天自动发送的电子邮件中(有一个触发器)。 table 总是从单元格 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});
}
}
当前的电子邮件输出如下所示:
我希望它排除值为 "None" 的行(空单元格)
使用 .getDataRange()
而不是 .getRange("K1:P10")
,这应该只有 return 行包含实际数据。
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();