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

基于单元格日期触发邮件脚本异常:添加If语句后无邮件发送

问题解决:Google Apps Script 日期匹配触发邮件失败

核心问题分析

添加If语句后无邮件触发,大概率是日期对象的时间部分不匹配导致的:

  • Google Sheets中单元格的日期默认是当日00:00:00的Date对象
  • new Date()生成的是包含当前时分秒的Date对象
  • 直接用===或==比较时,时间部分不同会判定为不相等,即使年月日一致

修正后的脚本示例

function sendExpiryReminders() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues();
  // 处理当日日期,移除时分秒,统一为00:00:00
  const today = new Date();
  today.setHours(0, 0, 0, 0);

  // 从第2行开始遍历(跳过表头)
  for (let i = 1; i < data.length; i++) {
    const row = data[i];
    const recipient = row[1]; // 假设B列是收件人邮箱(索引1)
    const expiryDate = new Date(row[2]); // C列是到期日期(索引2)
    // 处理到期日期的时间部分
    expiryDate.setHours(0, 0, 0, 0);

    // 比较处理后的日期时间戳
    if (expiryDate.getTime() === today.getTime()) {
      const subject = "工程资质到期提醒";
      const body = `您好,您的工程资质将于今日(${Utilities.formatDate(today, Session.getScriptTimeZone(), "yyyy-MM-dd")})到期,请及时处理。`;
      MailApp.sendEmail(recipient, subject, body);
    }
  }
}

关键修正点

  • 对today和expiryDate都调用setHours(0,0,0,0),移除时间部分干扰
  • 用getTime()比较时间戳,比直接比较Date对象更可靠
  • 确认列索引:B列收件人对应索引1,C列到期日期对应索引2,匹配需求
  • 遍历从第2行开始(i=1),跳过表头行

额外检查项

  • 确认表格中C列的单元格格式是日期格式,而非文本格式
  • 测试时可手动设置一行C列日期为当日,运行脚本后查看执行日志(脚本编辑器→查看→执行日志),排查是否有报错

内容的提问来源于stack exchange,提问作者Dominic Paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:55:50