<和>更改为&lt;和&gt;在Google脚本中的HTML代码中

时间:2019-12-06 17:03:01

标签: html google-apps-script google-sheets

我有一个Google Spreadsheet脚本,该脚本从工作表中获取特定值并将其放入数组中,该数组随后转换为HTML表并包含在电子邮件中。 在我尝试将电子邮件模板中的表格的HTML代码作为Google脚本中的HTML文件推送之前,该代码才能正常工作。

这是填充HTML表的代码的特定部分:

var i,j;
      for(i=0, j=0; i<(eval('array'+a+'[2];').length), j<(eval('array'+a+'[2];').length); i++, j++) {
          result += "<tr>";
          result += "<td>"+eval('array'+a+'[2][j];')+"</td>";
          result += "<td>"+eval('array'+a+'[3][j];')+"</td>";
      }

      result += "</tr>";
      result += "</table>";

      eval('htmlTable'+a+'.push("'+result+'");')
      var htmlPush = eval('htmlTable'+a)

      if(htmlPush != '<table border=1></tr></table>'){
          emailBody += '<div style="text-align:center;float: left;display: inline-block;margin-left: 10px;font-family: arial,sans,sans-serif">';
          emailBody += htmlPush;
          emailBody += '</div><span>';
      }

因此,HTML代码放置在div内,每个表一个div

此代码的日志正确显示:

<div style="text-align:center;float: left;display: inline-block;margin-left: 10px;font-family: arial,sans,sans-serif"><table border=1><tr><td>Locked Proxy</td><td>Fail</td><tr><td>Final Proxy</td><td>Fail</td><tr><td>Final Script</td><td>Fail</td><tr><td>PM</td><td>Fail</td></tr></table></div><span><div style="text-align:center;float: left;display: inline-block;margin-left: 10px;font-family: arial,sans,sans-serif"><table border=1><tr><td>ME</td><td>Fail</td></tr></table></div><span><div style="text-align:center;float: left;display: inline-block;margin-left: 10px;font-family: arial,sans,sans-serif"><table border=1><tr><td>Locked Script</td><td>Fail</td></tr></table></div><span>



但是,当我实现应将HTML模板中的“标记”替换为实际代码的另一部分时,HTML代码会更改,特别是<>符号更改为{{1 }}和&lt;,这根本无法显示代码:
P.S .:我在此网站上找到了这部分代码,因为我不知道如何执行此特定功能。

&gt;

日志显示:

var templ = HtmlService
      .createTemplateFromFile('testEmail');

  templ.emailBody = emailBody;
  Logger.log(emailBody);
  var emailBody = templ.evaluate().getContent();


有人可以帮助我解决这个问题吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

如果要基于电子表格数据动态创建HTML表,则应将电子表格中的数据发送到HTML,然后在其中使用scriptlets。可以通过以下方式完成:

  • 首先,在代码中创建一个函数,该函数将从工作表中获取所需的数据。在这种情况下,根据您提供的信息,我认为您希望从12-23行和C的列中获取数据,直到最后一个有数据的数据(如果需要,请进行相应的修改)并非如此)。因此,这种功能可能在以下几行中出现:
function getData() {
  var sheet = SpreadsheetApp.getActive().getSheetByName("Test");
  var firstRow = 12;
  var firstCol = 3;
  var numRows = 24 - firstRow;
  var numCols = sheet.getLastColumn() - firstCol;
  var values = sheet.getRange(firstRow, firstCol, numRows, numCols).getValues();
  return values;
}
  • 此函数及其返回的数据可以依次在html中用于动态创建表格。我假设您想为每个列创建一个新表,对于每个表,您都希望为每个现有的Fail都创建一行(并且每一行都具有单元格,其中一个用于Availability中的值,另一个用于QC(也将是Fail)。因此,在这种情况下,您可以创建两个for循环,以跟踪每列中Fail个单元格的存在,然后添加每个表对应的行:
<? var values = getData(); ?>
<? for (var j = 0; j < values[0].length; j++) { ?>
  <div style="text-align:center;float: left;display: inline-block;margin-left: 10px;font-family: arial,sans,sans-serif">
  <table border=1>
  <? for (var i = 0; i < values.length; i = i + 2) {
    var qc = values[i + 1][j];
    if (qc == "Fail") {
      var availability = values[i][j]; ?>
      <tr>
        <td><?= availability ?></td>
        <td><?= qc ?></td>
      </tr>
    <? }
  } ?>
  </table>
  </div>
<? } ?>
  • 最后,将需要另一个功能来获取html模板,对其进行评估并发送电子邮件。可能是这样的:
function sendEmail() {
  var title = SpreadsheetApp.getActiveSheet().getRange("C2").getValue();
  var subject = 'IMPORTANT - QC Fail notification for '+ title + ' tracker';
  var emailBody = HtmlService.createTemplateFromFile('testEmail').evaluate().getContent();
  var recipient = "recipient_address";
  MailApp.sendEmail({
    to: recipient,
    subject: subject,
    htmlBody: emailBody
  })
}

我不确定这是否正是您想要的,但是您应该获得关于如何基于电子表格数据动态创建HTML的一般知识。

我希望这会有所帮助。