使用Apps Script为Google Forms新增选项时如何保留复选框的选项配图
Google Apps Script 复选框追加选项时保留原有配图的实现方案
问题根因
- Google Forms API 中
CheckboxItem.setChoices()属于全量覆写接口,调用后会清空目标复选框的所有原有选项配置,仅保留传入列表中通过createChoice显式绑定的属性 - 原始实现中直接将
getChoices()返回的原生Choice对象传入参数列表,这类对象上挂载的关联图片配置不会被API识别,因此最终执行后原有选项的配图会全部丢失
修正实现流程
- 遍历目标复选框的所有原有选项,同步提取每个选项的文本值、关联图片资源
- 对所有原有选项,调用带图片参数的
createChoice方法重建Choice实例,重新绑定原有图片配置 - 对需要新增的选项,校验不存在重复文本后,按无图配置生成新的Choice实例
- 将所有重建后的Choice实例组成列表,一次性传入
setChoices完成配置覆写
核心修正代码
// 获取目标复选框对象 var item = form.getItems(FormApp.ItemType.CHECKBOX) .filter(function(item){ return item.getTitle() === 'Top 5 films'; })[0].asCheckboxItem(); var finalChoices = []; var existingChoicesTitles = []; // 遍历原有选项,重建带图片绑定的Choice对象 var existingChoices = item.getChoices(); existingChoices.forEach(function(choice) { var choiceText = choice.getValue(); var choiceImage = choice.getImage(); // 重建选项时同步绑定原有图片 finalChoices.push(item.createChoice(choiceText, choiceImage)); existingChoicesTitles.push(choiceText); }); // 追加不存在的新选项 for (i = 0; i < values.length; i++) { var newChoiceText = values[i]; if (!existingChoicesTitles.includes(newChoiceText)) { // 新选项无关联图片,图片参数传null即可 finalChoices.push(item.createChoice(newChoiceText, null)); } } // 写入完整的选项列表 item.setChoices(finalChoices);
注意事项
- 禁止直接将
getChoices()返回的原生Choice对象直接传入setChoices的参数列表,这类原生对象上的扩展配置(关联图片、表单跳转规则)不会被API在覆写操作中自动识别保留 - 如果原有选项配置了表单跳转逻辑,需要对应使用支持传入跳转参数的
createChoice重载方法,在重建Choice时同步绑定原有跳转规则,避免跳转配置丢失
内容的提问来源于stack exchange,提问作者Arthur Martens
相关产品推荐
相关产品推荐

