Google Apps Script 多层嵌套文件夹创建问题
修改方案
原代码无法生成四级路径的核心原因:原有辅助函数仅支持单级文件夹的查找创建,调用时传入的年份参数没有被函数接收处理,完全没有生成上层年份、员工类型文件夹的逻辑。
修改后的代码会逐层递进创建四级路径,同时保留原有旧index.html清理逻辑,可直接运行:
// 按需修改这两个固定配置项 const ROOT_FOLDER_ID = '1Xsl2r_RPgqQ1i8K3aF23hov82JmNFySu'; const EMPLOYEE_TYPE_FOLDER_NAME = 'Driver'; function driverPages() { const ss = SpreadsheetApp.getActive(); const sh = ss.getActiveSheet(); // 按表格实际列位修改范围:示例读取从第16列(P列)开始共3列,顺序为【年份、员工姓名、html文件内容】 // 如果你的年份存在其他列,对应调整getRange的第二个参数(起始列号)、第三个参数(读取列数)即可 const dataRg = sh.getRange(2, 16, sh.getLastRow() - 1, 3); const validRows = dataRg.getValues().filter(row => row.every(cell => cell.toString().trim() !== '')); validRows.forEach(row => { const [year, empName, htmlContent] = row; // 逐层创建/获取四级路径 const yearFolder = getOrCreateFolderById(ROOT_FOLDER_ID, year); const typeFolder = getOrCreateFolderById(yearFolder.getId(), EMPLOYEE_TYPE_FOLDER_NAME); const empFolder = getOrCreateFolderById(typeFolder.getId(), empName); // 清理当前员工文件夹下旧的index.html const oldIndexFiles = empFolder.getFilesByName('index.html'); while (oldIndexFiles.hasNext()) { oldIndexFiles.next().setTrashed(true); } // 生成新的index.html empFolder.createFile('index.html', htmlContent); }); } // 通用工具方法:在指定父文件夹下查找目标名称文件夹,不存在则新建,返回文件夹对象 function getOrCreateFolderById(parentId, folderName) { const parentFolder = DriveApp.getFolderById(parentId); const matchFolders = parentFolder.getFoldersByName(folderName); return matchFolders.hasNext() ? matchFolders.next() : parentFolder.createFolder(folderName); }
注意事项
- 如果不需要从单元格读取年份,要使用固定年份值,直接把读取范围改回原代码的
sh.getRange(2, 17, sh.getLastRow()-1, 2),forEach里把year替换成固定年份字符串即可 - 固定配置项统一放在代码最顶部,后续要改根目录、员工类型名称直接改顶部常量即可,不需要动业务逻辑
- 文件夹查找逻辑默认取第一个匹配名称的文件夹,和原代码逻辑保持一致,不会重复创建同名文件夹
内容的提问来源于stack exchange,提问作者Nathan Taylor
相关产品推荐
相关产品推荐

