设置表格格式并发送电子邮件



我正试图发送一封包含表格的电子邮件,我已经创建了表格,但不知道如何复制格式,包括背景色和数字格式,因为有些单元格包含货币、百分比和纯数字。

由于数据是彩色编码的,因此将这些数据复制到电子邮件中很重要。

这是我的代码,如果有人能给我指明正确的方向,那将非常有帮助,这是我迄今为止的代码。。。。

function createTable(data){ 
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");

//To be looped in the future, 10 in range to be replaced with k
var dataRange = sheet.getRange(10,4,1,9);
var data = dataRange.getValues();
//Table Header
var table = "<html><body><br><table border=1><tr><th>Compliance Score</th><th>STSOR Value</th><th>STSOR %</th><th>ZZ lines</th><th>ZZ%</th><th>PI lines Counted</th><th>PI %</th><th>NRDS Value</th><th>NRDS %</tr></br>";
//table Body
for (var i = 0; i < data.length; i++){
cells = data[i]; //puts each cell in an array position
table = table + "<tr>";
for (var u = 0; u < cells.length; u++){
table = table + "<td>"+ cells[u] +"</td>";
}
table = table + "</tr>"

//Send the email:
MailApp.sendEmail({
to: "example@gmail.com", 
subject: "Example",
htmlBody: table}); 
}
}

我相信您的目标如下。

  • 您想要创建一个包含单元格背景颜色和数字格式的HTML表

在这种情况下,下面的修改如何?

修改的脚本:

function createTable() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
var dataRange = sheet.getRange(10, 4, 1, 9);
var backgrounds = dataRange.getBackgrounds(); // Added
var data = dataRange.getDisplayValues(); // Modified
var table = "<html><body><br><table border=1><tr><th>Compliance Score</th><th>STSOR Value</th><th>STSOR %</th><th>ZZ lines</th><th>ZZ%</th><th>PI lines Counted</th><th>PI %</th><th>NRDS Value</th><th>NRDS %</tr></br>";
for (var i = 0; i < data.length; i++) {
cells = data[i];
table = table + "<tr>";
for (var u = 0; u < cells.length; u++) {
table = table + `<td style="background-color:${backgrounds[i][u]}">` + cells[u] + "</td>"; // Modified
}
table = table + "</tr>"
MailApp.sendEmail({
to: "example@gmail.com",
subject: "Example",
htmlBody: table
});
}
}

参考:

  • getDisplayValues((

好吧,没有直接的方法可以做到这一点,因为您正试图将从电子表格中抓取的Sheets数据转换为纯HTML。

然而,如果您进行一些简单的格式化,这仍然可以很容易地完成。在你的例子中,我添加了:

  • 背景色:我使用getBackgrounds()函数收集了该范围内所有单元格的背景色(您可以在此处阅读更多信息(,然后使用CSS为每个单元格设置该背景色的样式
  • 基本格式:我通过使用getNumberFormats()函数(您可以在此处阅读更多内容(,然后粗略地添加一个美元符号或百分比(如果该单元格格式为货币或百分比(来实现这一点
  • 与您的查询无关,但我已将您代码的sendEmail部分移出循环。在您提供的代码中,您将为收集的每行数据发送一封电子邮件
function createTable(data){ 
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");

//To be looped in the future, 10 in range to be replaced with k
var dataRange = sheet.getRange(10,4,1,9);
var data = dataRange.getValues();
var colors = dataRange.getBackgrounds();
var formats = dataRange.getNumberFormats();
//Table Header
var table = "<html><body><br><table border=1><tr><th>Compliance Score</th><th>STSOR Value</th><th>STSOR %</th><th>ZZ lines</th><th>ZZ%</th><th>PI lines Counted</th><th>PI %</th><th>NRDS Value</th><th>NRDS %</tr></br>";
//table Body
for (var i = 0; i < data.length; i++){
cells = data[i]; //puts each cell in an array position
table = table + "<tr>";
for (var u = 0; u < cells.length; u++){
var cellColor = colors[i][u];
var format = formats[i][u];
var finalValue;
if (format.includes("$")){finalValue = "$"+cells[u];}
else if (format.includes("%")){finalValue = (parseFloat(cells[u]) * 100).toString() + " %"}
else {finalValue = cells[u];}
table = table + "<td style='background-color:"+cellColor +"'>"+ finalValue +"</td>";
}
table = table + "</tr>"

}
//Send the email:
MailApp.sendEmail({
to: "oriol@egs-sbt100.xyz", 
subject: "Example",
htmlBody: table});

}

最新更新