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

Google Apps Script邮件合并:如何保留表格数据的换行格式?

解决Google Sheets邮件合并中保留单元格换行的问题

问题背景

我在修改Martin Hawksey的Google Sheets+Gmail邮件合并脚本时遇到问题:表格单元格内的换行格式(比如手动输入的换行、或包含<br>的内容),发送到邮件后会丢失,变成无换行的一行文本。我尝试修改了列定义和替换逻辑,但没有效果。

问题根源

  1. 数据获取丢失换行:脚本原用getDisplayValues()获取单元格内容,该方法会将单元格内的换行转换为空格,导致原始换行信息丢失。
  2. 转义函数干扰:内置的escapeData_函数会把\n转义为\\n,使HTML邮件无法识别换行符。
  3. 未区分邮件格式:仅将换行替换为\n\n只对纯文本邮件有效,HTML邮件需要将换行转换为<br>标签才能生效。

解决方案

1. 修改数据获取逻辑

将getDisplayValues()替换为getValues(),保留单元格原始内容(包括换行符):

// 替换原数据获取代码
const data = dataRange.getValues();

2. 针对纯文本/HTML分别处理换行

在循环处理每行数据时,为两种邮件格式分别生成带换行的内容:

// 替换原row处理代码段
obj.forEach(function(row, rowIdx){
  if (row[EMAIL_SENT_COL] == ''){
    try {
      const targetCol = "column details"; // 替换为你的目标列名
      // 纯文本邮件:换行转成双换行
      row[`${targetCol}_PLAIN`] = row[targetCol].replace(/\n/g, '\n\n');
      // HTML邮件:换行转成<br>标签
      row[`${targetCol}_HTML`] = row[targetCol].replace(/\n/g, '<br>');
      
      const msgObj = fillInTemplateFromObject_(emailTemplate.message, row);
      
      GmailApp.sendEmail(row[RECIPIENT_COL], msgObj.subject, msgObj.text, {
        htmlBody: msgObj.html,
        attachments: emailTemplate.attachments,
        inlineImages: emailTemplate.inlineImages
      });
      out.push([new Date()]);
    } catch(e) {
      out.push([e.message]);
    }
  } else {
    out.push([row[EMAIL_SENT_COL]]);
  }
});

3. 调整模板占位符

在Gmail草稿模板中,纯文本部分使用{{column details_PLAIN}},HTML部分使用{{column details_HTML}}(将column details替换为你的实际列名)。

4. 修改转义函数

去掉对\n的转义,避免换行符被破坏:

function escapeData_(str) {
  return str
    .replace(/[\\]/g, '\\\\')
    .replace(/[\"]/g, '\\\"')
    .replace(/[\/]/g, '\\/')
    .replace(/[\b]/g, '\\b')
    .replace(/[\f]/g, '\\f')
    // 移除该行,保留原始换行符
    // .replace(/[\n]/g, '\\n')
    .replace(/[\r]/g, '\\r')
    .replace(/[\t]/g, '\\t');
};

注意事项

  • 若单元格内已包含<br>标签,可跳过HTML格式的换行替换逻辑。
  • 确保模板占位符与代码中生成的字段名完全匹配,否则替换不会生效。

内容的提问来源于stack exchange,提问作者S C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:45:31