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

使用Google Apps Script同步Google Forms响应到Sheets的列匹配问题

问题原因

原代码未将表单响应和表格列标题做绑定,仅按表单提交的问题顺序依次写入表格列,一旦表单调整问题顺序、增减问题,就会出现内容错位。

修正后的完整代码
function onFormSubmit(event) {
  // 用对象存储响应,键为问题标题,值为对应答案
  const responseMap = {};
  // 直接从提交事件获取最新响应,无需拉取全量表单响应
  const itemResponses = event.response.getItemResponses();
  
  for (let j = 0; j < itemResponses.length; j++) {
    const itemResponse = itemResponses[j];
    const title = itemResponse.getItem().getTitle();
    const answer = itemResponse.getResponse();
    responseMap[title] = answer;
  }

  AddRecord(responseMap);
}

function AddRecord(responseMap) {
  const url = 'https://docs.google.com/spreadsheets/d/1ZHlvt_Blqe7rDheIxVjvYhneoZfZPGiGbXFSIri6u1c/edit#gid=0';   
  const ss = SpreadsheetApp.openByUrl(url);
  const dataSheet = ss.getSheetByName("Sheet7");
  // 读取第一行所有列标题
  const headerRow = dataSheet.getRange(1, 1, 1, dataSheet.getLastColumn()).getValues()[0];
  const newRow = [];
  // 按表格列标题顺序匹配对应答案
  headerRow.forEach(header => {
    newRow.push(responseMap[header] || "");
  });
  // 末尾加提交时间
  newRow.push(new Date());
  // 写入新行
  dataSheet.appendRow(newRow);
}
核心修改说明
  • 将收集响应的结构从普通数组改为对象,以表单问题标题为键存储对应答案,不受问题顺序影响
  • AddRecord函数新增列标题匹配逻辑:先读取表格第一行的列标题,按标题顺序匹配对应答案生成行数据,无对应答案的列自动留空
  • 优化了响应读取逻辑:直接使用表单提交事件自带的响应对象,不需要每次拉取全量表单响应,运行效率更高
注意事项
  • 请确保Sheet7第一行的列标题与表单的问题标题完全一致,包括空格、大小写、特殊符号,否则无法正常匹配
  • 部署时请保留onFormSubmit的触发器配置,触发条件选择「表单提交」即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:21:00