发送自动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
相关产品推荐
相关产品推荐

