Google Sheet同步到Google Form报错:问题不能存在重复选项值
报错原因
Exception: Questions cannot have duplicate choice values 报错触发的核心原因是从Google Sheet提取的待同步选项存在重复值,Google Form的下拉、多选、复选类问题不允许存在重复的选项内容,你当前的代码没有对Sheet提取的数据做去重处理。
修复代码
仅需要在提取选项的步骤增加去重、首尾空格清理逻辑即可解决报错,修复后的完整代码如下:
const populateGoogleForms = () => { const GOOGLE_SHEET_NAME = "Form Data"; const GOOGLE_FORM_ID = "1bl179GkeU58rq6jNj_aiSFlORGB8j7e36CtKE3drIk4"; const ss = SpreadsheetApp.getActiveSpreadsheet(); const [header, ...data] = ss.getSheetByName(GOOGLE_SHEET_NAME).getDataRange().getDisplayValues(); const choices = {}; // 此处修改:新增trim清理首尾空格 + Set去重逻辑 header.forEach((title, i) => { choices[title] = [...new Set(data.map((d) => d[i].trim()).filter((e) => e))]; }); FormApp.openById(GOOGLE_FORM_ID).getItems().map((item) => ({ item, values: choices[item.getTitle()], })).filter(({ values }) => values).forEach(({ item, values }) => { switch (item.getType()) { case FormApp.ItemType.CHECKBOX: item.asCheckboxItem().setChoiceValues(values); break; case FormApp.ItemType.LIST: item.asListItem().setChoiceValues(values); break; case FormApp.ItemType.MULTIPLE_CHOICE: item.asMultipleChoiceItem().setChoiceValues(values); break; default: // 忽略其他类型问题 } }); ss.toast("Google Form Updated !!"); };
注意事项
- 如果你已经为表单配置了答题分支跳转逻辑,直接调用
setChoiceValues全量替换选项会清空之前绑定的跳转规则,需要保留跳转逻辑的话需要额外编写逻辑匹配原有选项和跳转关系后再更新。 - 代码已默认过滤空值,无需额外处理Sheet中的空行。
内容的提问来源于stack exchange,提问作者Vinay Chandrashekhar
相关产品推荐
相关产品推荐

