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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:57:02