求助:Google Apps Script获取子文件夹ID时folder.getId()报undefined错误
问题:Google Apps Script获取子文件夹ID时出现undefined错误
我拥有一个主文件夹及若干子文件夹,希望获取每个子文件夹的名称与ID,编写了如下代码:
const ROOT_FOLDER = DriveApp.getFolderById(folderId); const FOLDERS = ROOT_FOLDER.getFolders(); const FOLDERS_NAMES = [ROOT_FOLDER.getName()]; //get child folders names while (FOLDERS.hasNext()) { var folder = FOLDERS.next(); var folderName = folder.getName(); FOLDERS_NAMES.push(folderName); } //get child folders IDs const FOLDERS_IDS = []; while (FOLDERS.hasNext()) { var folder = FOLDERS.next(); var folderID = folder.getId(); FOLDERS_IDS.push(folderID); }
其中获取子文件夹名称的while循环运行正常,但获取ID的循环中,folder.getId()出现undefined错误,不清楚错误原因,寻求技术帮助。
解决方案
错误原因
ROOT_FOLDER.getFolders()返回的是FolderIterator(文件夹迭代器),这类迭代器是单向且一次性的:一旦通过next()遍历完所有元素,迭代器就会进入“耗尽”状态,无法重新开始遍历。
你的第一个while循环已经把迭代器中的所有子文件夹都遍历完毕,第二个while循环中FOLDERS.hasNext()会直接返回false,循环体根本不会执行。如果在迭代器耗尽后强行调用next(),会导致获取不到有效的Folder对象,进而调用getId()时出现undefined错误。
修复代码
只需要遍历一次迭代器,同时收集子文件夹的名称和ID即可:
const ROOT_FOLDER = DriveApp.getFolderById(folderId); const FOLDERS = ROOT_FOLDER.getFolders(); const FOLDERS_NAMES = [ROOT_FOLDER.getName()]; const FOLDERS_IDS = [ROOT_FOLDER.getId()]; // 若不需要主文件夹ID可移除这行 // 单次遍历同时收集名称与ID while (FOLDERS.hasNext()) { const folder = FOLDERS.next(); FOLDERS_NAMES.push(folder.getName()); FOLDERS_IDS.push(folder.getId()); }
这样既避免了迭代器耗尽的问题,也提升了代码效率,不需要重复遍历文件夹列表。
内容的提问来源于stack exchange,提问作者mthgn
相关产品推荐
相关产品推荐

