如何将Google Form双上传区文件分别存入按提交者命名的Google Drive文件夹
Google Form双文件上传区分类存储脚本修改方案
修改说明
原有脚本存在两个问题:
- 仅适配单个文件上传区的存储逻辑,未覆盖第二个上传区
- 同名提交者的文件夹编号规则未实现,仅判断文件夹是否存在未生成带后缀的命名
前置准备
先确认你的Google Form字段顺序(从第一个问题开始计数,下标从0开始):
- 姓名字段的下标
- 第一个文件上传区的下标
- 第二个文件上传区的下标
再提前创建两个顶级文件夹,分别对应两个上传区的根存储目录,获取它们的文件夹ID。
修改后完整脚本
// 配置常量,请替换为你自己的参数 const NAME_ITEM_INDEX = 0; // 姓名字段的下标 const UPLOAD1_ITEM_INDEX = 2; // 第一个文件上传区的下标 const UPLOAD1_TOP_FOLDER_ID = "1y40PNXYXSm7Ue_b6nbVnauz7dzKiKj4u"; // 第一个上传区对应的顶级文件夹ID const UPLOAD2_ITEM_INDEX = 3; // 第二个文件上传区的下标,按你实际表单调整 const UPLOAD2_TOP_FOLDER_ID = "替换为第二个上传区对应的顶级文件夹ID"; function onFormSubmit(e) { const form = FormApp.getActiveForm(); const formResponses = form.getResponses(); const itemResponses = formResponses[formResponses.length - 1].getItemResponses(); // 获取提交者姓名 const submitterName = itemResponses[NAME_ITEM_INDEX].getResponse().toString().trim(); // 处理第一个上传区的文件存储 const upload1Folder = getTargetFolder(UPLOAD1_TOP_FOLDER_ID, submitterName); itemResponses[UPLOAD1_ITEM_INDEX].getResponse().forEach(fileId => { DriveApp.getFileById(fileId).moveTo(upload1Folder); }); // 处理第二个上传区的文件存储 const upload2Folder = getTargetFolder(UPLOAD2_TOP_FOLDER_ID, submitterName); itemResponses[UPLOAD2_ITEM_INDEX].getResponse().forEach(fileId => { DriveApp.getFileById(fileId).moveTo(upload2Folder); }); } // 辅助函数:生成符合命名规则的目标文件夹 function getTargetFolder(topFolderId, baseName) { const topFolder = DriveApp.getFolderById(topFolderId); // 查找所有前缀匹配的文件夹 const existingFolders = topFolder.getFolders(); let maxSuffix = 0; while (existingFolders.hasNext()) { const folder = existingFolders.next(); const folderName = folder.getName(); if (folderName === baseName) { maxSuffix = Math.max(maxSuffix, 1); } else if (folderName.startsWith(`${baseName}_`)) { const suffix = parseInt(folderName.split("_")[1], 10); if (!isNaN(suffix)) { maxSuffix = Math.max(maxSuffix, suffix + 1); } } } // 生成最终文件夹名 const finalFolderName = maxSuffix === 0 ? baseName : `${baseName}_${maxSuffix}`; return topFolder.createFolder(finalFolderName); }
部署说明
- 替换脚本开头的4个配置常量为你自己的实际参数
- 保存脚本后,在Apps Script编辑器的「触发器」页面,添加新触发器:
- 选择要运行的函数:
onFormSubmit - 选择事件来源:
表单 - 选择事件类型:
表单提交时
- 选择要运行的函数:
- 首次运行会请求权限,按照提示授权即可。
内容的提问来源于stack exchange,提问作者Learning Ahh
相关产品推荐
相关产品推荐

