使用Apps Script生成HTML邮件时丢失换行符的问题排查
解决Google Apps Script邮件表格换行符丢失问题
问题根源
Google Sheets中TEXTJOIN(CHAR(10), TRUE, C8:C15)生成的换行符是\n,但HTML邮件不识别该字符,需替换为HTML换行标签<br>。之前的尝试失败原因:
- 直接对
dataRange调用.replace:dataRange是二维数组,数组无replace方法,操作无效 - 将
dataRange转为字符串后替换:破坏了原数组的行列结构,导致HTML模板无法正确渲染表格
解决方案
遍历数据范围的每个单元格,将其中的\n替换为<br>,再传递给HTML模板。
方法一:在数据收集阶段处理(推荐)
修改dataCollector.gs,在获取数据后添加替换逻辑:
function dataCollector(sheet_id){ // access the workbook var wb = SpreadsheetApp.getActiveSpreadsheet(); // access all sheets in workbook var sheets = wb.getSheets(); // loop through sheets for(i in sheets){ // conditional to evaluate the sheet ids if(sheets[i].getSheetId() == sheet_id){ //identify the sheet name var sheetName = sheets[i].getSheetName(); } } // access the sheet var dataSheet = wb.getSheetByName(sheetName); // access the data range var dataRange = dataSheet.getRange(1,1,3,5).getDisplayValues(); // 遍历替换所有单元格的换行符为HTML换行标签 dataRange = dataRange.map(row => row.map(cell => cell.replace(/\n/g, '<br>')) ); // return statement return dataRange; }
方法二:在HTML模板中单独处理
如果仅特定行/列需要替换,可直接在email.html的单元格输出时处理:
<tbody> <tr> <td><?= dataCollect[2][0].replace(/\n/g, '<br>') ?></td> <td><?= dataCollect[2][1].replace(/\n/g, '<br>') ?></td> <td><?= dataCollect[2][2].replace(/\n/g, '<br>') ?></td> <td><?= dataCollect[2][3].replace(/\n/g, '<br>') ?></td> <td><?= dataCollect[2][4].replace(/\n/g, '<br>') ?></td> </tr> </tbody>
效果验证
修改后重新运行myFunction,邮件中的缺勤人员名单会按换行显示,表格格式保持完整。
内容的提问来源于stack exchange,提问作者Tom Hynes
相关产品推荐
相关产品推荐

