Google Apps Script表单提交触发脚本报错:TypeError无法读取values属性
修复Google表单触发脚本的"Cannot read properties of undefined (reading 'values')"错误
错误原因分析
- 手动运行报错:该脚本为表单提交事件设计,手动运行时没有传入事件对象
e,导致e为undefined,无法读取e.values。 - 表单提交报错:大概率是表单字段结构变更(新增/删除问题、调整问题顺序),或是脚本权限/触发器异常,也可能是模板文件/文件夹的权限发生变化。
修复步骤
1. 解决手动调试问题
若需要手动测试,新增测试函数模拟表单提交事件:
// 手动调试用测试函数 function testPatientReport() { // 替换为表单关联的Google Sheet ID var sheet = SpreadsheetApp.openById("你的Sheet ID").getActiveSheet(); var lastRow = sheet.getLastRow(); // 读取最新一行数据(55为当前表单字段总数,按需调整) var values = sheet.getRange(lastRow, 1, 1, 55).getValues()[0]; // 模拟表单提交事件对象 var e = { values: values }; // 调用原处理函数 PatientResponsesFormReport(e); }
2. 排查表单字段结构
- 打开Google表单,通过「版本历史」对比9月13日前后的问题顺序
- 表单提交的
e.values严格按问题顺序排列,第一个值为时间戳(e.values[0]),若中间新增/删除问题,所有索引会偏移,导致读取错误。需重新核对每个e.values[index]对应的字段,修正索引值。
3. 检查触发器与权限
- 打开脚本编辑器,点击左侧「触发器」图标,确认表单提交触发器存在,且触发事件为「表单提交」
- 若触发器缺失,重新创建:选择函数
PatientResponsesFormReport,事件源选「表单」,事件类型选「表单提交」 - 重新授权脚本:点击「运行」,按提示完成权限授予(需使用拥有表单/文件操作权限的账号)
4. 验证模板与文件夹权限
- 确认模板文件ID(
1zsvcI6JwY_kdSCVs7w6gSh_VmwwtIe1E_Fm28b0GyvM)对应的Google Doc存在,且脚本运行账号有编辑权限 - 确认目标文件夹ID(
1j619jPkXGATxs99Uh6BbDu4e4lV0za_3)存在,且脚本运行账号有写入权限 - 权限不足时,给对应文件/文件夹添加运行账号的编辑权限
5. 新增错误防护(可选)
在原函数开头添加判断,避免空值导致崩溃:
function PatientResponsesFormReport(e) { // 新增空值检查 if (!e || !e.values) { console.error("事件对象或表单值为空,请通过表单提交触发"); return; } // 原代码继续执行 var timestamp = e.values[0]; // ... 剩余代码 }
内容的提问来源于stack exchange,提问作者Brent Weaver
相关产品推荐
相关产品推荐

