Google Apps Script发送表格邮件时如何保留超链接格式?
解决Google Apps Script发送邮件表格丢失超链接的问题
问题代码
原代码运行正常但无法保留单元格超链接:
function sendMail(){ var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Email"); var data = sh.getRange("A:C").getValues(); var TABLEFORMAT = 'cellspacing="2" cellpadding="2" dir="ltr" border="1" style="width:100%;table-layout:fixed;font-size:10pt;font-family:arial,sans,sans-serif;border-collapse:collapse;border:1px solid #ccc;font-weight:normal;color:black;background-color:white;text-align:center;text-decoration:none;font-style:normal;' var htmltable = '<table ' + TABLEFORMAT +' ">'; for (row = 0; row<data.length; row++){ htmltable += '<tr>'; for (col = 0 ;col<data[row].length; col++){ if (data[row][col] === "" || 0) {htmltable += '<td>' + 'None' + '</td>';} else if (row === 0) { htmltable += '<th>' + data[row][col] + '</th>'; } else {htmltable += '<td>' + data[row][col] + '</td>';} } htmltable += '</tr>'; } htmltable += '</table>'; Logger.log(data); Logger.log(htmltable); MailApp.sendEmail(Session.getActiveUser().getEmail(), 'Your latest vocabulary','' ,{htmlBody: htmltable}) }
问题原因
getValues()仅返回单元格的显示文本,无法获取超链接等格式信息,导致生成的HTML表格没有链接标签。
解决方案
使用getRichTextValues()获取富文本内容,提取超链接并生成对应的HTML标签:
function sendMail() { var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Email"); // 改用getRichTextValues获取带格式的内容 var richTextData = sh.getRange("A:C").getRichTextValues(); var TABLEFORMAT = 'cellspacing="2" cellpadding="2" dir="ltr" border="1" style="width:100%;table-layout:fixed;font-size:10pt;font-family:arial,sans,sans-serif;border-collapse:collapse;border:1px solid #ccc;font-weight:normal;color:black;background-color:white;text-align:center;text-decoration:none;font-style:normal;"'; var htmltable = '<table ' + TABLEFORMAT + '>'; for (let row = 0; row < richTextData.length; row++) { htmltable += '<tr>'; for (let col = 0; col < richTextData[row].length; col++) { var cellRichText = richTextData[row][col]; var cellContent = ""; // 处理空值 if (cellRichText.getText() === "" || cellRichText.getText() == 0) { cellContent = "None"; } else { // 提取富文本中的超链接 var runs = cellRichText.getRuns(); for (let run of runs) { var url = run.getLinkUrl(); var text = run.getText(); if (url) { // 生成HTML链接标签 cellContent += `<a href="${url}" target="_blank">${text}</a>`; } else { cellContent += text; } } } // 处理表头和普通单元格 if (row === 0) { htmltable += `<th>${cellContent}</th>`; } else { htmltable += `<td>${cellContent}</td>`; } } htmltable += '</tr>'; } htmltable += '</table>'; MailApp.sendEmail(Session.getActiveUser().getEmail(), 'Your latest vocabulary', '', { htmlBody: htmltable }); }
关键改动说明
- 替换数据获取方法:用
getRichTextValues()替代getValues(),保留单元格的格式信息 - 超链接提取逻辑:遍历单元格的富文本片段(
getRuns()),检查每个片段是否有超链接,有则生成<a>标签 - 兼容原有逻辑:保留空值替换为"None"的处理,以及表头的
<th>标签逻辑
内容的提问来源于stack exchange,提问作者orschiro
相关产品推荐
相关产品推荐

