Google Form预填复选框答案失败,FormApp.CheckboxItem.createResponse参数不匹配报错
报错原因
Google Form的复选框组件CheckboxItem的createResponse方法要求传入字符串数组类型的参数,用于支持多选需求。你传入了单个字符串格式的答案"Alice",参数类型不匹配,所以触发报错。
另外你提供的代码中重复写了两次FormApp.ItemType.CHECKBOX的分支逻辑,属于冗余代码,建议删除。
修复方案
把复选框分支的传参调整为数组格式即可,如果你后续有复选框多选的需求,表格中答案用逗号分隔的话,可以再加一步拆分逻辑适配多选项场景,修改后的代码如下:
function readSpreadsheet() { var formid = 'formidgoeshere'; var ssid = 'ssidgoeshere'; var sheetname = 'answers' var sheet = SpreadsheetApp.openById(ssid).getSheetByName(sheetname); var range = sheet.getDataRange(); var numRows = range.getNumRows(); var values = range.getValues(); var form = FormApp.openById(formid) var items = form.getItems(); for (var i = 1; i < numRows; i++) { var value = values[i]; Logger.log(value) var formResponse = form.createResponse(); var k = 0; for (var j = 0; j < items.length; j++) { var item; switch (items[j].getType()) { case FormApp.ItemType.CHECKBOX: item = items[j].asCheckboxItem(); Logger.log("Item number " + j + " is titled: " + item.getTitle() ); // 核心修改:将字符串转为数组,多选场景下可拆分逗号分隔的答案 var checkboxAnswer = value[k++]; // 兼容单选/多选:如果是单个值直接包裹为数组,多个值按逗号拆分 var answerArr = typeof checkboxAnswer === 'string' ? checkboxAnswer.split(',').map(s => s.trim()) : [checkboxAnswer]; formResponse.withItemResponse(item.createResponse(answerArr)); break; case FormApp.ItemType.LIST: item = items[j].asListItem(); Logger.log("Item number " + j + " is titled: " + item.getTitle() ); formResponse.withItemResponse(item.createResponse(value[k++])); break; case FormApp.ItemType.MULTIPLE_CHOICE: item = items[j].asMultipleChoiceItem(); Logger.log("Item number " + j + " is titled: " + item.getTitle() ); formResponse.withItemResponse(item.createResponse(value[k++])); break; case FormApp.ItemType.PARAGRAPH_TEXT: item = items[j].asParagraphTextItem(); Logger.log("Item number " + j + " is titled: " + item.getTitle() ); formResponse.withItemResponse(item.createResponse(value[k++])); break; case FormApp.ItemType.TEXT: item = items[j].asTextItem(); Logger.log("Item number " + j + " is titled: " + item.getTitle() ); formResponse.withItemResponse(item.createResponse(value[k++])); break; default: Logger.log("#" + (i + 1) + ":Do nothing for item " + j + " of type " + items[j].getType()); continue; } if(j==0){ Logger.log("This item is the FORM NUMBER"); }; } formResponse.submit(); } }
如果你的表格中复选框答案都是单个值,不需要支持多选,直接简化为item.createResponse([value[k++]])即可。
内容的提问来源于stack exchange,提问作者JohnTyler
相关产品推荐
相关产品推荐

