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

Google Sheets脚本:按变量筛选数据生成HTML表格邮件

解决Google Sheets筛选今日日期数据并生成HTML邮件的方案

我来帮你搞定这个问题——你之前直接调整getRange报错,核心原因是getRange只能定位固定的单元格范围(比如A1:C10),而筛选后符合条件的行是动态分散的,没法直接用它来获取。正确的思路是先把表格数据读进内存,筛选出目标行,再把这些行转换成HTML表格嵌入邮件。

下面是完整的可运行代码和步骤说明:

1. 核心函数实现

第一步:获取归一化的今日日期

为了避免日期比较时的时分秒干扰,我们先把今日日期转换成只保留年月日的格式:

function getNormalizedToday() {
  const today = new Date();
  // 生成只包含年月日的Date对象,忽略时分秒
  return new Date(today.getFullYear(), today.getMonth(), today.getDate());
}

第二步:筛选符合条件的数据

读取工作表的所有数据,筛选出C列(数组索引为2,因为JS数组从0开始)等于今日日期的行:

function getFilteredRows() {
  // 替换成你的工作表名称
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("数据工作表");
  // 获取所有数据(包括表头)
  const allData = sheet.getDataRange().getValues();
  const today = getNormalizedToday();

  // 筛选逻辑:检查C列是否为日期,且与今日日期匹配
  const filteredRows = allData.filter(row => {
    const cellDate = row[2];
    // 跳过非日期的单元格
    if (!(cellDate instanceof Date)) return false;
    // 归一化单元格日期,只比较年月日
    const normalizedCellDate = new Date(cellDate.getFullYear(), cellDate.getMonth(), cellDate.getDate());
    return normalizedCellDate.getTime() === today.getTime();
  });

  return filteredRows;
}

第三步:将筛选后的数据转为HTML表格

把二维数组转换成带样式的HTML表格,同时处理日期格式的可读性:

function convertToHtmlTable(data) {
  // 如果没有符合条件的数据,返回提示文本
  if (data.length === 0) return "<p>今日没有符合条件的数据哦~</p>";

  let html = `<table border='1' cellpadding='6' cellspacing='0' style='border-collapse: collapse; width: 100%;'>`;
  // 添加表头行
  html += "<tr>";
  data[0].forEach(header => {
    html += `<th style='background-color: #f5f5f5; text-align: left;'>${header}</th>`;
  });
  html += "</tr>";

  // 添加数据行
  for (let i = 1; i < data.length; i++) {
    html += "<tr>";
    data[i].forEach(cell => {
      let cellContent = cell;
      // 如果是日期,转成YYYY-MM-DD的可读格式
      if (cell instanceof Date) {
        cellContent = Utilities.formatDate(cell, Session.getScriptTimeZone(), "yyyy-MM-dd");
      }
      html += `<td>${cellContent}</td>`;
    });
    html += "</tr>";
  }

  html += "</table>";
  return html;
}

第四步:发送邮件的主函数

整合所有功能,生成邮件内容并发送:

function sendFilteredDataEmail() {
  const filteredRows = getFilteredRows();
  const htmlTable = convertToHtmlTable(filteredRows);
  const todayStr = Utilities.formatDate(getNormalizedToday(), Session.getScriptTimeZone(), "yyyy-MM-dd");

  // 邮件配置
  const emailConfig = {
    to: "你的收件邮箱@example.com", // 替换成实际收件人
    subject: `${todayStr} 今日数据汇总`,
    htmlBody: `<p>您好,以下是今日的相关数据:</p>${htmlTable}`
  };

  // 发送邮件
  MailApp.sendEmail(emailConfig);
  Logger.log("邮件已成功发送!");
}

2. 关键注意事项

  • 日期比较的坑:Google Sheets中的单元格日期是Date对象,但可能包含时分秒,所以必须归一化后再比较,否则会出现“明明是同一天但筛选不出来”的问题。
  • 空行/非日期处理:在筛选时加入了!(cellDate instanceof Date)的判断,避免因C列存在非日期单元格导致脚本报错。
  • 样式自定义:你可以修改HTML表格的style属性,调整边框、背景色、间距等样式,让邮件更美观。

内容的提问来源于stack exchange,提问作者Evan Quinn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:31:15