如何修改Google Apps Script以支持Google表单单问题多文件提交处理?
Google Apps Script 适配表单多文件提交的修改方案
需求回顾
Google表单包含4个问题:
- 公司名称
- 提交公司Logo(支持多文件)
- 提交公司照片(支持多文件)
- 提交公司视频(支持多文件)
表单收到响应时,需完成以下操作:
- 将问题2-4的所有文件重命名为「公司名_文件类型」,同一问题有多份文件时追加序号(如
CompanyName_Logo_1、CompanyName_Logo_2) - 在指定Drive父文件夹下创建以公司名命名的子文件夹,将所有文件移入该文件夹
原代码仅支持单问题单文件提交,以下是适配多文件场景的修改方案:
修改后的完整代码
function onFormSubmit(e) { const responses = e.values; const companyName = responses[1].trim(); // 拆分每个问题的多文件URL,处理空响应的情况 const logoUrls = responses[2] ? responses[2].split(',').map(url => url.trim()) : []; const photoUrls = responses[3] ? responses[3].split(',').map(url => url.trim()) : []; const videoUrls = responses[4] ? responses[4].split(',').map(url => url.trim()) : []; const parentFolderId = 'paste-parent-folder-id-here'; const parentFolder = DriveApp.getFolderById(parentFolderId); let companyFolder; // 处理文件夹已存在的情况(避免重复提交时创建重复文件夹) try { companyFolder = parentFolder.getFoldersByName(companyName).next(); } catch (e) { companyFolder = parentFolder.createFolder(companyName); } /** * 批量移动并重命名文件 * @param {Array} urls - 文件URL数组 * @param {String} fileType - 文件类型标识(Logo/Photo/Video) */ function batchMoveAndRenameFiles(urls, fileType) { urls.forEach((url, index) => { try { const fileId = extractFileId(url); if (fileId) { Logger.log(`处理文件ID: ${fileId}`); const file = DriveApp.getFileById(fileId); // 生成文件名:单文件不加序号,多文件追加序号 const newName = urls.length === 1 ? `${companyName}_${fileType}` : `${companyName}_${fileType}_${index + 1}`; file.setName(newName); file.moveTo(companyFolder); } } catch (error) { Logger.log(`处理URL ${url} 出错: ${error.message}`); } }); } // 分别处理三类文件 batchMoveAndRenameFiles(logoUrls, 'Logo'); batchMoveAndRenameFiles(photoUrls, 'Photo'); batchMoveAndRenameFiles(videoUrls, 'Video'); } /** * 从Google表单文件URL中提取文件ID * @param {String} url - 表单返回的文件URL * @returns {String|null} 文件ID或null */ function extractFileId(url) { if (!url) return null; // 适配两种常见的文件URL格式:?id=xxx 或 /d/xxx/ const idMatch = url.match(/[-\w]{25,}/); return idMatch ? idMatch[0] : null; }
关键修改说明
- 多文件URL拆分:表单多文件提交时,响应字段会以逗号分隔多个URL,通过
split(',')拆分并去除空格,得到单个URL的数组 - 批量处理逻辑:新增
batchMoveAndRenameFiles函数,遍历每个问题的文件URL数组,根据文件数量决定是否追加序号 - 文件夹重复处理:添加了文件夹存在性检查,避免同一公司重复提交时创建多个同名文件夹
- 文件ID提取优化:修改
extractFileId函数,通过正则匹配适配Google Drive文件的两种常见URL格式,比原有的拆分方式更可靠 - 错误处理增强:针对每个文件单独捕获错误,避免单个文件处理失败导致整个流程中断
内容的提问来源于stack exchange,提问作者JiEun Kim
相关产品推荐
相关产品推荐

