Google Apps Script表单提交事件对象使用报错求助
Google Apps Script表单提交事件对象使用报错求助
看起来你遇到的是Google Apps Script表单触发里的常见坑,我来帮你一步步排查解决:
先搞定第一个核心错误:TypeError: Cannot read properties of undefined (reading 'namedValues')
- 最常见的原因是手动运行函数:如果你直接在脚本编辑器里点击运行
onFormSubmit,此时没有真实的表单提交触发,e参数是undefined,自然读不到namedValues。必须通过真实提交表单来测试,或者写一个模拟事件的测试函数(手动构造包含namedValues的对象传入)。 - 检查触发器的拼写和类型:你提到设置了触发器运行
onFormSubit,注意这里少了一个字母m!正确的函数名是onFormSubmit,拼写错误会导致触发器找不到函数,也就不会传入事件对象e。同时要确认触发器类型是**「表单提交」**,而不是时间驱动或其他类型。
再解决第二个错误:TypeError: Cannot read properties of undefined (reading '0')
- 这个错误是因为代码里的字段名和表单实际的字段名不匹配。比如
info['Type Of Service']是undefined,说明你的表单里没有这个精确名称的字段。要去Google Forms里核对每个字段的精确名称(包括大小写、空格、标点),比如是不是写成了“Type of Service”(小写的of)?最好直接从表单里复制字段名到代码里,避免拼写错误。 - 可以在
onFormSubmit里加日志打印,查看实际的字段名:
function onFormSubmit(e) { console.log(JSON.stringify(e.namedValues)); // 打印所有提交的字段和值 const info = e.namedValues; createPDF(info); }
提交表单后,去脚本编辑器的「查看」→「日志」里查看输出,就能看到所有真实的字段键名了。
额外的容错建议
为了避免因为某个字段缺失导致整个脚本崩溃,可以给每个字段读取加个容错处理:
// 比如读取FirstName,用可选链和默认值容错 const firstName = info['First Name']?.[0] || ''; body.replaceText("{fn}", firstName);
这里用了可选链操作符?.,如果字段不存在就不会报错,而是返回undefined,再用|| ''设置默认值为空字符串。
备注:内容来源于stack exchange,提问作者Sam Murdock
相关产品推荐
相关产品推荐

