Google Sheets特定单元格值变更时触发自动邮件设置需求
解决方案:Google表格状态变更时自动发送邮件通知
我来帮你搞定这个需求——用Google Apps Script就能实现当D列(Status)的值变更时,自动给对应B列邮箱发送指定内容邮件的功能,具体步骤如下:
步骤1:打开脚本编辑器
- 打开你的目标Google表格,点击顶部菜单栏的「扩展程序」→「Apps Script」,进入脚本编辑界面。
步骤2:编写触发脚本
把下面的代码复制到编辑器里,然后根据你的实际需求修改邮件主题、内容和指定发件人:
function onStatusChange(e) { // 获取编辑事件的核心信息 const editedRange = e.range; const targetSheet = editedRange.getSheet(); // 仅处理D列(第4列)的非表头行编辑 if (editedRange.getColumn() !== 4 || editedRange.getRow() === 1) return; // 获取当前行的关键数据:姓名、邮箱、新状态 const userName = targetSheet.getRange(editedRange.getRow(), 1).getValue(); const userEmail = targetSheet.getRange(editedRange.getRow(), 2).getValue(); const newStatus = editedRange.getValue(); // 仅在状态从空变为指定选项(A/B/C)时触发邮件,避免重复发送 if (!newStatus || !['A', 'B', 'C'].includes(newStatus)) return; // 自定义邮件配置,按需修改 const senderEmail = 'your-designated-sender@example.com'; // 必须是当前账号的别名或G Suite授权账号 const emailSubject = `状态更新通知:${userName}的状态已变更`; const emailBody = ` 您好, ${userName}的状态已更新为:${newStatus} 请知悉。 `; try { // 发送邮件,指定发件人 MailApp.sendEmail({ to: userEmail, from: senderEmail, subject: emailSubject, body: emailBody }); // 可选:在E列添加发送状态标记,方便追踪 targetSheet.getRange(editedRange.getRow(), 5).setValue('✅ 邮件已发送'); } catch (error) { console.error('邮件发送失败:', error); targetSheet.getRange(editedRange.getRow(), 5).setValue('❌ 邮件发送失败'); } }
步骤3:配置可安装触发器(关键)
默认的简单onEdit触发器有权限限制,无法使用from参数指定发件人,所以需要设置可安装的编辑触发器:
- 在脚本编辑器左侧,点击时钟样式的「触发器」图标。
- 点击「添加触发器」,按以下配置设置:
- 选择要运行的函数:
onStatusChange - 部署类型:「受限制」(仅你能访问)
- 事件源:「电子表格」
- 事件类型:「编辑时」
- 选择要运行的函数:
- 点击保存,按照提示完成授权即可。
关键细节说明
- 指定发件人限制:
from参数的邮箱必须是当前Google账号的别名,或者你拥有权限的G Suite账号邮箱,否则会触发权限错误。如果不需要指定发件人,直接删除from: senderEmail,这一行即可,默认用当前账号发送。 - 重复发送防护:代码里加入了状态判断,只有当状态从空变为A/B/C时才发送邮件,避免同一状态重复编辑时多次发件。
- 错误追踪:通过try-catch块捕获发送错误,并在表格E列标记状态,方便你快速排查问题。
注意事项
- 确保B列的邮箱格式正确,否则邮件会发送失败。
- Google Apps Script有邮件发送限额:普通个人账号每天最多发送100封,G Suite/Workspace账号限额更高,超出限额会暂时无法发送。
- 第一次授权时如果出现“此应用未验证”提示,点击「高级」→「转到XX脚本(不安全)」即可完成授权(这是Google对自定义脚本的常规提示,你的脚本是自己控制的,安全没问题)。
内容的提问来源于stack exchange,提问作者Vector JX
相关产品推荐
相关产品推荐

