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

Google Apps Script:Google Sheets笔记本租赁系统邮件发送异常求助

解决Google Sheets笔记本租赁系统的邮件触发问题

问题根源分析

你的代码存在三个核心问题,直接导致了当前的邮件异常:

  1. 条件判断运算符用错:所有if(column = 10)这类写法是赋值操作,不是比较操作,应该用===(严格相等)判断列号。这会导致第一个if块强制把column设为10,后续的逾期复选框判断永远无法触发。
  2. 无邮件发送状态记录:没有标记用户是否已收到过批准邮件,因此每次勾选复选框都会重复发送。
  3. 逾期复选框取值范围错误:targetRange只取到第17列,但逾期复选框在第18列(索引17),导致checkboxValue2根本取不到正确的复选框值。

修正后的代码

function onCheckboxEdit(e) {
  var source = e.source;
  var sheet = source.getActiveSheet();
  var range = e.range;
  var row = range.getRow();
  var column = range.getColumn();
  console.log("column:: ", column);
  
  // 单独获取关键列的值,避免范围错误
  var recipient = sheet.getRange(row, 1).getValue();
  var student = sheet.getRange(row, 3).getValue();
  var approveCheckbox = sheet.getRange(row, 10).getValue();
  var overdueCheckbox = sheet.getRange(row, 18).getValue();
  // 新增第19列记录批准邮件发送状态
  var approveMailStatus = sheet.getRange(row, 19).getValue();

  var subject = "Laptop Loan Approved";
  var body = `Hello ${student}, \n\nWe are happy to confirm that your laptop loan application has been approved.`;
  var subject2 = "Laptop Loan";
  var body2 = `Hello ${student}, \n\nPlease disregard last e-mail sent by us, it was mistakenly sent.`;
  var subject3 = "Overdue Laptop Loan";
  var body3 = `Hello ${student}, \n\nThe laptop you have been loaned is due to be returned.`;

  // 批准复选框逻辑:先检查是否已发送过邮件
  if(column === 10) {
    if(approveCheckbox === true && approveMailStatus !== "已发送") {
      console.log("批准复选框勾选,发送批准邮件");
      MailApp.sendEmail(recipient, subject, body);
      // 标记邮件已发送
      sheet.getRange(row, 19).setValue("已发送");
    } else if(approveCheckbox === false) {
      console.log("批准复选框取消勾选,发送撤销邮件");
      MailApp.sendEmail(recipient, subject2, body2);
      // 清除发送标记
      sheet.getRange(row, 19).clearContent();
    }
  } 

  // 逾期复选框逻辑:修正运算符,确保能触发
  if(column === 18) {
    if(overdueCheckbox === true) {
      console.log("逾期复选框勾选,发送提醒邮件");
      MailApp.sendEmail(recipient, subject3, body3);
    } else if(overdueCheckbox === false) {
      console.log("逾期复选框取消勾选,发送撤销提醒邮件");
      MailApp.sendEmail(recipient, subject2, body2);
    }
  }
}

额外优化建议

  • 把记录邮件状态的第19列设置为隐藏,避免误操作;
  • 给触发器添加限制,只在目标工作表编辑时触发,防止其他工作表的操作干扰;
  • 增加错误捕获逻辑,比如收件人邮箱为空时跳过发送,避免执行报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:55:20