You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script添加if条件筛选行生成指定HTML邮件表格

实现方案

你需要修改Google Apps Script代码,核心是拉取数据时包含校验列,再对行数据做过滤,具体修改如下:

原有代码问题说明

  1. 你之前仅拉取了A-H共8列数据,没有拿到存校验值的第9列(I列),无法判断每行是否符合条件
  2. 原有代码中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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 05:57:03