如何让Google表单多文件上传至Name字段命名的统一文件夹?
解决方案:按Name字段统一存放Google表单上传文件
你可以通过Google Apps Script实现这个需求,具体步骤如下:
1. 打开表单脚本编辑器
打开你的Google表单,点击右上角「扩展程序」→「Apps Script」,进入脚本编辑界面。
2. 编写处理脚本
替换默认的myFunction,粘贴以下代码:
function onFormSubmit(e) { // 提取表单提交的Name和所有上传文件ID const responses = e.response.getItemResponses(); let userName = ''; const uploadedFileIds = []; responses.forEach(itemResp => { const itemTitle = itemResp.getItem().getTitle(); if (itemTitle === 'Name') { userName = itemResp.getResponse().trim(); } else if (itemTitle.startsWith('File upload')) { const files = itemResp.getResponse(); if (files?.length) uploadedFileIds.push(...files); } }); // 若无Name或无上传文件,直接返回 if (!userName || !uploadedFileIds.length) return; // 获取表单默认的文件存储根文件夹 const formRootFolder = DriveApp.getFolderById(FormApp.getActiveForm().getDestinationId()); // 创建或获取对应Name的目标文件夹 let targetFolder; const existingFolders = formRootFolder.getFoldersByName(userName); targetFolder = existingFolders.hasNext() ? existingFolders.next() : formRootFolder.createFolder(userName); // 移动文件到目标文件夹并清理原字段子文件夹 uploadedFileIds.forEach(fileId => { const file = DriveApp.getFileById(fileId); const originalFolder = file.getParents().next(); // 移动文件 targetFolder.addFile(file); originalFolder.removeFile(file); // 删除空的原文件夹 if (!originalFolder.getFiles().hasNext() && !originalFolder.getFolders().hasNext()) { originalFolder.setTrashed(true); } }); }
3. 设置表单提交触发器
- 在脚本编辑器左侧点击「触发器」图标(闹钟样式)。
- 点击「添加触发器」,配置参数:
- 选择函数:
onFormSubmit - 事件源:「表单」
- 事件类型:「表单提交」
- 选择函数:
- 保存并完成权限授权(首次授权需确认允许脚本访问你的Google Drive和表单)
注意事项
- 确保表单中文件上传字段的标题以「File upload」开头(和代码中的匹配逻辑一致),如果你的字段标题有修改,需要同步调整代码中的判断条件。
- 若已存在同名文件夹,新上传的文件会直接存入该文件夹,不会重复创建。
- 原字段的子文件夹在文件移走后会被自动删除(仅当文件夹为空时)。
内容的提问来源于stack exchange,提问作者user5500328
相关产品推荐
相关产品推荐

