如何通过Google Sheets发送包含多个表格的HTML邮件
Google Apps Script 多表格邮件发送修改方案
核心调整逻辑:
- 将原纯文本邮件改为HTML格式,适配多表格排版需求
- 改造数据获取函数支持复用,可一次性读取4个不同表格区域的数据
- 新增通用HTML表格生成方法,避免重复编写表格渲染代码
完整修改后代码
function sendEmail() { // 按需求配置4个数据源,对应字段:工作表名、数据范围、表格显示标题 const tableConfigs = [ {sheetName: "Data", range: "Stocks", title: "股票持仓数据"}, {sheetName: "Data", range: "Funds", title: "基金持仓数据"}, {sheetName: "Data", range: "Bonds", title: "债券持仓数据"}, {sheetName: "Data", range: "Cash", title: "现金持有数据"} ]; // 批量读取所有表格数据 const allTableData = tableConfigs.map(config => ({ title: config.title, data: getData(config.sheetName, config.range) })); // 生成HTML版邮件内容,同时保留纯文本版本兼容旧邮件客户端 const htmlBody = getEmailHtml(allTableData); const textBody = "请使用支持HTML渲染的邮件客户端查看本次内容"; MailApp.sendEmail({ to: "youremail@example.com", subject: "资产更新通知", body: textBody, htmlBody: htmlBody // 新增HTML内容参数 }); } /** * 通用HTML内容生成函数,自动拼接多个表格 * @param {Array} allTableData 所有表格的标题和对应数据 */ function getEmailHtml(allTableData) { // 基础样式兼容主流邮件客户端,可自行调整显示效果 let html = ` <html> <head> <style> table {border-collapse: collapse; margin: 20px 0; width: 80%;} th, td {border: 1px solid #ddd; padding: 8px; text-align: left;} th {background-color: #f2f2f2;} .table-title {font-weight: bold; font-size: 16px; margin-top: 30px;} </style> </head> <body> <p>您好,本次资产更新内容如下:</p> `; // 循环渲染每个表格 allTableData.forEach(table => { html += `<div class="table-title">${table.title}</div>`; // 表头可根据实际业务字段修改 html += `<table><tr><th>名称</th><th>代码</th><th>价格</th></tr>`; table.data.forEach(item => { // 字段映射可根据实际表格列数调整 html += `<tr><td>${item.name}</td><td>${item.ticker}</td><td>${item.price}</td></tr>`; }); html += `</table>`; }); html += ` </body> </html> `; return html; } /** * 改造后通用数据获取函数,支持传入表名和范围读取数据 * @param {string} sheetName 工作表名称 * @param {string} rangeName 数据区域名称 * @OnlyCurrentDoc */ function getData(sheetName, rangeName) { const values = SpreadsheetApp.getActive().getSheetByName(sheetName).getRange(rangeName).getValues(); values.shift(); // 移除原表格的表头行 const items = []; values.forEach(value => { const item = {}; // 字段映射可根据每个表格的实际列结构修改 item.name = value[0]; item.ticker = value[1]; item.price = value[2]; items.push(item); }); return items; }
配置说明
- 先修改
tableConfigs配置项,把4个表格对应的工作表名、数据范围、显示标题替换为实际业务内容 - 如果不同表格的字段结构不同,可单独调整对应表格的字段映射逻辑,也可以在
tableConfigs中新增字段配置项适配 - 代码内的CSS样式可自行调整,修改表格的颜色、宽度、边框等显示效果
内容的提问来源于stack exchange,提问作者Pankaj Pandey
相关产品推荐
相关产品推荐

