如何修改谷歌表单脚本 将Google Drive存储文件夹命名为受访者姓名字段
Google表单自动转存上传文件自定义子文件夹名方案
修改后完整代码
// 替换为你自己的目标Google Drive父文件夹ID const PARENT_FOLDER_ID = "2ih2384723847234878h23jkbi2j3b4ijb23i4bhwed34f"; // 替换为你表单里姓名字段的精确标题,要和表单里的问题文本完全一致 const NAME_FIELD_TITLE = "姓名(First Name_Last Name)"; const initialize = () => { const form = FormApp.getActiveForm(); ScriptApp.newTrigger("onFormSubmit").forForm(form).onFormSubmit().create(); }; const onFormSubmit = ({ response } = {}) => { try { // 提取当前提交的所有上传文件ID const files = response .getItemResponses() // 只筛选文件上传类问题的回答 .filter( (itemResponse) => itemResponse.getItem().getType().toString() === "FILE_UPLOAD" ) .map((itemResponse) => itemResponse.getResponse()) // 展平文件ID数组 .reduce((a, b) => [...a, ...b], []); if (files.length > 0) { // 提取受访者填写的姓名作为子文件夹名 let subfolderName = response.getItemResponses() .filter(itemResponse => itemResponse.getItem().getTitle() === NAME_FIELD_TITLE) .map(itemResponse => itemResponse.getResponse())[0]; // 容错处理:如果没取到姓名就 fallback 用响应ID if(!subfolderName) subfolderName = response.getId(); const parentFolder = DriveApp.getFolderById(PARENT_FOLDER_ID); // 重名处理:如果已有同名文件夹,加时间戳后缀避免冲突 const existingFolders = parentFolder.getFoldersByName(subfolderName); if(existingFolders.hasNext()) { subfolderName = `${subfolderName}_${new Date().getTime()}`; } const subfolder = parentFolder.createFolder(subfolderName); // 转存所有上传文件到目标子文件夹 files.forEach((fileId) => { DriveApp.getFileById(fileId).moveTo(subfolder); }); } } catch (f) { Logger.log(f); } };
配置说明
- 先把代码里
PARENT_FOLDER_ID的值替换为你自己的Google Drive目标父文件夹ID,ID可以从文件夹的浏览器地址栏里提取 - 再把
NAME_FIELD_TITLE的值替换为你谷歌表单里姓名字段的精确标题,必须和你表单里设置的问题文本完全一致,包括标点、空格都不能有差异 - 新增了双重容错逻辑:如果没提取到姓名会自动 fallback 用原有的响应ID当文件夹名,如果出现重名会自动加时间戳后缀,不会出现创建文件夹失败的问题
- 部署方式和原来一致,运行一次
initialize函数授权触发即可使用
内容的提问来源于stack exchange,提问作者NOOR UL KARIM
相关产品推荐
相关产品推荐

