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

提交Google表单后无法获取源与值:onFormSubmit触发器日志为空

解决Google Apps Script onFormSubmit触发器e.values为空的问题

问题描述

已安装onFormSubmit触发器,但触发时日志显示事件对象的response和source为空,且提示'e'对象或'e.values'不可用。,日志内容如下:

Mar 28, 2025, 9:34:06 AM Info {"authMode":"FULL","response":{},"source":{},"triggerUid":"1839349930"}
Mar 28, 2025, 9:34:06 AM Info 'e'对象或'e.values'不可用。

用户代码如下:

function testSendConfirmationEmail() {
  var mockEvent = {
    values: [
      "2025-03-26 12:00:00",
      "john.doe@gmail.com",
      "john doe",
      "john.doe@gmail.com",
      "0478123456",
      "M",
      "Jas met lange mouwen - €31,5",
      "Keuze2",
      "John Doe",
      "",
      "31.5",
    ],
  };
  sendConfirmationEmail(mockEvent);
}

function sendConfEmail(e) {
  Logger.log(JSON.stringify(e)); // 以JSON格式记录完整事件对象
  if (!e || !e.values) {
    Logger.log("'e'对象或'e.values'不可用。");
    return;
  }

  Logger.log(e);
  var responses = e.values;

  // 基于您的布局自定义列索引
  var timestamp = responses[0] || "未填写时间戳"; // 列A
  var email = responses[1] || "未填写邮箱地址"; // 列B
  var naam = responses[2] || "未填写姓名"; // 列C
  var alternatiefEmail =
    responses[3] || "未填写备用邮箱地址"; // 列D
  var telefoonnummer = responses[4] || "未填写电话号码"; // 列E
  var maat = responses[5] || "未填写尺码"; // 列F
  var keuze1 = responses[6] || "未选择选项"; // 列G
  var keuze2 = responses[7] || ""; // 列H
  var naamJas = responses[8] || "未填写夹克姓名"; // 列I
  var prijs = responses[10] || "未知"; // 列K

  Logger.log("Naam: " + naam);
  Logger.log("E-mailadres: " + email);
  Logger.log("Alternatief E-mailadres: " + alternatiefEmail);
  Logger.log("Telefoonnummer: " + telefoonnummer);
  Logger.log("Maat: " + maat);
  Logger.log("Keuze 1: " + keuze1);
  Logger.log("Keuze 2: " + keuze2);
  Logger.log("Naam (jas): " + naamJas);
  Logger.log("Prijs: " + prijs);

  // 邮件内容
  var subject = "订单确认";
  var body =
    "尊敬的 " +
    naam +
    ",\n\n感谢您的订单!以下是订单概述:\n\n" +
    "时间戳: " +
    timestamp +
    "\n" +
    "邮箱地址: " +
    email +
    "\n" +
    "电话号码: " +
    telefoonnummer +
    "\n" +
    "尺码: " +
    maat +
    "\n" +
    "所选商品: " +
    keuze1 +
    " + " +
    keuze2 +
    "\n" +
    "夹克姓名: " +
    naamJas +
    "\n" +
    "价格: €" +
    prijs +
    "\n\n" +
    "此致,\nHe团队";

  try {
    MailApp.sendEmail(email, subject, body);
    Logger.log("邮件已发送至: " + email);
  } catch (error) {
    Logger.log(
      "发送邮件时出错: " +
        error.message
    );
  }
}

解决方案

1. 核对触发器绑定的函数名

测试函数调用的是sendConfirmationEmail,但实际触发器绑定的是sendConfEmail,两者名称不匹配会导致无法正确接收事件对象。请打开触发器设置,确认选择函数为sendConfEmail。

2. 确认触发器的事件源类型

Google表单的onFormSubmit触发器分为两种,事件对象结构不同:

  • 表格绑定触发器:绑定到表单对应的Google表格,事件对象包含values属性(提交的行数据数组),适配你现有代码的e.values逻辑;
  • 表单绑定触发器:直接绑定到Google表单,事件对象包含response属性,需通过e.response.getItemResponses()获取响应值。

若你想保留现有代码逻辑,应选择绑定表格的onFormSubmit触发器。

3. 适配不同触发器的代码调整(二选一)

若使用表格触发器

无需修改核心逻辑,仅需确保触发器绑定到表单对应的表格,且函数名匹配即可。

若使用表单触发器

修改代码获取响应值的方式:

function sendConfEmail(e) {
  Logger.log(JSON.stringify(e));
  if (!e || !e.response) {
    Logger.log("'e'对象或'e.response'不可用。");
    return;
  }
  // 获取所有表单字段的响应
  var itemResponses = e.response.getItemResponses();
  var responses = itemResponses.map(itemResp => itemResp.getResponse());
  // 时间戳通过response对象获取
  var timestamp = e.response.getTimestamp().toLocaleString() || "未填写时间戳";
  // 后续字段按表单顺序对应数组索引
  var email = responses[0] || "未填写邮箱地址";
  var naam = responses[1] || "未填写姓名";
  var alternatiefEmail = responses[2] || "未填写备用邮箱地址";
  var telefoonnummer = responses[3] || "未填写电话号码";
  var maat = responses[4] || "未填写尺码";
  var keuze1 = responses[5] || "未选择选项";
  var keuze2 = responses[6] || "";
  var naamJas = responses[7] || "未填写夹克姓名";
  var prijs = responses[9] || "未知";

  // 后续邮件发送逻辑保持不变
  var subject = "订单确认";
  var body =
    "尊敬的 " +
    naam +
    ",\n\n感谢您的订单!以下是订单概述:\n\n" +
    "时间戳: " +
    timestamp +
    "\n" +
    "邮箱地址: " +
    email +
    "\n" +
    "电话号码: " +
    telefoonnummer +
    "\n" +
    "尺码: " +
    maat +
    "\n" +
    "所选商品: " +
    keuze1 +
    " + " +
    keuze2 +
    "\n" +
    "夹克姓名: " +
    naamJas +
    "\n" +
    "价格: €" +
    prijs +
    "\n\n" +
    "此致,\nHe团队";

  try {
    MailApp.sendEmail(email, subject, body);
    Logger.log("邮件已发送至: " + email);
  } catch (error) {
    Logger.log("发送邮件时出错: " + error.message);
  }
}

4. 重新创建触发器

若以上操作后问题仍存在,建议删除现有触发器并重新创建:

  • 打开脚本编辑器,点击左侧「触发器」图标;
  • 删除当前的onFormSubmit触发器;
  • 点击「添加触发器」,选择正确的函数名、事件源(表格/表单)、事件类型(提交时),完成配置。

内容的提问来源于stack exchange,提问作者Jonas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 16:27:01