如何在Google Sheets中通过勾选复选框审批条目并触发审批邮件
实现方案:Google Sheets复选框勾选自动触发审批流程
步骤1:前置配置(添加复选框列)
- 打开你的
payments工作表,新增一列(比如Q列,也就是第17列,列名可设为「审批勾选」) - 选中所有待审批行对应Q列的单元格,点击菜单栏「数据 → 数据验证」,条件选择「复选框」,点击保存即可完成复选框添加
步骤2:替换原有代码
直接将原来的代码替换为以下内容,可按需修改常量配置里的参数:
// 常量配置,可根据实际情况修改 const SPREADSHEET_ID = "xxxx"; // 替换为你的电子表格ID const SHEET_NAME = "payments"; const CHECKBOX_COLUMN = 17; // 复选框所在列,Q列对应17,可自行调整 const APPROVE_STATUS_COLUMN = 16; // 审批状态列,对应原逻辑里的第16列P列 const NOTIFY_EMAIL = "finance@xxxx.xxx"; // 替换为实际收件邮箱 // 复选框编辑触发函数,后续需要配置可安装触发器 function onApproveCheckboxEdit(e) { // 校验编辑范围是否为审批复选框列 const range = e.range; const sheet = range.getSheet(); if (sheet.getName() !== SHEET_NAME || range.columnStart !== CHECKBOX_COLUMN) return; // 校验是否为勾选操作、且对应条目未审批(避免重复触发发邮件) const isChecked = e.value === "TRUE"; const currentStatus = sheet.getRange(range.rowStart, APPROVE_STATUS_COLUMN).getValue(); if (!isChecked || currentStatus === "Approved") return; // 执行审批逻辑 handleApproval(range.rowStart, sheet); } // 审批执行逻辑 function handleApproval(rowIndex, sheet) { // 直接读取当前行对应字段值,不需要遍历找S.No const invitem = sheet.getRange(rowIndex, 5).getValue(); const invdesc = sheet.getRange(rowIndex, 6).getValue(); const reqby = sheet.getRange(rowIndex, 3).getValue(); const amount = sheet.getRange(rowIndex, 8).getValue(); // 发送审批通知邮件,已修正原代码里金额字段标签写错的问题 const subject = '付款释放申请已审批通过'; const body = `<p>您好</p> <p>该笔付款释放申请已从我这边审批通过</p> <p>发票项目: ${invitem}</p> <p>描述: ${invdesc}</p> <p>申请人: ${reqby} </p> <p>申请金额: ${amount} </p> <p> </p> <p><em>这是审批后自动触发的通知邮件</em></p>`; GmailApp.sendEmail(NOTIFY_EMAIL, subject, "需要HTML支持查看", { htmlBody: body }); // 更新审批状态和单元格样式 sheet.getRange(rowIndex, APPROVE_STATUS_COLUMN).setValue("Approved").setBackground('#008000'); }
步骤3:配置可安装触发器
由于发送邮件需要权限,简单编辑触发器无法满足要求,需要手动配置可安装触发器:
- 打开Apps Script编辑器:点击表格菜单栏「扩展程序 → Apps Script」
- 点击左侧菜单「触发器」→ 右下角「添加触发器」
- 选择要运行的函数:
onApproveCheckboxEdit - 选择事件源:
电子表格 - 选择事件类型:
编辑时 - 点击保存,按照提示完成权限授权即可使用
内容的提问来源于stack exchange,提问作者Bala Murali
相关产品推荐
相关产品推荐

