Google Scripts处理Google Forms如何获取题目内嵌的图片及媒体资源
解决方案
首先明确:谷歌表单官方的FormApp基础服务目前没有暴露题目内嵌媒体的读写接口,你可以通过启用高级Google Forms服务实现需求,不需要将媒体和题目拆分为两个独立条目,具体实现步骤如下:
1. 启用高级服务
打开你的脚本编辑器,在左侧菜单栏点击「服务」,找到「Google Forms API」,点击添加即可启用。
提示:高级Google Forms服务是谷歌官方对Form REST API的封装,不需要额外申请开发者密钥,只要在脚本内启用即可使用,无额外使用成本。
2. 代码改造示例
你可以参考如下逻辑修改原有代码,以多选题为例:
// 先获取表单B的ID,用Forms API拉取所有题目的完整信息(包含内嵌媒体) const formBId = "你的表单B的ID"; const formBFullInfo = Forms.Forms.get(formBId, {fields: "items"}); const formBItemsMap = {}; // 把表单B的条目ID和完整信息做映射,方便后续匹配 formBFullInfo.items.forEach(item => { formBItemsMap[item.itemId] = item; }); for (var i = 0; i < questions.length; i++){ var q = questions[i]; var type = q.getType().toString(); // 拿到当前题目的API侧完整信息 const qFullInfo = formBItemsMap[q.getId()]; if (type == FormApp.ItemType.MULTIPLE_CHOICE){ var qEl = q.asMultipleChoiceItem(); var item = form.addMultipleChoiceItem(); // 原有属性设置逻辑保留 item.setTitle(qEl.getTitle()) .setChoices(qEl.getChoices()) .setRequired(qEl.isRequired()) .showOtherOption(qEl.hasOtherOption()) .setHelpText(qEl.getHelpText()); // 新增:判断是否有内嵌媒体,有就绑定到新题目 if (qFullInfo.mediaItem) { const newItemId = item.getId(); // 调用Forms API更新新题目,绑定媒体资源 Forms.Forms.batchUpdate({ requests: [{ updateItem: { itemId: newItemId, item: { mediaItem: qFullInfo.mediaItem }, updateMask: "mediaItem" } }] }, form.getId()); // form是你的表单A实例 } } // 其他题型的处理逻辑同理,都可以复用上面的媒体绑定代码 }
注意事项
- 操作账号需要同时拥有表单A和表单B的编辑权限,才能正常访问和复制媒体资源
- 视频类内嵌资源的绑定逻辑和图片完全一致,不需要额外调整代码
- 如果不想启用高级服务,暂时没有其他原生方案,只能暂时使用你提到的拆分媒体条目和题目的替代方案
内容的提问来源于stack exchange,提问作者Piero Impicciatore
相关产品推荐
相关产品推荐

