格式化 table 并通过电子邮件发送

Format a table and send in email

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

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

这是我的代码,如果有人能指出我正确的方向,那将非常有帮助,这是我目前的代码....

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 table 包括单元格背景颜色和数字格式。

这样的话,下面的修改怎么样?

修改后的脚本:

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
    });
  }
}

参考:

嗯,没有直接的方法可以做到这一点,因为您正在尝试将从电子表格中抓取的表格数据转换为纯文本 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});
     
 }