基于单元格日期触发邮件脚本异常:添加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
相关产品推荐
相关产品推荐

