Google脚本onFormSubmit触发时e.values为空,无法访问电子表格
解决Google Apps Script onFormSubmit触发器e.values为空的问题
核心问题说明
你代码里手动打开电子表格的操作和e.values为空没有直接关联——onFormSubmit触发器的事件对象e是表单提交时自动传递的,无需手动读取表格来获取提交数据。以下是具体排查和修复方案:
1. 检查触发器的绑定类型
- 如果脚本是绑定在表单关联的电子表格中:确保触发器类型是「电子表格」→「表单提交」,而非其他类型。
- 如果脚本是独立脚本:需确认触发器已关联到目标表单,且完成了完整的权限授权。
2. 验证事件对象结构
查看你日志中JSON.stringify(e)的输出:
- 若触发器绑定在电子表格,事件对象应包含
values数组、range等字段; - 若触发器绑定在表单,事件对象的核心数据在
response字段下,需通过e.response.getItemResponses()获取提交值,而非e.values。
3. 修正代码逻辑
情况1:触发器绑定电子表格
移除多余的表格打开代码,先判断事件对象有效性:
function onFormSubmit(e) { // 先校验事件对象是否有效 if (!e || !e.values) { Logger.log("未获取到表单提交数据"); return; } Logger.log(JSON.stringify(e)); var row = e.values; var email = row[1]; // E-post var namnOrg = row[2]; // Namn eller organisation var bookingDate = new Date(row[4]); // Datum (om det är i rätt format) var affiliation = row[5]; // Affiliation var purpose = row[6]; // Ändamål var other = row[7]; // Övrigt var today = new Date(); // Nuvarande datum // 后续业务逻辑... }
情况2:触发器绑定表单
调整为通过response获取提交值:
function onFormSubmit(e) { if (!e || !e.response) { Logger.log("未获取到表单提交响应"); return; } var responses = e.response.getItemResponses(); // 根据表单问题的顺序索引取值(从0开始) var email = responses[1].getResponse(); // 对应原row[1] var namnOrg = responses[2].getResponse(); // 对应原row[2] // 日期类型需自行转换格式,例如: var bookingDate = new Date(responses[4].getResponse()); var affiliation = responses[5].getResponse(); var purpose = responses[6].getResponse(); var other = responses[7].getResponse(); var today = new Date(); // 后续业务逻辑... }
4. 额外排查点
- 确认表单的「响应」设置中,目标电子表格确实是你指定的文档;
- 重新启用触发器或删除后重建,避免触发器配置异常;
- 手动运行一次脚本,重新完成权限授权,确保脚本拥有访问表单和表格的权限。
内容的提问来源于stack exchange,提问作者Ture
相关产品推荐
相关产品推荐

