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

求基于Google Sheets单元格输入自动发送邮件的脚本代码

Google Sheets自动发送任务通知邮件实现方案

前置准备

首先调整你的表格结构,无需为15位对接人单独写适配代码,统一通过配置表维护信息:

  1. 新建两个sheet页:
  • 事项跟踪表:存储任务信息,推荐列顺序:A=事项ID、B=事项内容、C=负责人、D=任务详情/更新记录、E=通知发送状态
  • 对接人配置表:存储所有对接人的姓名和对应邮箱,仅2列:A=姓名、B=邮箱,后续新增/修改对接人直接更新这个表即可,无需修改脚本

核心脚本实现

打开你的Google Sheets,点击顶部菜单栏「扩展程序」>「Apps Script」,删除编辑器中的默认代码,粘贴以下代码:

// 可根据你的实际表格列调整配置参数
const CONFIG = {
  TASK_SHEET_NAME: "事项跟踪表",
  CONFIG_SHEET_NAME: "对接人配置表",
  OWNER_COLUMN: 3, // 负责人所在列序号,C列对应3
  TASK_CONTENT_COLUMN: 2, // 任务内容所在列,B列对应2
  UPDATE_COLUMN: 4, // 任务更新/评论所在列,D列对应4
  STATUS_COLUMN: 5, // 通知状态所在列,E列对应5
  TASK_ID_COLUMN: 1 // 事项ID所在列,A列对应1
}

// 读取对接人姓名-邮箱映射
function getContactMap() {
  const configSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(CONFIG.CONFIG_SHEET_NAME);
  const configRows = configSheet.getDataRange().getValues();
  const contactMap = {};
  // 跳过表头从第二行开始读取
  for (let i = 1; i < configRows.length; i++) {
    const name = configRows[i][0].toString().trim();
    const email = configRows[i][1].toString().trim();
    if (name && email) contactMap[name] = email;
  }
  return contactMap;
}

// 编辑表格时自动触发的主逻辑
function autoSendNotification(e) {
  const editRange = e.range;
  const currentSheet = editRange.getSheet();
  // 仅响应事项跟踪表的编辑操作,跳过表头行
  if (currentSheet.getName() !== CONFIG.TASK_SHEET_NAME || editRange.getRow() === 1) return;
  
  const contactMap = getContactMap();
  const editRow = editRange.getRow();
  // 读取当前行基础信息
  const taskId = currentSheet.getRange(editRow, CONFIG.TASK_ID_COLUMN).getValue();
  const taskContent = currentSheet.getRange(editRow, CONFIG.TASK_CONTENT_COLUMN).getValue();
  const ownerName = currentSheet.getRange(editRow, CONFIG.OWNER_COLUMN).getValue()?.toString().trim();
  const ownerEmail = contactMap[ownerName];
  // 无对应负责人邮箱直接终止
  if (!ownerEmail) return;

  let mailTitle, mailContent;
  // 场景1:编辑负责人列,发送新任务分配通知
  if (editRange.getColumn() === CONFIG.OWNER_COLUMN) {
    mailTitle = `新任务分配:ID${taskId}`;
    mailContent = `你好,你被分配了新的待处理事项:
事项ID:${taskId}
事项内容:${taskContent}
请及时登录共享表格查看处理。`;
    MailApp.sendEmail(ownerEmail, mailTitle, mailContent);
    currentSheet.getRange(editRow, CONFIG.STATUS_COLUMN).setValue("已发送分配通知");
  } 
  // 场景2:编辑任务内容/评论列,发送跟进提醒
  else if (editRange.getColumn() === CONFIG.TASK_CONTENT_COLUMN || editRange.getColumn() === CONFIG.UPDATE_COLUMN) {
    const updateContent = e.value;
    mailTitle = `任务跟进提醒:ID${taskId}`;
    mailContent = `你好,你负责的事项有新更新:
事项ID:${taskId}
事项内容:${taskContent}
本次更新内容:${updateContent}
请及时登录共享表格跟进。`;
    MailApp.sendEmail(ownerEmail, mailTitle, mailContent);
    currentSheet.getRange(editRow, CONFIG.STATUS_COLUMN).setValue("已发送跟进提醒");
  }
}

自动触发配置

在Apps Script编辑器左侧菜单点击「触发器」>「添加触发器」,按以下参数配置:

  • 选择要运行的函数:autoSendNotification
  • 选择事件来源:电子表格
  • 选择事件类型:编辑时
    保存后按提示完成Google账户授权即可使用。

注意事项

  • 首次运行需要授权表格读取、邮件发送权限,按系统提示操作即可
  • 对接人信息全部在对接人配置表维护,增删改对接人无需调整代码
  • 邮件标题、正文内容可以直接在代码中修改,适配你的业务场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:36:05