我知道之前曾有人问过这个问题,但我想在这个问题上做得更深一些。我已经将此应用程序脚本代码在线上获取,并且正在Google电子表格中使用它来扫描文件夹列表。
简而言之,我有一个(共享的)文件夹结构,最有可能超过1000个子文件夹,其中包含子子文件夹,看起来像这样:
主文件夹
文件夹1
文件夹2
文件夹3
我正在尝试修复2件事: 1)我的功能在运行时明显中断,因为文件夹和文件太多。我不认为这是由于电子表格中行数的限制。因此,理想情况下,我将必须在主文件夹中手动批处理200个文件夹,运行该函数,然后重新进行迭代。是否有任何提示如何避免这种情况,以及如何潜在地将临时结果转储到第一个电子表格中,如果存在缓存问题,则创建一个新的电子表格?
2)我无法检索子文件夹的详细信息及其包含的文件的详细信息。任何人都可以帮助修改代码以更深入地了解文件夹层次结构吗?我这里需要某种循环功能吗?
使用下面提供的代码,我已经使用和测试了几次,我只能检索文件夹1,2、3和文件1.1、2.1、3.1 ...,但不能检索子文件夹或子文件。
修复此功能,将节省我数周的手工工作。欢迎任何帮助。在此先感谢您的帮助。
function getAndListFilesInFolder() {
var arr,f,file,folderName,subFolders,id,mainFolder,name,own,sh,thisSubFolder,url;
sh = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
sh.getRange(1, 1, 100, 10).clear({contentsOnly: true})
id = "FOLDER ID HERE";
arr = [["FILE NAME", "URLs", "OWNER","FOLDER"]];
mainFolder = DriveApp.getFolderById(id);
subFolders = mainFolder.getFolders();
folderName = mainFolder.getName();
f = mainFolder.getFiles();
while (f.hasNext()) {
file = f.next();
name = file.getName()
url = file.getUrl()
own = file.getOwner().getName()
arr.push([name, url, own, folderName]);
};
while (subFolders.hasNext()) {
thisSubFolder = subFolders.next();
f = thisSubFolder.getFiles();
folderName = thisSubFolder.getName();
while (f.hasNext()) {
file = f.next();
name = file.getName()
url = file.getUrl()
own = file.getOwner().getName()
arr.push([name, url, own,folderName]);
};
};
sh.getRange(1,1, arr.length, arr[0].length).setValues(arr);
sh.getRange(2,1, arr.length, arr[0].length).sort(1);
//var second = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2")
//second.activate()
}
答案 0 :(得分:0)
之所以看不到任何子文件夹,是因为您实际上并没有在任何时候将它们添加到数组(arr)中。
您真正需要的是编写一个递归函数,该函数接收一个文件夹并返回自身以及数组中文件的详细信息。遇到文件夹时,会将那个文件夹传递回相同的功能。
研究递归和递归函数。
这是一个可以扩展的简短示例,由于我将其写在脑海中,因此需要进行一些调整:
ComboWidget