谷歌表格自动发邮件Google Script故障排查求助
Google表格onEdit脚本自动发邮件故障排查
我编写了一段Google Script,希望在编辑谷歌表格时自动发送邮件,但脚本无法正常运行。已确认脚本关联表格、具备发邮件权限,邮件未进入垃圾邮件,附上表格截图、编辑器截图及代码,请求排查指导。
脚本代码
function onEdit(e) { if (!e) { Logger.log("No event object detected. onEdit(e) must be triggered by an actual sheet edit."); return; } try { var sheet = e.range.getSheet(); var editedRow = e.range.getRow(); var editedCol = e.range.getColumn(); Logger.log("Edit detected in row " + editedRow + ", column " + editedCol); if (editedCol === 4) { // "Status" column var statusText = sheet.getRange(editedRow, editedCol).getValue(); if (typeof statusText === 'string' && statusText.toLowerCase() === "completed") { var timeTaken = sheet.getRange(editedRow, 5).getValue(); if (timeTaken) { var task = sheet.getRange(editedRow, 1).getValue(); // Column A var paymentDue = sheet.getRange(editedRow, 6).getValue(); // Column F var formattedDate = new Date().toLocaleString(); var recipient = "correct@gmail.com"; var subject = "Task Completed: " + task; var body = "Task: " + task + "\n" + "Completed on: " + formattedDate + "\n" + "Time Taken: " + timeTaken + " hrs\n" + "Payment Due: " + paymentDue; MailApp.sendEmail(recipient, subject, body); Logger.log("Email sent for row " + editedRow); } } } } catch (error) { Logger.log("Error in onEdit: " + error); } }
排查方向
- 语法错误修正:原代码中邮件内容的换行使用了错误写法,会导致JavaScript语法异常,需替换为标准换行符
\n(上述代码已调整)。 - 触发列验证:确认表格中「Status」列确实是第4列(D列),若列位置不符,修改
editedCol === 4中的对应数字。 - 状态值匹配检查:查看表格中输入的「completed」是否带有多余空格(如
completed或Completed),或是非字符串格式(比如数据验证下拉框的值类型是否为字符串),这些都会导致状态判断不成立。 - timeTaken逻辑调整:原代码
if(timeTaken)会把数值0判定为假,若允许耗时为0的任务触发邮件,需改为if(timeTaken !== null && timeTaken !== "")。 - 触发器类型确认:
onEdit是简单触发器,仅在用户手动编辑表格时触发;如果是通过脚本/API编辑表格,需改用可安装触发器。 - 日志排查:在脚本编辑器中打开「查看」→「日志」,检查是否有错误信息或触发记录,确认
onEdit是否正常触发、哪一步逻辑未通过。
内容的提问来源于stack exchange,提问作者Alex Schueppert
相关产品推荐
相关产品推荐

