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

修改Google Sheets onEdit触发器脚本:匹配指定学生名单触发邮件

解决方案

修改思路

  1. 监听第一列(姓名列)的编辑操作,替代原脚本对第六列的监听逻辑
  2. 从独立名单工作表读取目标学生姓名,存入集合提升匹配效率
  3. 当编辑的姓名存在于名单集合中时,触发邮件通知
  4. 合并重复的邮件发送逻辑,简化代码结构

完整修改后的脚本

function emailonEdit(e) {
  // 指定需要监听的首个工作表,替换为你的工作表实际名称
  const targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("首个工作表");
  if (!targetSheet || e.range.getSheet() !== targetSheet) return;

  // 事件核心变量
  const row = e.range.getRow();
  const col = e.range.getColumn();
  const editedName = e.value;

  // 仅处理第一列(姓名列)的编辑,跳过表头行(假设第1行为表头)
  if (col !== 1 || row === 1) return;

  // 读取独立名单工作表的姓名数据
  const nameListSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("名单表"); // 替换为你的名单工作表名称
  const nameValues = nameListSheet.getDataRange().getValues().flat();
  const nameSet = new Set(nameValues); // 转集合实现快速匹配

  // 姓名匹配时发送邮件
  if (nameSet.has(editedName)) {
    const cellLocation = e.range.getA1Notation();
    const sheetUrl = "替换为你的Google Sheets链接";

    // 批量设置收件人,避免重复代码
    const recipients = [
      'fayj@bathwildcats.org',
      'jimfay55@icloud.com',
      'NavianceStudent2022@gmail.com'
    ];

    MailApp.sendEmail({
      to: recipients.join(','),
      subject: `${editedName} 触发邮件通知`,
      body: `学生${editedName}的信息已更新,查看位置:${sheetUrl}&range=${cellLocation}`
    });
  }
}

关键说明

  • 工作表名称替换:请将代码中"首个工作表"和"名单表"替换为你实际的工作表名称
  • 名单表格式:名单表只需在任意一列存放目标学生姓名即可,无需额外格式设置
  • 效率优化:使用Set存储名单,相比数组遍历,姓名匹配的效率大幅提升
  • 代码简化:将多次重复的邮件发送逻辑合并为一次调用,同时支持多个收件人
  • 表头排除:默认第1行为表头,编辑表头不会触发邮件,若你的表头行不同,可修改row === 1的判断条件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 02:03:58