Google表单自动回复脚本报错:TypeError: Cannot read property "values" from undefined
解决Google Apps Script表单触发邮件的TypeError问题
看起来你遇到的TypeError: Cannot read property "values" from undefined问题,主要有两个核心原因,结合你的代码和场景,我来一步步帮你解决:
1. 触发方式错误导致事件对象e未定义
这个报错最常见的情况是你手动运行了myFunction函数——当你手动执行时,函数没有接收到表单提交的事件对象e,所以e是undefined,自然没法读取namedValues属性。
解决办法:
- 确保你设置的是**“表单提交”触发器**,而不是时间驱动或其他类型的触发器。
- 测试时不要直接点代码编辑器里的运行按钮,而是去你的Google表单里提交一条测试数据,让触发器自动触发函数。
2. 表单字段名与代码里的键不匹配
你提到表格列名为code,但你的代码里写的是e.namedValues.Code——namedValues的键是表单字段的显示名称(完全区分大小写),如果表单里的字段名是小写的code,代码里用大写Code就会取不到值,甚至可能引发后续问题。另外还要检查Name、Tag这些字段名是否和表单里的完全一致(包括空格、大小写)。
修正后的完整代码
我帮你调整了代码,加上了字段名匹配修正、空值检查,还有字符串拼接的空格问题(原来的邮件内容里有些地方没空格,会导致文本连在一起):
function myFunction(e) { // 先判断事件对象是否存在,避免手动运行报错 if (!e || !e.namedValues) { Logger.log("请通过表单提交触发此函数,不要手动运行"); return; } // 注意:这里的键要和表单字段的显示名称完全一致(区分大小写) // 假设你的表单字段名是:Name、Tag、Timestamp、code var userName = e.namedValues["Name"]?.[0] || "未知用户"; var userEmail = e.namedValues["Tag"]?.[0] || ""; var date = e.namedValues["Timestamp"]?.[0] || ""; var caseCode = e.namedValues["code"]?.[0] || "无编号"; // 检查邮箱是否有效,避免发送失败 if (!userEmail) { Logger.log("未获取到用户邮箱,无法发送邮件"); return; } var subject = caseCode; var message = `Thanks, ${userName} for submitting your data. Remember to take note of your Case number: ${caseCode}. You'll need this for you or the customer to find the case again. Submitted on: ${date}`; // 发送邮件 MailApp.sendEmail(userEmail, subject, message); }
额外注意事项
- 确认你的Google账号已经授权脚本访问
MailApp服务(第一次触发时会弹出授权请求,需要允许)。 - 表单里的
Tag字段是用来收集用户邮箱的,要确保用户填写的是有效的邮箱地址,否则邮件会发送失败。
内容的提问来源于stack exchange,提问作者Andrew Bullimore
相关产品推荐
相关产品推荐

