求基于Google Sheets单元格输入自动发送邮件的脚本代码
Google Sheets自动发送任务通知邮件实现方案
前置准备
首先调整你的表格结构,无需为15位对接人单独写适配代码,统一通过配置表维护信息:
- 新建两个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
相关产品推荐
相关产品推荐

