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

如何将Google Drive子文件夹名称及URL导入Google Sheets并修复脚本问题

问题说明

需要将Google Drive主文件夹内的所有子文件夹(不包含文件)的名称和对应访问URL导入到Google Sheets表格中,自行编写的代码运行后无输出。

代码问题分析

原有代码的核心错误为循环判断条件调用对象错误:

  • 你通过folder.getFolders()获取了子文件夹迭代器,存储在变量Folders中,但while循环里写的是folder.hasNext(),folder是传入ID的主文件夹实例,本身没有hasNext()方法,只有迭代器Folders才有该方法判断是否还有未遍历的子文件夹,因此循环不会执行,自然没有数据返回。
  • 额外隐藏问题:如果主文件夹下没有子文件夹,返回的数组为空,原有输出函数调用twoDimArr[0]会抛出索引不存在的错误,需要补充空值判断。
修正后可用代码
// 绑定表格的Sheet3工作表,可根据你的实际表名修改
var SS = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet3");

function getFolderArray(folderId){
  var folder = DriveApp.getFolderById(folderId);
  var childFolders = folder.getFolders();
  var folderList = [];
  
  // 遍历所有子文件夹,收集名称和URL
  while (childFolders.hasNext()){ 
    var currentFolder = childFolders.next();
    var folderName = currentFolder.getName();    
    var folderUrl = currentFolder.getUrl();
    folderList.push([folderName, folderUrl]);
  }
  return folderList
}

// 从当前选中的单元格开始写入数据
function printArrayToSelection(twoDimArr){  
  // 没有子文件夹数据直接退出,避免报错
  if(!twoDimArr || twoDimArr.length === 0) return
  var firstCell = SS.getActiveCell();
  var lastCell = firstCell.offset(twoDimArr.length - 1, twoDimArr[0].length - 1);
  var destinationRange = SS.getRange(firstCell.getA1Notation() + ':' + lastCell.getA1Notation());
  destinationRange.setValues(twoDimArr);
}

// 执行数据写入操作
function printFolderArray(){
  // 替换引号内的ID为你自己的目标主文件夹ID即可
  printArrayToSelection(getFolderArray('0B4-wws2P3gUhcExqWEI0VTlrNm8'));
}
使用步骤
  1. 将printFolderArray函数内的文件夹ID替换为你自己的目标主文件夹ID
  2. 打开对应表格的Sheet3工作表,点击选中你要开始写入数据的起始单元格
  3. 运行printFolderArray函数,首次运行按照弹窗提示完成权限授权即可正常输出数据。

内容的提问来源于stack exchange,提问作者Miyer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:15:03