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

如何通过Google Apps Script实现邮件中Approve/Reject审批超链接功能?

嘿,我来帮你搞定这个审批按钮的问题!用Google Apps Script完全能实现这个需求,下面是一步步的实操方案,贴合你的场景:

整体思路

核心是把「Approve/Reject」按钮做成带参数的Web App链接,经理点击后触发脚本:更新Google Sheet里的审批状态,再自动给下一层审批节点发邮件通知。

1. 先整理你的Google Sheet结构

假设你已经有Form提交的详情列(比如提交时间、提交人信息等),建议在Sheet末尾加两列:审批状态(待审批/已批准/已拒绝)和审批人,用来记录审批结果和操作人。

2. 写个生成专属审批链接的函数

我们需要给每一条新提交生成唯一的批准/拒绝链接,链接里要带上这条记录的行号(或者你可以用唯一ID,更稳妥)和审批动作类型。

function generateApprovalLinks(rowNum) {
  // 后面部署Web App后,把这里替换成实际的Web App URL
  const webAppUrl = "https://script.google.com/macros/s/你的WebApp部署ID/exec";
  
  // 生成带参数的链接:行号+审批动作
  const approveLink = `${webAppUrl}?row=${rowNum}&action=approve`;
  const rejectLink = `${webAppUrl}?row=${rowNum}&action=reject`;
  
  return {
    approve: approveLink,
    reject: rejectLink
  };
}

3. 修改Form提交触发的邮件脚本

你已经能提取提交详情,现在把生成的审批链接做成邮件里的按钮(用HTML邮件更美观),发给经理:

function onFormSubmit(e) {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const rowNum = sheet.getLastRow(); // 刚提交的那条记录的行号
  
  // 提取提交详情(根据你的Sheet列调整,这里是示例)
  const timestamp = e.values[0];
  const submitterName = e.values[1];
  // 其他提交字段...比如提交内容、附件链接等,按需添加
  
  // 生成审批按钮链接
  const links = generateApprovalLinks(rowNum);
  
  // 经理的邮箱地址
  const managerEmail = "manager@yourcompany.com";
  
  // 构造HTML邮件,把链接做成按钮样式
  const htmlBody = `
    <p>嗨,有新的提交需要你审批:</p>
    <ul>
      <li>提交时间:${timestamp}</li>
      <li>提交人:${submitterName}</li>
      <!-- 这里加其他提交详情字段 -->
    </ul>
    <p>点击下方按钮完成审批:</p>
    <a href="${links.approve}" style="padding: 8px 16px; background: #4CAF50; color: white; text-decoration: none; border-radius: 4px;">Approve</a>
    <a href="${links.reject}" style="margin-left: 10px; padding: 8px 16px; background: #f44336; color: white; text-decoration: none; border-radius: 4px;">Reject</a>
  `;
  
  // 发送邮件给经理
  MailApp.sendEmail({
    to: managerEmail,
    subject: "新提交审批请求",
    htmlBody: htmlBody
  });
}

4. 写处理审批请求的核心函数

当经理点击链接时,Web App会触发这个函数,它要做三件事:解析链接参数、更新Sheet、给下一层审批人发邮件:

function doGet(e) {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const rowNum = parseInt(e.parameter.row);
  const action = e.parameter.action;
  
  // 检查参数是否合法
  if (!rowNum || !action) {
    return ContentService.createTextOutput("参数错误,请检查链接是否正确").setMimeType(ContentService.MimeType.TEXT);
  }
  
  // 更新Sheet里的审批状态和审批人
  const approvalStatus = action === "approve" ? "已批准" : "已拒绝";
  const approver = Session.getActiveUser().getEmail(); // 获取点击链接的用户邮箱(需要权限)
  
  // 假设倒数第二列是「审批状态」,最后一列是「审批人」,根据你的Sheet调整列号
  sheet.getRange(rowNum, sheet.getLastColumn()-1).setValue(approvalStatus);
  sheet.getRange(rowNum, sheet.getLastColumn()).setValue(approver);
  
  // 提取提交详情,用来给下一层审批人发通知
  const submitDetails = sheet.getRange(rowNum, 1, 1, sheet.getLastColumn()-2).getValues()[0];
  const timestamp = submitDetails[0];
  const submitterName = submitDetails[1];
  
  // 下一层审批人的邮箱
  const nextApproverEmail = "next-approver@yourcompany.com";
  
  // 构造给下一层的通知邮件
  const nextHtmlBody = `
    <p>您好,以下提交已完成一级审批:</p>
    <ul>
      <li>提交时间:${timestamp}</li>
      <li>提交人:${submitterName}</li>
      <li>审批结果:${approvalStatus}</li>
      <li>审批人:${approver}</li>
    </ul>
    <!-- 如果需要二级审批,这里可以继续生成类似的审批按钮链接,重复前面的逻辑 -->
  `;
  
  // 发送通知邮件
  MailApp.sendEmail({
    to: nextApproverEmail,
    subject: `提交审批结果:${approvalStatus}`,
    htmlBody: nextHtmlBody
  });
  
  // 返回给经理的审批成功提示页面
  return ContentService.createHtmlOutput(`
    <h3>审批成功!</h3>
    <p>你已将该提交标记为${approvalStatus},通知邮件已发送给下一层审批节点。</p>
  `).setMimeType(ContentService.MimeType.HTML);
}

5. 部署成Web App(关键步骤!)

这步没做好,链接点了也没用:

  1. 打开Google Apps Script编辑器,点击右上角「部署」→「新部署」
  2. 类型选「Web应用」
  3. 执行权限选「任何人,甚至匿名」(如果要限制只有公司内部人员能访问,选「仅限组织内用户」,但匿名模式更方便测试)
  4. 点击「部署」,复制生成的Web App URL,替换到generateApprovalLinks函数里的webAppUrl
  5. 第一次部署会提示授权,跟着步骤完成就行(要允许脚本访问你的Sheet和邮件)

6. 设置Form提交触发器

让脚本自动在Form提交时运行:

  1. 在脚本编辑器左侧点「触发器」图标
  2. 添加触发器:选择onFormSubmit函数,事件源选「电子表格」,事件类型选「表单提交」
  3. 保存触发器,这样每次有人提交Form,就会自动给经理发审批邮件
一些小提示
  • 权限问题:确保脚本有MailApp发送邮件和SpreadsheetApp读写Sheet的权限,第一次运行会提示授权
  • 安全验证:如果不想随便有人点链接,可以在doGet函数里加判断,比如检查当前用户邮箱是否是经理的邮箱,防止无关人员操作
  • 用唯一ID代替行号:如果Sheet里会插入/删除行,行号可能变,建议给每条提交生成一个UUID作为唯一标识,存在Sheet里,链接里传这个ID更稳妥

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:08:01