如何在Google Sheets Apps Script邮件中添加HTML超链接与换行
解决方案
问题分析
你的代码当前仅发送纯文本邮件,未利用htmlBody参数实现HTML格式的超链接与换行,同时数据范围的获取存在语法错误('B2:E75' + sh.getLastRow()会生成无效的范围字符串)。
修改后的代码
function sendEmail() { const ss = SpreadsheetApp.getActive(); const sh = ss.getSheetByName('Sheet'); // 正确获取B2到E列最后一行的数据范围 const lastRow = sh.getLastRow(); const data = sh.getRange(2, 2, lastRow - 1, 4).getValues(); const htmlMessages = data.reduce((ar, r) => { const overdueValue = r[2]; if (overdueValue > 19) { const url = r[0]; const da = r[1]; const pa = r[2]; const bl = r[3]; // 按预期构造HTML格式内容,模板字符串更易读 const htmlMessage = `<a href="${url}${bl}">${bl}</a> ${da} ${pa} ${bl} <a href="${url}${da}">${da}</a><br>`; ar.push(htmlMessage); } return ar; }, []); const subject = "Subject"; const recipient = 'some@gmail.com'; // 构造纯文本备用内容(兼容不支持HTML的邮件客户端) const plainText = htmlMessages.map(html => { return html.replace(/<[^>]+>/g, '') }).join('\n'); // 发送HTML格式邮件,同时提供纯文本 fallback MailApp.sendEmail({ to: recipient, subject: subject, body: plainText, htmlBody: htmlMessages.join('') }); }
关键修改说明
- 数据范围修正:用
getRange(2, 2, lastRow - 1, 4)替代原错误写法,参数分别对应起始行、起始列、数据行数、数据列数,确保准确获取目标数据。 - HTML内容构造:使用ES6模板字符串生成包含超链接(
<a>标签)和换行(<br>)的HTML片段,语法简洁不易出错。 - HTML邮件发送:通过配置对象调用
MailApp.sendEmail(),同时指定body(纯文本备用)和htmlBody(HTML内容),兼顾不同邮件客户端的兼容性。 - 纯文本转换:将HTML内容剥离标签转为纯文本,避免不支持HTML的客户端显示乱码。
内容的提问来源于stack exchange,提问作者Mike420
相关产品推荐
相关产品推荐

