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

Google Sheet用户编辑时避免重复发邮件的Google Script求助

脚本修改方案及问题说明

原代码核心问题

  • 条件判断逻辑错误:原有判断仅在S3为false且等于历史值时才终止执行,只要S3为true就会直接触发邮件发送,没有校验状态变化
  • 属性存储方法调用错误:原有代码调用getProperty()传入两个参数试图存储状态,该方法仅支持读取属性,需要用setProperty()才能写入状态,导致历史值永远不会更新,每次编辑都会触发邮件
  • 代码块结构错误:else后未正确包裹业务逻辑,导致邮件发送逻辑不受判断条件控制,无论判断结果如何都会执行
  • 缺少状态变化校验:没有实现「仅当S3从false变为true时才发邮件」的核心逻辑,状态不变或者从true变回false时都不应该发邮件

修改后代码

function sendEmail(e) {
  var sp = PropertiesService.getScriptProperties();
  var errorTab = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Error');
  // 获取S3当前值,统一转布尔值避免类型判断异常
  var currentState = Boolean(errorTab.getRange('S3').getValue());
  // 读取历史状态,默认无错误为false
  var oldState = sp.getProperty('S3') === 'true';

  // 仅当错误状态从无到有(false→true)时才执行发信逻辑,其余情况直接返回
  if (!(currentState === true && oldState === false)) {
    sp.setProperty('S3', String(currentState));
    return;
  }

  // 组装邮件内容并发信
  var dataRef = "Kindly Check " +  errorTab.getRange('B3').getValue() +  errorTab.getRange('H3').getValue() + errorTab.getRange('N3').getValue();
  var option = {
    cc: "admin1@gmail.com",
  };
  GmailApp.sendEmail(
    "admin@gmail.com",
    "Dating Contracts Email Notification for Error Tab",
    dataRef,
    option
  );
  // 更新存储的最新状态
  sp.setProperty('S3', String(currentState));
}

后续配置说明

  • 触发器更新:如果之前使用的是简单onEdit触发器,没有Gmail发信权限,需要删除原有触发器,新增可安装的编辑触发器,绑定sendEmail函数
  • 权限授权:首次执行该脚本时需要按照提示完成权限授权,允许脚本访问表格和发送邮件

内容的提问来源于stack exchange,提问作者Mr. Explorer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:06:08