Google Apps Script配置表单选项跳转:仅最后一项生效问题求助
Google Apps Script表单选项跳转仅保留最后一项的问题解决
使用Google Apps Script编辑Google表单时,需将某道多选题的选项从指定表格读取,并为每个选项配置「根据答案跳转到对应分段」的功能。日志验证所有选项文本和目标分段ID均可正常读取,但最终表单仅保留最后一个选项及对应的跳转设置。
原代码
function editForm() { var form = FormApp.openById('MY FORM ID'); // 要编辑的表单 var multipleChoiceQstn = form.getItemById(1288364781).asMultipleChoiceItem(); // 需设置跳转的多选题 var spreadsheet = SpreadsheetApp.openById("MY SPREADSHEET ID"); var sheet = spreadsheet.getSheetByName("MY SHEET NAME"); var choices = sheet.getRange(7,4,17,1).getValues(); // 选项文本所在单元格范围 var questionsId = sheet.getRange(7,6,17,1).getValues() ; // 目标分段ID所在单元格范围 for (var k = 0; k < choices.length; k++) { var choice = choices[k][0]; var questionId = questionsId[k][0]; var sectionQuest = form.getItemById(questionId).asPageBreakItem(); multipleChoiceQstn.setChoices([multipleChoiceQstn.createChoice(choice, sectionQuest)]) } };
问题原因
循环中每次调用setChoices()时,都传入了仅包含当前选项的数组,这会覆盖之前所有已设置的选项,最终只保留循环最后一次创建的选项。
修正方案
先创建一个空数组存储所有带跳转配置的选项对象,循环中逐个添加,最后一次性调用setChoices()完成所有选项的设置。
修正后的代码
function editForm() { var form = FormApp.openById('MY FORM ID'); // 要编辑的表单 var multipleChoiceQstn = form.getItemById(1288364781).asMultipleChoiceItem(); // 需设置跳转的多选题 var spreadsheet = SpreadsheetApp.openById("MY SPREADSHEET ID"); var sheet = spreadsheet.getSheetByName("MY SHEET NAME"); var choices = sheet.getRange(7,4,17,1).getValues(); // 选项文本所在单元格范围 var questionsId = sheet.getRange(7,6,17,1).getValues() ; // 目标分段ID所在单元格范围 // 创建空数组存储所有选项 var allChoices = []; for (var k = 0; k < choices.length; k++) { var choice = choices[k][0]; var questionId = questionsId[k][0]; // 跳过空值(如果表格中有空行) if (!choice || !questionId) continue; var sectionQuest = form.getItemById(questionId).asPageBreakItem(); // 将带跳转的选项添加到数组 allChoices.push(multipleChoiceQstn.createChoice(choice, sectionQuest)); } // 一次性设置所有选项 multipleChoiceQstn.setChoices(allChoices); };
额外优化说明
- 添加了空值判断,避免表格中空行导致的错误
- 所有选项统一在循环结束后设置,避免多次覆盖操作
内容的提问来源于stack exchange,提问作者PSAB Plalangan
相关产品推荐
相关产品推荐

