如何用GAS将Google Sheets数据导出为JPEG/PNG并作为Gmail内嵌图片
解决方案:将指定范围的表格数据转为内嵌图片发送Gmail
要实现将电子表格指定范围导出为PNG/JPEG并内嵌到Gmail正文,无法直接通过getAs(MimeType.PNG)实现(该方法仅支持PDF、CSV等有限格式),需借助Google Sheets的导出API来生成图片,再转为Base64内嵌到HTML邮件中。以下是完整代码及说明:
完整代码
function sendReportWithInlineImage() { // 1. 获取目标表格及数据范围 var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); // 计算需要捕获的行数:取前10行或所有数据行(取较小值) var lastDataRow = sheet.getLastRow(); var targetRowCount = Math.min(lastDataRow, 10); var targetRange = sheet.getRange(1, 1, targetRowCount, sheet.getLastColumn()); // 2. 构造表格范围的PNG导出链接 var token = ScriptApp.getOAuthToken(); var exportUrl = `https://docs.google.com/spreadsheets/d/${ss.getId()}/export?format=png&gid=${sheet.getSheetId()}&range=${targetRange.getA1Notation()}`; // 3. 获取图片Blob var response = UrlFetchApp.fetch(exportUrl, { headers: { 'Authorization': `Bearer ${token}` } }); var imageBlob = response.getBlob(); // 4. 将图片转为Base64格式用于内嵌 var base64Image = Utilities.base64Encode(imageBlob.getBytes()); var imageSrc = `data:image/png;base64,${base64Image}`; // 5. 构造带内嵌图片的HTML邮件正文 var htmlBody = ` <p>This is just a trial. Ignore.</p> <p>以下是表格数据预览:</p> <img src="${imageSrc}" alt="表格数据截图" style="max-width: 100%;"> `; // 6. 发送邮件 var message = { to: "trial@gmail.com", subject: "Random Subject Line", htmlBody: htmlBody, // 纯文本备用内容(针对不支持HTML的邮件客户端) body: "This is just a trial. Ignore. 请使用支持HTML的邮件客户端查看内嵌的表格图片。", name: "Name" }; MailApp.sendEmail(message); }
关键说明
- 范围控制:通过
getLastRow()获取表格最后一行数据,再用Math.min(lastDataRow, 10)确保只捕获前10行或所有已填充数据行。 - 导出API使用:利用Google Sheets官方导出接口生成指定范围的PNG,需携带OAuth令牌(
ScriptApp.getOAuthToken())确保访问权限。 - 内嵌图片实现:将图片Blob转为Base64编码,通过
data:image/png;base64,xxx的格式直接嵌入HTML正文,无需作为附件发送。 - 格式切换:若需导出JPEG,只需将
exportUrl中的format=png改为format=jpeg,同时修改imageSrc中的image/png为image/jpeg即可。
内容的提问来源于stack exchange,提问作者Gitz
相关产品推荐
相关产品推荐

