You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 17:48:25