如何用单脚本创建含固定数量单选题的多份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
相关产品推荐
相关产品推荐

