如何在Google Apps Script中用for循环结合.createChoice从表格生成测验
解决Google Apps Script循环创建带正确答案的表单选项问题
我来帮你搞定这个问题!你遇到的核心问题是调用createChoice的对象搞错了——createChoice不是Form对象的方法,而是你刚创建的MultipleChoiceItem(或CheckboxItem)的专属方法,这才导致你的questionInfo数组为空,没法正常生成选项。
问题根源分析
你之前的代码里写了form.createChoice(...),但实际上createChoice必须通过具体的表单问题项(比如你添加的单选/复选框题)来调用,直接用Form对象调用不会生成有效的选项,自然数组就空了。
最优实现代码
结合你的表格结构(选项从optionsCol开始,共maxOptions个,正确答案在每个选项右侧maxOptions列的位置),正确的代码应该是这样的:
if (questionType == 'CHOICE') { // 第一步:先创建对应的单选题项 var mcItem = form.addMultipleChoiceItem(); // 别忘了设置题目标题,这里假设标题在表格第2列(索引1) mcItem.setTitle(data[i][1]); var questionInfo = []; var optionsCol = 4; // 你的选项起始列索引 var maxOptions = 5; // 允许的最大选项数量 // 循环遍历所有选项列 for (var j = optionsCol; j < optionsCol + maxOptions; j++) { var optionText = data[i][j]; // 跳过空的选项单元格 if (optionText === "") continue; // 获取对应的正确答案标记,转换为布尔值(确保表格里是TRUE/FALSE或可转布尔的内容) var isCorrect = Boolean(data[i][j + maxOptions]); // 关键:用刚创建的mcItem调用createChoice,而不是form! questionInfo.push(mcItem.createChoice(optionText, isCorrect)); } // 把组装好的选项数组设置到问题上 mcItem.setChoices(questionInfo); }
额外注意事项
- 如果你的表格里正确答案列不是布尔值(比如用"是"/"否"、"对"/"错"标记),需要调整
isCorrect的转换逻辑,比如:var isCorrect = data[i][j + maxOptions] === "是"; - 循环范围要准确:
j < optionsCol + maxOptions确保只遍历你设定的最大选项数,避免数组越界 - 如果是创建多选题(CheckboxItem),只需要把
form.addMultipleChoiceItem()改成form.addCheckboxItem()即可,createChoice的用法完全一致
内容的提问来源于stack exchange,提问作者Ike
相关产品推荐
相关产品推荐

