Google Forms按姓名创建文件夹:代码报错及命名规则修改求助
解决方案
修正后的代码
function onFormSubmit(e) { const folderId = "12NjqFgiGLf***************"; // 请设置目标文件夹的顶级ID const form = FormApp.getActiveForm(); const formResponses = form.getResponses(); const itemResponses = formResponses[formResponses.length-1].getItemResponses(); Utilities.sleep(3000); // 这行可能不需要 // 准备文件夹 const destFolder = DriveApp.getFolderById(folderId); // 获取First Name和Last Name字段的值 const firstName = itemResponses[1].getResponse(); const lastName = itemResponses[2].getResponse(); let folderName = `${lastName}, ${firstName}`; // 按要求格式命名文件夹 // 搜索现有同名或带序号的文件夹 const subFolder = destFolder.searchFolders(`title contains '${folderName}'`); // 正则表达式匹配原名称或原名称_两位数字的格式 const reg = new RegExp(`^${folderName}$|^${folderName}_\\d{2}$`); if (subFolder.hasNext()) { const folderNames = {}; while (subFolder.hasNext()) { const fol = subFolder.next(); const fName = fol.getName(); if (reg.test(fName)) folderNames[fName] = fol; } const len = Object.keys(folderNames).length; if (len === 1 && folderNames[folderName]) { folderNames[folderName].setName(`${folderName}_01`); } folderName += `_${("00" + (len + 1)).slice(-2)}`; } const folder = destFolder.createFolder(folderName); // 获取所有上传文件的ID const fileUploads = itemResponses.filter((itemResponse) => itemResponse.getItem().getType().toString() === "FILE_UPLOAD" ) .map((itemResponse) => itemResponse.getResponse()) .reduce((a, b) => [...a, ...b], []); // 将文件移动到新建文件夹 fileUploads.forEach(id => DriveApp.getFileById(id).moveTo(folder)); }
关键修改说明
- 文件夹名称生成:
- 从表单响应中正确提取
First Name(索引1)和Last Name(索引2)的值,按"Last Name, First Name"格式拼接成文件夹名称。
- 从表单响应中正确提取
- 正则表达式更新:
- 调整正则规则以匹配新的命名格式,确保能识别原始名称(如
"Smith, Alice")和带序号的变体(如"Smith, Alice_01")。
- 调整正则规则以匹配新的命名格式,确保能识别原始名称(如
- 序号逻辑适配:
- 保持原有的自动序号功能,当同一用户多次提交时,会自动生成带两位序号的文件夹名称,避免重复。
额外优化建议(可选)
原代码通过form.getResponses()获取最后一条响应,效率较低且可能在高并发场景下出错。建议直接使用触发器事件对象e来获取当前提交的响应,修改如下:
// 替换原代码中获取itemResponses的部分 const itemResponses = e.response.getItemResponses();
这样不仅更高效,还能准确获取当前触发的提交数据,避免因其他用户同时提交导致的错误。
内容的提问来源于stack exchange,提问作者Roger Mejia
相关产品推荐
相关产品推荐

