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

发送自动Gmail邮件时保留字体颜色的实现咨询

实现带格式的邮件正文(保留单元格内文字颜色)

完全可行,核心思路是提取单元格的富文本格式并转换为HTML,再通过GmailApp发送HTML格式的邮件。以下是修改后的完整脚本:

function onCheckboxEdit(e) {
  var source = e.source;
  var sheet = source.getActiveSheet();
  var range = e.range;
  var row = range.getRow();
  var column = range.getColumn();

  // 修正:原targetRange只取5列,但cc是第6列,调整为取6列避免索引越界
  var targetRange = sheet.getRange(row, 1, 1, 6);
  var targetValues = targetRange.getValues();
  var richTextBody = targetRange.getRichTextValues()[0][4]; // 获取第5列(Message列)的富文本对象

  var recipient = targetValues[0][2];
  var checkboxValue = targetValues[0][3];
  var subject = "New Traveler Coverage Update";
  var cc = targetValues[0][5];

  // 修正:条件判断用全等运算符===而非赋值运算符=
  if (column === 4 && checkboxValue === true) {
    console.log("checkbox marked true");
    // 将富文本转换为HTML格式
    var htmlBody = convertRichTextToHtml(richTextBody);
    
    GmailApp.sendEmail(recipient, subject, "", {
      cc: cc || "department@company.com", // 优先使用表格内的cc地址,无值则用默认地址
      htmlBody: htmlBody // 指定HTML格式的邮件正文
    });
  } else if (column === 4 && checkboxValue === false) {
    console.log("checkbox marked false");
  } else {
    console.log("No clue");
  }
}

// 自定义函数:将Google Sheets富文本对象转换为HTML
function convertRichTextToHtml(richText) {
  var html = "";
  var textSegments = richText.getRuns(); // 获取单元格内所有带独立格式的文本片段
  
  textSegments.forEach(function(segment) {
    var text = segment.getText();
    var textStyle = segment.getTextStyle();
    var color = textStyle.getForegroundColor();
    
    // 识别红色文字(标准红色色值#ff0000),添加对应HTML样式
    if (color === "#ff0000") {
      html += '<span style="color: red;">' + text + '</span>';
    } else {
      // 其他颜色直接输出文本(默认黑色)
      html += text;
    }
  });
  
  return html;
}

关键修改说明:

  • 替换文本获取逻辑:用getRichTextValues()替代getValues(),获取带格式的富文本对象,而非纯文本内容。
  • 新增格式转换函数:convertRichTextToHtml遍历单元格内的每个文本片段,根据字体颜色生成对应的HTML标签,实现颜色保留。
  • 发送HTML邮件:调用GmailApp.sendEmail时传入htmlBody参数,同时将纯文本正文设为空(也可保留纯文本版本作为降级方案)。
  • 修复原脚本bug:修正条件判断的运算符错误,调整单元格范围避免cc列索引越界。

使用注意:

  • 确保Sheet中「Message」列的红色文字是通过设置字体颜色实现的,且色值为标准红色#ff0000,若使用其他红色色值,需在convertRichTextToHtml函数中修改判断条件。
  • 若需要支持更多格式(如加粗、斜体),可扩展转换函数,通过textStyle.isBold()、textStyle.isItalic()等方法添加对应HTML标签。

内容的提问来源于stack exchange,提问作者Kailey Jensen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:57:42