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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:38:35