You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 12:55:08