如何在Google Apps Script中动态为MultipleChoiceItem添加选项
解决Google Form动态添加带页面跳转的多选题选项问题
核心问题分析
setChoices()是覆盖式赋值,每次调用会替换所有现有选项,因此分批次调用会丢失之前的选项setChoiceValues()仅支持纯文本选项,无法处理关联页面跳转(PageBreakItem)的选项,这是你循环代码失效的关键原因
正确实现代码
通过循环构建完整的Choice对象数组,再一次性调用setChoices()完成设置:
var preguntaQuienEres = form.addMultipleChoiceItem(); preguntaQuienEres.setTitle('¿Quién eres?').isRequired(); var choices = []; for (var i = 0; i < nombresAlumnos.length; i++) { // 获取对应页面跳转组件 var targetPage = form.getItemById(saltosDeSeccion[i]).asPageBreakItem(); // 创建带跳转的选项并加入数组 choices.push(preguntaQuienEres.createChoice(nombresAlumnos[i], targetPage)); } // 一次性设置所有选项 preguntaQuienEres.setChoices(choices);
额外技巧:追加选项
如果需要在已有选项基础上新增(而非覆盖),可以先获取当前选项数组,再追加后更新:
// 获取当前已有的选项 var existingChoices = preguntaQuienEres.getChoices(); // 添加新的带跳转选项 existingChoices.push(preguntaQuienEres.createChoice("新增选项", 目标PageBreakItem)); // 更新选项列表 preguntaQuienEres.setChoices(existingChoices);
关于asMultipleChoiceItem()的说明
该方法属于FormApp.Item类,作用是将通用的表单项对象转换为MultipleChoiceItem类型,方便调用多选题专属的方法(如setChoices()),你可以在Google Apps Script官方文档的Item章节找到相关说明。
内容的提问来源于stack exchange,提问作者Alberto Gonzalez Berrio
相关产品推荐
相关产品推荐

