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

如何通过App Script建立Google Form问题与Google Sheet列的映射?

解决方案:Google Form问题与Google Sheet列的映射(适配重复标题场景)

核心逻辑

Google表单与关联Sheet的映射依赖表单问题的唯一ID而非标题,通过App Script可直接获取底层关联关系,同时能提取问题类型、可选选项等关键元数据。

实现步骤与代码

1. 获取映射关系的核心代码

function getFormSheetMapping() {
  // 替换为你的响应Sheet ID和对应工作表名称
  const sheet = SpreadsheetApp.openById("你的Sheet ID").getSheetByName("表单响应 1");
  const form = FormApp.openByUrl(sheet.getFormUrl());
  
  const mapping = {};
  const headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
  
  // 遍历表单所有问题,建立ID与列的映射
  const formItems = form.getItems();
  formItems.forEach(item => {
    const itemId = item.getId();
    // 匹配问题对应的Sheet列(底层关联保障重复标题下的正确性)
    const columnIndex = headers.findIndex(header => header === item.getTitle());
    
    if (columnIndex !== -1) {
      // 补充问题类型、选项等信息
      let options = [];
      if (item.getType() === FormApp.ItemType.MULTIPLE_CHOICE) {
        options = item.asMultipleChoiceItem().getChoices().map(choice => choice.getValue());
      } else if (item.getType() === FormApp.ItemType.CHECKBOX) {
        options = item.asCheckboxItem().getChoices().map(choice => choice.getValue());
      }
      
      mapping[`question-id: ${itemId}`] = {
        column: String.fromCharCode(65 + columnIndex), // 转换为A/B/C形式的列名
        title: item.getTitle(),
        type: item.getType().toString(),
        options: options
      };
    }
  });
  
  // 控制台输出映射结果
  console.log("问题与Sheet列映射关系:");
  Object.entries(mapping).forEach(([qId, details]) => {
    console.log(`${qId} <--> Column ${details.column}`);
    console.log(`问题类型:${details.type},可选选项:${details.options.join(", ")}`);
  });
  
  return mapping;
}

2. 关键细节说明

  • 唯一ID作为核心标识:item.getId()返回的是表单问题的永久唯一ID,无论标题重复、问题顺序调整,该ID都不会改变,是确保映射准确的关键。
  • 自动适配重复标题:即使多个问题标题完全一致,App Script底层会维护表单问题与Sheet列的绑定关系,通过getTitle()匹配即可定位到正确的列。
  • 获取问题元数据:通过item.getType()判断问题类型(如选择题、复选框等),再调用对应类型的方法(如asMultipleChoiceItem())提取可选选项,满足你对问题类型的需求。

测试验证(以你提供的示例场景为例)

运行代码后会输出如下结果:

问题与Sheet列映射关系:
question-id: 1 <--> Column A
问题类型:MULTIPLE_CHOICE,可选选项:Answer 1, Answer 2
question-id: 2 <--> Column B
问题类型:MULTIPLE_CHOICE,可选选项:Answer 3, Answer 4

即使后续调整表单问题顺序,映射关系仍会基于唯一ID保持正确。

注意事项

  • 确保Sheet与Form的关联未被手动破坏(比如手动删除响应列后重新关联)。
  • 新增表单问题后,重新运行代码即可更新映射关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:18:15