如何在Google Apps Script的HTML邮件中换行展示Google Sheets列表?
问题描述
使用Google Apps Script发送自动化邮件时,通过Google Sheets中TEXTJOIN+CHAR(10)生成的换行列表,在HTML邮件中显示为连续文本,需要改成逐行展示。
解决方案
方法1:替换换行符为HTML换行标签
在脚本中将表格文本里的换行符(\n)替换为HTML的<br>标签,让邮件识别换行。
修改后的Apps Script代码:
function trial() { var name1 = 0; var email = 1; var emailTemp = HtmlService.createTemplateFromFile("htmlcode"); var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); var data = ws.getRange("G2:H" + ws.getLastRow()).getValues(); data.forEach(function(row){ // 替换换行符为HTML换行标签 emailTemp.level2names = row[name1].replace(/\n/g, '<br>'); var htmlMessage = emailTemp.evaluate().getContent(); GmailApp.sendEmail( row[email], "测试输出!", "你的邮箱不支持HTML格式", {name: "Vish", htmlBody: htmlMessage} ); }); }
HTML模板无需修改,原有代码即可生效。
方法2:生成HTML无序列表(推荐)
如果需要带项目符号的列表样式,可将文本按换行分割后生成<ul>列表,更符合预期输出的视觉效果。
修改后的Apps Script代码:
function trial() { var name1 = 0; var email = 1; var emailTemp = HtmlService.createTemplateFromFile("htmlcode"); var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); var data = ws.getRange("G2:H" + ws.getLastRow()).getValues(); data.forEach(function(row){ // 分割文本并生成列表项 var namesList = row[name1].split('\n').map(name => `<li>${name}</li>`).join(''); emailTemp.level2names = `<ul>${namesList}</ul>`; var htmlMessage = emailTemp.evaluate().getContent(); GmailApp.sendEmail( row[email], "测试输出!", "你的邮箱不支持HTML格式", {name: "Vish", htmlBody: htmlMessage} ); }); }
对应的HTML模板可简化为:
<table border="1" cellpadding="1" cellspacing="1" style="width:500px"> <tbody> <tr> <td> <p>以下是G列的人员列表</p> <?= level2names?> <p> </p> </td> </tr> </tbody> </table>
内容的提问来源于stack exchange,提问作者Gitz
相关产品推荐
相关产品推荐

