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

表单脚本中namedValues报错,表格脚本可正常运行的技术咨询

问题原因

Google表单绑定脚本的onFormSubmit触发器事件对象,和Google表格绑定脚本的结构完全不同:

  • 表格端的事件对象属于SpreadsheetFormSubmitEvent,自带namedValues属性,直接用字段名就能取到对应值
  • 表单端的事件对象属于FormResponse,没有namedValues属性,这就是你报错Cannot read property 'Name' of undefined的核心原因
解决方案:在表单脚本中实现类似namedValues的功能

可以手动把表单的ItemResponse列表转换成键值对对象,键是问题标题,值是响应内容,这样就能像用namedValues一样通过标题访问数据,完美适配你处理30个字段的需求,代码示例如下:

function onFormSubmit(e) {
  // 把表单响应转换成类似namedValues的键值对对象
  const formResponseObj = {};
  e.response.getItemResponses().forEach(itemResp => {
    const questionTitle = itemResp.getItem().getTitle();
    const responseValue = itemResp.getResponse();
    // 处理多选等返回数组的情况,和表格端namedValues行为保持一致
    formResponseObj[questionTitle] = Array.isArray(responseValue) ? responseValue.join(', ') : responseValue;
  });

  const emailRecipients = 'someemail@gmail.com';
  const emailSubject = 'Subject of email'; 
  // 现在可以直接用问题标题访问,和表格端用法完全一致
  let name = formResponseObj['Name'].trim();
  let htmlBody = `<p>${name}</p>`;
  GmailApp.sendEmail(emailRecipients, emailSubject, '', { htmlBody: htmlBody });
}
补充说明
  • 转换后的对象和表格端namedValues行为基本一致:多选问题会把选项数组转成逗号分隔的字符串,单个选项直接返回字符串
  • 注意问题标题要完全匹配(包括大小写、空格),否则会取不到对应值
  • 表单自带的必填项校验已生效,无需额外处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:45:49