Google Apps Script添加if条件筛选行生成指定HTML邮件表格
实现方案
你需要修改Google Apps Script代码,核心是拉取数据时包含校验列,再对行数据做过滤,具体修改如下:
原有代码问题说明
- 你之前仅拉取了A-H共8列数据,没有拿到存校验值的第9列(I列),无法判断每行是否符合条件
- 原有代码中
if (checksum == 2);后面跟了分号,无任何实际执行逻辑,且你读取的checksum是表头行的第9列值,不是每行的校验值
修改后完整Apps Script代码
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var ws = ss.getSheetByName('2021')// 可根据你的实际文件名修改工作表名 var headers = ws.getRange('A1:H1').getDisplayValues()// 获取表头字段 // 给每个表头字段赋值 var name = headers[0][0]; var leavetype = headers[0][1]; var fromDate = headers[0][2]; var toDate = headers[0][3]; var totaldays = headers[0][4]; var status = headers[0][5]; var reportingmanager = headers[0][6]; // 调整拉取范围,多取1列包含校验值列,共9列 var rawTableData = ws.getRange(2,1,10,9).getDisplayValues() // 过滤仅保留校验值为1的行,同时删除最后一列校验值,无需传给模板 var tablerangeValue = rawTableData.filter(row => row[8] == '1').map(row => row.slice(0,7)); var htmlTemplate = HtmlService.createTemplateFromFile('emailTable'); htmlTemplate.name = name; htmlTemplate.leavetype = leavetype; htmlTemplate.fromDate = fromDate; htmlTemplate.toDate = toDate; htmlTemplate.totaldays = totaldays; htmlTemplate.status = status; htmlTemplate.reportingmanager = reportingmanager; htmlTemplate.tablerangeValue = tablerangeValue; var htmlForEmail = htmlTemplate.evaluate().getContent(); var toEmail = 'jonathon.banks@westal.com.au'; var ccEmail = 'jbjono4@gmail.com'; MailApp.sendEmail({ to: toEmail, cc: ccEmail, subject: "Flyscreens Overdue", htmlBody:htmlForEmail }); }
其他说明
你的HTML模板不需要做任何修改,即可正常使用过滤后的行数据生成表格。
如果你的数据行数是动态变化的,可以把拉取范围里的固定行数10替换为ws.getLastRow() - 1,自动适配实际数据行数。
内容的提问来源于stack exchange,提问作者banksie
相关产品推荐
相关产品推荐

