Google Sheet脚本如何将childFolderId从子文件夹while循环传递到文件遍历循环
解决方案
你不需要调整现有循环的位置,你需要的childFolderId就是当前递归层级中入参parent的ID——因为递归调用时,子文件夹会作为新的parent传入函数,当前层级搜索到的所有文件都属于这个parent文件夹,直接调用parent.getId()即可获取对应ID。
你之前将fileIter循环放到childFolders循环内部没有输出,是因为如果当前文件夹没有子文件夹,childFolders循环不会执行,当前文件夹的文件遍历逻辑也不会触发,导致文件被漏统计。
修改后的完整代码
function getChildFiles(parentName, parent, sheet) { var fileIter = parent.searchFiles("title contains 'completed'and title contains 'Verification Visit Direct Suppliers'and mimeType='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'"); var output = []; var childFolders = parent.getFolders(); while (childFolders.hasNext()) { var childFolder = childFolders.next(); var childFolderName = childFolder.getName(); getChildFiles( parentName + ' |--> ' + childFolderName, childFolder,sheet ); } while (fileIter.hasNext()) { var file = fileIter.next(); var fileName = file.getName(); var fileID = file.getId(); var folderId = parent.getId(); // 新增:获取当前文件所属文件夹ID var path = parentName + ' |--> ' + fileName; // 新增一列存储所属文件夹ID output.push([fileID, fileName, path, folderId]); } if (output.length) { var last_row = sheet.getLastRow(); // 列数从3改为4,匹配新增的文件夹ID列 sheet.getRange(last_row + 1, 1, output.length, 4).setValues(output); SpreadsheetApp.flush(); } }
补充说明
如果不需要存储顶级父文件夹的ID,只需要存子文件夹的ID,可以在函数中新增一个入参标记是否为根目录,判断后再写入对应值即可,原有过滤逻辑完全不受影响。
内容的提问来源于stack exchange,提问作者Vishnu Kumaran
相关产品推荐
相关产品推荐

