Google Sheets保单到期提醒脚本单表生效、空值误发、无邮件问题
Google Sheets保单到期自动提醒脚本修复方案
原代码问题对应修复逻辑
- 针对仅读取单个工作表的问题:将原代码
SpreadsheetApp.getActiveSheet()替换为读取全量子表的逻辑,遍历表格下所有工作表的保单数据,不会遗漏不同分表的记录 - 针对空白单元格误触发的问题:增加行数据有效性校验,直接跳过到期日期为空、日期格式非法、收件邮箱为空的无效行,避免空值参与逻辑判断
- 针对测试数据不触发邮件的问题:对参与比对的日期做归一化处理,统一把时分秒重置为0点,避免日期带的时分秒差值导致判断失效;同时增加类型校验,确保只有合法日期格式的单元格才会进入比对逻辑,不会出现静默跳过无日志的问题
修复后可直接使用的完整代码
function alertSender() { // 归一化当日时间到0点,消除时分秒对日期比对的干扰 const today = new Date(); today.setHours(0, 0, 0, 0); // 获取当前表格下所有工作表,而非仅当前激活的单个工作表 const allSheets = SpreadsheetApp.getActiveSpreadsheet().getSheets(); // 逐表遍历保单数据 allSheets.forEach(sheet => { const dataRows = sheet.getDataRange().getValues(); // 从第2行开始遍历,跳过表头行 for (let rowIndex = 1; rowIndex < dataRows.length; rowIndex++) { const currentRow = dataRows[rowIndex]; const expireDateVal = currentRow[5]; // F列存储到期日期,对应数组索引5 const emailAddr = currentRow[6]; // G列存储收件邮箱,对应数组索引6 const holderName = currentRow[0]; // A列存储投保人信息 // 跳过无效行:空日期、非日期格式值、空邮箱 if (!expireDateVal || !(expireDateVal instanceof Date) || !emailAddr) { continue; } // 归一化到期日期到0点,和当日时间做统一维度比对 const targetExpireDate = new Date(expireDateVal); targetExpireDate.setHours(0, 0, 0, 0); // 当日到期判定:如果需要同时提醒已逾期保单,将 === 改为 <= 即可 if (targetExpireDate.getTime() === today.getTime()) { const subject = '保单到期自动提醒'; const content = `投保人 ${holderName} 的保单今日到期,请及时跟进处理。`; MailApp.sendEmail(emailAddr, subject, content); Logger.log(`提醒邮件已发送至${emailAddr},对应投保人:${holderName}`); } } }) }
使用注意事项
- 首次运行脚本时会弹出权限申请窗口,需要授权脚本读取表格内容、发送邮件的权限,授权完成后功能才可正常使用
- 如需实现每日自动推送提醒,可在Apps Script编辑器左侧的触发器菜单中,为
alertSender函数设置每日固定时间触发的定时任务 - 若需要对已过期的保单也发送提醒,只需修改代码中日期判断的条件即可,代码注释里已经标注了修改位置
内容的提问来源于stack exchange,提问作者Mazzaff
相关产品推荐
相关产品推荐

