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

如何用单脚本创建含固定数量单选题的多份Google表单

解决方案

1. 修正文件遍历逻辑

DriveApp 返回的文件列表是FileIterator迭代器对象,不是数组,不能通过下标files[i]直接访问。正确的遍历方式要用while循环结合hasNext()和next()方法:

function createForms() {
  // 存放数据集的目标文件夹
  var folder = DriveApp.getFolderById('FOLDERID');
  // 获取文件夹内的文件迭代器
  var files = folder.getFiles();

  // 遍历文件(限制只处理10个,避免多余文件干扰)
  var processedCount = 0;
  while (files.hasNext() && processedCount < 10) {
    var currentFile = files.next();
    // 传入当前数据集文件到表单生成函数
    createMultipleChoiceForm(currentFile);
    processedCount++;
  }
}

2. 确保每次生成独立新表单

表单被覆盖的核心原因是你的createMultipleChoiceForm函数大概率没有每次创建新的表单实例,而是复用了同一个对象。修改这个函数,每次调用FormApp.create()生成全新表单,同时用数据集文件名作为表单标题的一部分,确保名称唯一:

function createMultipleChoiceForm(dataFile) {
  // 用数据集文件名创建唯一标题的新表单
  var form = FormApp.create(`${dataFile.getName()} 验证表单`);
  
  // 读取数据集内容(根据你的文件格式调整,这里以文本文件为例)
  var dataContent = dataFile.getBlob().getDataAsString();
  // 解析dataContent提取pred_1等题目变量...
  
  // 生成单选题的示例逻辑(你原有代码的复用)
  var sentence = form.addMultipleChoiceItem();
  var choices = [
    sentence.createChoice('Answer I'),
    sentence.createChoice('Answer II'),
    sentence.createChoice('Answer III')
  ];
  sentence.setTitle("替换为从数据集提取的题目")
          .setChoices(choices);
  
  // 循环生成剩下的20章×5道题目...
  
  // 可选:将生成的表单移动到指定文件夹(避免散落在Drive根目录)
  var formFile = DriveApp.getFileById(form.getId());
  formFile.moveTo(DriveApp.getFolderById('存放表单的文件夹ID'));
}

3. 关键注意事项

  • 避免重名覆盖:一定要用数据集的唯一标识(比如文件名)作为表单标题的一部分,Drive虽然不会自动覆盖同名文件,但手动保证唯一性更稳妥。
  • 适配数据集格式:如果你的数据集是Google表格,要把读取逻辑改成SpreadsheetApp.open(dataFile)来获取表格数据。
  • 按需筛选文件:如果文件夹里不止10个数据集文件,可以在循环里加判断,比如只处理文件名包含特定关键词的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:46:19