Google apps script 仅将非空单元格复制到通过电子邮件发送的HTML对象中
我有一个脚本,它将一个表从谷歌工作表复制到一封每天自动发送的电子邮件中(有一个触发器)。表总是从单元格K1开始,并且总是有6列,但是行数总是不同的。我想解释一下,让它变得更有活力。以下是谷歌脚本:Google apps script 仅将非空单元格复制到通过电子邮件发送的HTML对象中,google-apps-script,google-sheets,gmail-api,Google Apps Script,Google Sheets,Gmail Api,我有一个脚本,它将一个表从谷歌工作表复制到一封每天自动发送的电子邮件中(有一个触发器)。表总是从单元格K1开始,并且总是有6列,但是行数总是不同的。我想解释一下,让它变得更有活力。以下是谷歌脚本: function CheckShare() { // Fetch the monthly sales var Range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Daily AA Catergory Share").get
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});
}
}
函数CheckShare(){
//拿到月销售额
var Range=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“每日AA类别共享”).getRange(“I2”);
var result=Range.getValue();
var data=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“每日AA类别共享”).getRange(“K1:P10”).getValues();
var TABLEFORMAT='cellspacing=“2”cellpadding=“2”dir=“ltr”border=“1”style=“宽度:100%;表格布局:固定;字体大小:10pt;字体系列:arial,sans,sans serif;边框收拢:收拢;边框:1px实心#ccc;字体重量:普通;颜色:黑色;背景颜色:白色;文本对齐:中间;文本装饰:无;字体样式:普通;'
var htmltable='使用.getDataRange()
而不是.getRange(“K1:P10”)
,这应该只返回包含实际数据的行
var data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Daily AA Catergory Share").getDataRange().getValues();
编辑:
由于您无法使用.getDataRange()
来实现您的目标。请尝试使用.getLastRow()
而不是将其传递给您的getRange()
。下面的代码应获得K1:Px的范围(x=您拥有的数据行数)
使用.getDataRange()
而不是.getRange(“K1:P10”)
,这应该只返回包含实际数据的行
var data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Daily AA Catergory Share").getDataRange().getValues();
编辑:
由于您无法使用.getDataRange()
来实现您的目标。请尝试使用.getLastRow()
而不是将其传递给您的getRange()
。下面的代码应获得K1:Px的范围(x=您拥有的数据行数)
嘿@ross,谢谢你的建议,但问题是A:F列中还有其他数据,例如,我不想包含在电子邮件中。我只想包含K:P列中的数据。不用担心-你是对的getDataRange()
如果在其他列中有数据,将获取太多数据。我已编辑了我的答案,并包含了一个使用getLastRow()的解决方案
相反,看看这是否有帮助。嘿@ross,不幸的是,这也没有帮助。例如,如果a:F列中的表有10行,那么这个脚本也将从K:P列中获取10行,即使K:P列中可能只有前4行中的数据。嘿@ross,我刚刚成功。基本上我使用了你的代码,但我只需将我想在电子邮件中发送的表移动到一个单独的选项卡。非常感谢!太好了!我一直在努力寻找一种方法来过滤掉所有的空值,但这也很有效。这让我松了一口气。嘿@ross,谢谢你的建议,但问题是a:F列中还有其他数据,例如,我没有希望包含在电子邮件中。我只希望包含K:P列中的数据。不用担心-你说得对getDataRange()
如果在其他列中有数据,则会获取太多数据。我已编辑了我的答案,并包含了一个使用getLastRow()的解决方案
相反,看看这是否有帮助。嘿@ross,不幸的是,这也没有帮助。例如,如果a:F列中的表有10行,那么这个脚本也将从K:P列中获取10行,即使K:P列中可能只有前4行中的数据。嘿@ross,我刚刚成功。基本上我使用了你的代码,但我只需将我想在电子邮件中发送的表移动到一个单独的选项卡。非常感谢!太好了!我一直在努力寻找一种方法来过滤掉所有的空值,但这也很有效。真是一种解脱。