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

Google Apps Script简单On Edit触发器失效:单元格达标无法触发通知

问题原因及解决方案

核心问题:简单触发器的权限限制

你设置的On Edit是简单触发器,这类触发器有严格的权限限制——它在匿名上下文下运行,没有调用需要授权服务的权限。而你的脚本里用到了MailApp.sendEmail(),这个操作需要发送邮件的授权,所以简单触发器会静默执行失败,且不会在执行历史中留下记录,这就是触发器没生效的根本原因。

另外,虽然编辑B2-B251时会触发简单触发器,但权限问题导致后续逻辑完全无法执行,所以你看不到任何执行痕迹。

解决方案:改用可安装更改触发器

简单触发器无法满足需求,你需要创建可安装的「编辑时」触发器,步骤如下:

  1. 打开Google表格的脚本编辑器,点击左侧工具栏的「触发器」图标(闹钟样式)。
  2. 点击「添加触发器」,按以下配置设置:
    • 选择要运行的函数:sendEmail
    • 选择部署类型:「从电子表格」
    • 选择事件源:「编辑时」
    • 其余选项保持默认,点击保存。
  3. 保存时会弹出授权提示,按照指引完成账号授权即可。

脚本优化建议(可选)

为了避免每次编辑表格都触发脚本检查,你可以利用触发器的事件对象e,只在编辑B2-B251范围时才执行逻辑,减少不必要的资源消耗:

function sendEmail(e) {
  // 仅处理FormResponses工作表中B2-B251的编辑操作
  const editedSheet = e.range.getSheet();
  if (editedSheet.getName() !== "FormResponses" ||
      e.range.getColumn() !== 2 ||
      e.range.getRow() < 2 || e.range.getRow() > 251) {
    return;
  }

  const value = editedSheet.getRange("B252").getValue();
  if (value >= 250) {
    const emailAddress = "my_email_address";
    const subject = "求和值达标通知";
    const message = "B252单元格的求和值已达到250及以上";
    
    MailApp.sendEmail(emailAddress, subject, message);
    editedSheet.getRange("B253").setValue("NOTIFICATION SENT");
  }
}

内容的提问来源于stack exchange,提问作者André Vidal Soares

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:10:12