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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:32:21