求助:Google App Script自动发送表单回复至经理时第3行报错
问题修复:Google表单提交触发经理邮件通知的脚本错误
第3行失败核心原因
e.range.getSheet()方法不需要传入任何参数,它的作用是直接获取当前触发事件对应的工作表对象。原代码错误地传入工作表名称作为参数,导致方法调用失败。
其他潜在问题修正
- 条件判断错误:
if (sheetName = "Retail Bank Data Change Management Exception Form")使用了赋值运算符=,应改为全等比较运算符=== - 经理邮箱字段处理:需更严谨地处理字段未填写、值为空的情况
namedValues返回值处理:表单字段值以数组形式存储,直接toString()可能在空值时出错
修正后的完整代码
function onMyFormSubmit(e) { // 正确获取触发事件对应的工作表对象(无需传参) let sheet = e.range.getSheet(); let sheetName = sheet.getName(); // 使用全等比较判断工作表名称 if (sheetName === "Retail Bank Data Change Management Exception Form") { let eventVals = e.namedValues; let managerEmailField = "Please provide your manager's email address"; // 安全获取邮箱值,处理字段不存在或为空的情况 let emailAddress = eventVals[managerEmailField]?.[0] || ""; // 仅当邮箱有效时发送邮件 if (emailAddress && emailAddress !== managerEmailField) { let bodyText = ""; let keys = Object.keys(eventVals); keys.forEach((key) => { // 将数组值转为可读性更好的字符串(适配多选字段) let value = Array.isArray(eventVals[key]) ? eventVals[key].join(", ") : eventVals[key]; bodyText += `${key}: ${value}\n`; }); let subject = "Your associate has submitted an exclusion request to the Data Element Change Management Portal."; MailApp.sendEmail(emailAddress, subject, bodyText); } } }
关键修正点说明
- 修复
getSheet()方法调用,去掉多余参数,正确获取工作表对象后再读取名称 - 条件判断改为
===,避免意外赋值导致的逻辑错误 - 使用可选链
?.和默认值|| ""处理字段不存在或为空的边界情况 - 适配表单多选字段的数组值,用
join(", ")转为字符串提升可读性 - 强化邮箱有效性判断,避免发送无效邮件
内容的提问来源于stack exchange,提问作者Piper Roach
相关产品推荐
相关产品推荐

