Я знаю, что этот вопрос задавался ранее, но я пытаюсь немного углубиться в проблему. У меня есть этот скрипт скрипт приложения, который я взял в Интернете, и я использую его в электронной таблице Google, чтобы сканировать список папок.
Короче говоря, у меня есть (общая) структура папок с вероятностью более 1000 подпапок, которые содержат подпапки, которая выглядит примерно так:
ГЛАВНАЯ ПАПКА
ПАПКА 1
- ФАЙЛ 1.1
- ПОДПИСАТЕЛЬ 1.A
- СУБФИЛЬ 1.A.2
- СУБФИЛЬ 1.А.3
ПАПКА 2
- ФАЙЛ 2.1
- ПОДЛОЖКА 2.А
- SUBFILE 2.A.2
- SUBFILE 2.A.3
ПАПКА 3
- ФАЙЛ 3.1
- ПОДПИСАТЕЛЬ 3.A
- СУБФИЛЬ 3.A.2
- СУБФИЛЬ 3.А.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()
}