Google Apps Script运行报错:无法读取未定义属性'toString' at sendFormByEmail
问题排查与修复方案
报错根因
报错指向代码中toString方法的调用,本质是e.namedValues[headers[i]]返回了undefined,也就是表单提交的命名字段中,不存在和当前表格第一行某一个表头完全匹配的字段,对未定义值调用方法就触发了类型错误。
之前稳定运行现在突然报错的常见触发场景:
- 关联的Google表单调整过问题标题,和表格内的表头文本不一致
- 有人手动修改了表格第一行的表头内容,和表单的问题标题出现了差异
修复代码
直接替换你现有的代码即可,新增了字段存在性校验,避免空值调用方法报错:
function sendFormByEmail(e){ var email = "myLNCF.testemail@gmail.com"; var subject = "Employee Call Out: \n" + e.namedValues["Employee's First and Last Name"] + "\nDept: \n" + e.namedValues["Employee's Department"]; var s = SpreadsheetApp.getActiveSheet(); var headers = s.getRange(1,1,1,s.getLastColumn()).getValues()[0]; var message = ""; for(var i in headers) { // 校验字段是否存在,不存在时显示默认提示 const currentVal = e.namedValues[headers[i]]; message += headers[i] + ' = '+ (currentVal ? currentVal.toString() : "无对应提交数据") + "\n\n"; } MailApp.sendEmail(email, subject, message); }
根因定位方法(可选)
如果想要找到具体不匹配的字段,可临时在循环内添加日志输出:
for(var i in headers) { // 执行后在Apps Script的「执行记录」页面查看输出,找到值为undefined的表头即可 console.log("表头:"+ headers[i], "对应提交值:", e.namedValues[headers[i]]); const currentVal = e.namedValues[headers[i]]; message += headers[i] + ' = '+ (currentVal ? currentVal.toString() : "无对应提交数据") + "\n\n"; }
核对表单问题标题和对应表头的文本,确保大小写、空格、特殊符号完全一致后,即可从根源解决报错。
内容的提问来源于stack exchange,提问作者Rob H
相关产品推荐
相关产品推荐

