如何在Google Apps Script中通过单封邮件发送批量列表并渲染为表格
解决方案
核心逻辑优化
你之前的问题根源是单独拆分读取各列数据,遍历单列时无法同步获取同索引的其他列对应值。改为一次性读取目标范围的所有行列数据,利用二维数组行内元素天然对应的特性,即可实现字段对齐。
修正后完整代码片段
var partReceivedQuerySheet = uyg.getSheetByName("Part Received Query"); var partReceivedQuerySheetLastRow = partReceivedQuerySheet.getLastRow(); // 一次性读取A2到D列最后一行的所有数据,每行对应[供应商名称, 产品名称, 数量, 是否入库] var allProductData = partReceivedQuerySheet.getRange("A2:D" + partReceivedQuerySheetLastRow).getValues(); // 拼接表格头部 var productInfoTable = '<table border="2"><tr><th><b>Brand</b></th>'; productInfoTable += '<th><b>Product Name</b></th>'; productInfoTable += '<th><b>Quantity</b></th>'; productInfoTable += '<th><b>Arrived to Warehouse?</b></th></tr>'; // 遍历所有行数据,每行直接填充对应的四个字段 allProductData.forEach(row => { // 跳过空行(可选) if(!row[0]) return; productInfoTable += '<tr>'; productInfoTable += `<td>${row[0]}</td>`; // 对应A列供应商 productInfoTable += `<td>${row[1]}</td>`; // 对应B列产品名 productInfoTable += `<td>${row[2]}</td>`; // 对应C列数量 productInfoTable += `<td>${row[3]}</td>`; // 对应D列是否入库 productInfoTable += '</tr>'; }); productInfoTable += '</table>'; // 发送邮件:必须放在循环外,只会发送1次 MailApp.sendEmail({ to: "客户邮箱地址", subject: "到货产品通知", htmlBody: `<p>您好,以下是已抵达办公室的产品清单:</p>${productInfoTable}` });
注意事项
- 如果你表格里的到货状态列不是D列,可自行调整
getRange的列范围,以及row后的索引值(索引从0开始对应第一列A) - 不要将
MailApp.sendEmail方法放入遍历循环内,即可避免重复发信的问题
内容的提问来源于stack exchange,提问作者Sirin
相关产品推荐
相关产品推荐

