为什么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
相关产品推荐
相关产品推荐

