如何使用Google Script将Google表单上传的多图插入Google幻灯片
实现结论
完全可以通过Google Apps Script实现该需求,不需要接入第三方工具。Google表单的文件上传题型本身支持单题多文件上传,所有上传的图片会自动存入你预设的Google Drive文件夹,表单提交的响应数据会携带全部上传图片的文件ID,搭配Slides服务即可适配1张、2张甚至更多张图片的自动插入、自动排版。
具体操作步骤
- 前置配置
先在Google表单中完成上传题设置:打开题目配置面板的「允许多个文件」开关,设置好文件存储的Drive路径,再将表单的响应目标绑定为新建的Google Sheets表格,后续脚本将从该表格读取上传文件的关联数据。 - 编写功能脚本
打开绑定好的响应Sheets表格,点击顶部菜单栏「扩展程序」-「Apps Script」进入脚本编辑器,清空默认的代码内容,粘贴下述代码,替换开头配置项里的参数为你自己的资源信息即可:
// 按需修改以下配置参数 const TARGET_SLIDES_ID = "替换为你要插入图片的Google幻灯片ID"; const UPLOAD_COL_INDEX = 3; // 上传题目在Sheets中的列号,A列为1、B列为2,按实际位置修改 const IMG_WIDTH = 320; // 单张插入图片的宽度,单位:像素 const IMG_HEIGHT = 210; // 单张插入图片的高度,单位:像素 const PAGE_MARGIN = 25; // 图片与幻灯片边缘、图片之间的边距,单位:像素 // 表单提交触发函数 function insertUploadImgsToSlides(e) { // 读取当前提交记录中的上传文件ID,多文件ID为逗号分隔的字符串 const fileIdStr = e.values[UPLOAD_COL_INDEX - 1]; // 拆分ID为数组,自动适配任意上传数量 const imgFileIds = fileIdStr.split(',').map(id => id.trim()); const slides = SlidesApp.openById(TARGET_SLIDES_ID); // 新建空白幻灯片承载当前提交的所有图片 const currentSlide = slides.appendSlide(SlidesApp.PredefinedLayout.BLANK); const slidePageWidth = slides.getPageWidth(); // 初始化排版坐标 let posX = PAGE_MARGIN; let posY = PAGE_MARGIN; imgFileIds.forEach(fileId => { const file = DriveApp.getFileById(fileId); // 过滤非图片格式文件,避免插入报错 if (!file.getMimeType().startsWith('image/')) return; // 插入图片并设置尺寸 const insertedImg = currentSlide.insertImage(file); insertedImg.setWidth(IMG_WIDTH).setHeight(IMG_HEIGHT); // 自动换行排版:当前行剩余空间不足时切换到下一行 if (posX + IMG_WIDTH + PAGE_MARGIN > slidePageWidth) { posX = PAGE_MARGIN; posY += IMG_HEIGHT + PAGE_MARGIN; } // 设置图片位置 insertedImg.setLeft(posX).setTop(posY); posX += IMG_WIDTH + PAGE_MARGIN; }); }
- 配置提交触发器
在脚本编辑器左侧栏选择「触发器」选项,点击「添加触发器」:触发函数选择insertUploadImgsToSlides,部署类型选「Head」,事件源选择「来自电子表格」,事件类型选择「提交表单时」,保存后按弹窗提示完成账号授权即可。
适配说明
- 授权时会弹出Google官方的安全验证提示,按流程授予脚本Sheets、Drive、Slides的操作权限即可,脚本全程运行在你个人的Google账号空间内,不会外传数据。
- 如果单次上传图片量极大,可在循环逻辑中加分页判断,当Y轴坐标超过幻灯片高度时自动新建空白页继续插入,不会出现图片溢出页面的问题。
- 不需要每次提交新建幻灯片的话,可以删掉新建页面的代码,指定固定页面ID插入即可。
内容的提问来源于stack exchange,提问作者fj_gie
相关产品推荐
相关产品推荐

