You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:45:03