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

为什么Google Sheets条件未满足时,Google Apps Script仍会发送邮件?

问题排查点

  • 范围取值方法错误:使用getRange("J2:J")获取J列多单元格范围后调用getValue(),只能获取该范围左上角首个单元格(即J2)的值,无法统计整列超期商品数量。如果J2本身是你预先用公式统计好的超期商品总数,可忽略此问题。
  • 判断条件逻辑错误:现有判断规则为if (NumberofAgingProduct<0)时终止程序,只要数值≥0就会进入发邮件流程,完全不符合预期,是误发的核心原因,通常该判断应该调整为超期商品数≤0时终止程序。
  • 邮件循环逻辑错误:遍历邮箱列表时遇到空值直接调用return终止整个程序,会导致空值后的有效邮箱无法收到邮件,应该用continue跳过当前空值,或是提前过滤所有无效空邮箱。
  • 范围冗余问题:getRange("J2:J")、getRange("A2:A")会读取整列所有行包含大量无意义空行,增加不必要的性能损耗。

修正后代码

function CheckAgingProduct() {
  // 读取超期报表J列(仅读取到有内容的最后一行,过滤空行)
  const agingSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("AGING REPORT");
  const agingValues = agingSheet.getRange("J2:J" + agingSheet.getLastRow()).getValues();
  // 统计超120天的商品数,可根据实际业务调整判断规则
  let NumberofAgingProduct = 0;
  agingValues.forEach(row => {
    if(Number(row[0]) >= 120) {
      NumberofAgingProduct++;
    }
  })

  // 无超期商品直接终止程序
  if (NumberofAgingProduct <= 0){
    return 
  } 

  // 读取有效邮箱列表,过滤空值
  const emailSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("EMAIL LIST");
  const emailValues = emailSheet.getRange("A2:A" + emailSheet.getLastRow()).getValues();
  const validEmails = emailValues.flat().filter(email => email && email.toString().trim() !== '');

  // 批量发送邮件
  const message = "存在超过120天的临期商品!";
  const subject = '临期商品提醒';
  validEmails.forEach(email => {
    MailApp.sendEmail(email, subject, message);
    Logger.log('已发送邮件至:' + email);
  })
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 15:24:03