我有一个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 }}和<
,这根本无法显示代码:
P.S .:我在此网站上找到了这部分代码,因为我不知道如何执行此特定功能。
>
日志显示:
var templ = HtmlService
.createTemplateFromFile('testEmail');
templ.emailBody = emailBody;
Logger.log(emailBody);
var emailBody = templ.evaluate().getContent();
有人可以帮助我解决这个问题吗?
非常感谢。
答案 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;
}
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>
<? } ?>
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的一般知识。
我希望这会有所帮助。