Google Apps Script onFormSubmit事件返回空值/错误值问题
问题现象
- 搭建的Google表单中设置了必填问题「My Question」,表单配置如下:

- 该字段已开启必填校验,但在表单关联的电子表格响应表中,无法查看到该字段的提交结果,电子表格界面如下:

- 已配置表单提交触发器:当表单收到新提交内容时,自动运行电子表格脚本编辑器内的指定函数,触发器配置如下:

- 触发器绑定的函数代码:
function copyFormContents(e) { Logger.log(JSON.stringify(e)) }
- 脚本运行日志中,返回的表单提交事件对象内容如下:
{ "authMode": "FULL", "namedValues": { "My Question": [ "", "Another answer" ] }, /* 其余无关字段已省略 */ }
- 异常表现:日志内
My Question字段返回2个条目,其中包含1个空值;尝试切换该问题的必填/非必填状态,异常始终存在。
问题根因
该异常和问题的必填配置无关,核心原因是表单与关联电子表格的字段映射存在残留错位:
你此前大概率删除过旧版本的「My Question」问题,之后又重新创建了同标题的新问题,但旧问题在电子表格响应表中的列绑定关系没有被同步清理。每次有新的表单提交时,系统会同时向旧残留列、新问题列写入值:旧列匹配不到新表单的对应输入就会写入空字符串,新列写入用户实际提交的答案,最终就出现了日志里同名字段带空值的双条目结构;同时因为列映射错位,你在电子表格当前的对应列里看不到新提交的该字段内容。切换必填状态不会修改这个底层映射关系,因此无法解决问题。
修复方案
按以下步骤操作即可解决:
- 打开电子表格顶部菜单栏「扩展程序」-「Apps 脚本」,进入触发器管理页面,临时删除当前绑定的表单提交触发器,避免操作过程中触发异常脚本运行
- 回到电子表格的表单响应工作表,找到当前表头为「My Question」的列,整列删除
- 点击顶部菜单栏「表单」-「取消关联表单」,断开当前表格和表单的绑定关系
- 再次点击「表单」-「关联表单」,选中你原来使用的Google表单重新绑定,系统会自动重新生成全量正确的字段列映射
- 回到Apps脚本页面,重新新建表单提交触发器,绑定原有的
copyFormContents函数 - 提交一条测试响应验证:此时电子表格会正常展示该字段的提交内容,脚本日志中
My Question字段也只会返回单条有效答案,不会再出现空值条目。
提示:重新绑定表单不会丢失已收集的历史响应数据,若担心操作失误,可先为电子表格创建一个副本备份后再操作。
内容的提问来源于stack exchange,提问作者Manuel Perez Heredia
相关产品推荐
相关产品推荐

