如何将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')); }
使用步骤
- 将
printFolderArray函数内的文件夹ID替换为你自己的目标主文件夹ID - 打开对应表格的Sheet3工作表,点击选中你要开始写入数据的起始单元格
- 运行
printFolderArray函数,首次运行按照弹窗提示完成权限授权即可正常输出数据。
内容的提问来源于stack exchange,提问作者Miyer
相关产品推荐
相关产品推荐

