Google Apps Script:Google Sheets笔记本租赁系统邮件发送异常求助
解决Google Sheets笔记本租赁系统的邮件触发问题
问题根源分析
你的代码存在三个核心问题,直接导致了当前的邮件异常:
- 条件判断运算符用错:所有
if(column = 10)这类写法是赋值操作,不是比较操作,应该用===(严格相等)判断列号。这会导致第一个if块强制把column设为10,后续的逾期复选框判断永远无法触发。 - 无邮件发送状态记录:没有标记用户是否已收到过批准邮件,因此每次勾选复选框都会重复发送。
- 逾期复选框取值范围错误:
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
相关产品推荐
相关产品推荐

