修改共享盘Google Script以获取指定文件夹内容并解决参数过大报错
解决Google Script遍历共享盘数据量过大的报错问题
方案1:仅遍历指定目标文件夹(含子文件夹)
原脚本大概率误遍历了整个共享盘,修改后仅从你指定的目标文件夹开始遍历,严格限定范围:
function listFolderContents() { // 替换为你的目标文件夹ID const targetFolderId = "YOUR_TARGET_FOLDER_ID"; const targetFolder = DriveApp.getFolderById(targetFolderId); const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); sheet.clear(); sheet.appendRow(["名称", "类型", "链接"]); // 仅遍历目标文件夹及其子文件夹 traverseFolder(targetFolder, sheet); } function traverseFolder(folder, sheet) { // 遍历当前文件夹下的文件 const files = folder.getFiles(); while (files.hasNext()) { const file = files.next(); sheet.appendRow([file.getName(), "文件", file.getUrl()]); } // 遍历当前文件夹下的子文件夹并递归处理 const subFolders = folder.getFolders(); while (subFolders.hasNext()) { const subFolder = subFolders.next(); sheet.appendRow([subFolder.getName(), "文件夹", subFolder.getUrl()]); traverseFolder(subFolder, sheet); } }
关键修改点:
- 通过
getFolderById直接定位目标文件夹,避免遍历整个共享盘 - 递归逻辑仅在目标文件夹的层级内执行,不会扩散到无关目录
方案2:仅返回文件夹名称(忽略文件)
如果只需要文件夹列表,完全跳过文件遍历,直接削减数据量:
function listOnlyFolders() { // 替换为你的目标文件夹ID const targetFolderId = "YOUR_TARGET_FOLDER_ID"; const targetFolder = DriveApp.getFolderById(targetFolderId); const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); sheet.clear(); sheet.appendRow(["文件夹名称", "文件夹链接"]); traverseOnlyFolders(targetFolder, sheet); } function traverseOnlyFolders(folder, sheet) { // 记录当前文件夹 sheet.appendRow([folder.getName(), folder.getUrl()]); // 递归遍历子文件夹 const subFolders = folder.getFolders(); while (subFolders.hasNext()) { const subFolder = subFolders.next(); traverseOnlyFolders(subFolder, sheet); } }
关键修改点:
- 移除所有文件处理逻辑,仅保留文件夹的遍历与记录
- 同样严格限定在目标文件夹范围内操作
注意事项
- 将代码中的
YOUR_TARGET_FOLDER_ID替换为实际的文件夹ID(可从文件夹URL末尾提取) - 若目标文件夹层级极深、子文件夹数量仍超出限制,可添加递归深度判断(比如设置最大遍历层级)
内容的提问来源于stack exchange,提问作者RoosterMagic22
相关产品推荐
相关产品推荐

