В зависимости от того, как они работают с вашим Диском, есть 2 способа:
Способ # 1
DriveApp.getFoldersByName("your folder").next().getId();
Таким образом, вы находите свою папку черезвсе ваши файлы.
Way # 2
DriveApp.getFolderById("id for folder0")
.getFoldersByName("folder1").next()
.getFoldersByName("folder2").next()
//...
.getId()
Здесь код может выполняться медленнее в зависимости от количества файлов и серверов Google.Я рекомендую вам попробовать оба варианта и проверить, является ли производительность проблемой.Способ № 2 всегда возвращает только 1 результат, даже если строка projectID не является уникальной.Однако строка вашего пути не должна содержать ошибок.
При текущем коде для пути № 2 возможная ошибка состоит в том, что у вас будет две папки с одинаковым именем, а путь № 2 не будет использоваться по умолчанию дляправильный.
Код для обоих способов
function onOpen() { // this is so you can run it from a Spreadsheet menu
SpreadsheetApp.getUi()
.createMenu("Deepest file")
.addItem("easyNameFinder", "easyNameFinder") // Way #1
.addItem("pathFinder", "pathFinder") // Way #2
.addToUi();
}
function easyNameFinder() { // Way #1
var name = SpreadsheetApp.getCurrentCell().getValue();
var folderList = []
var folders = DriveApp.getFoldersByName(name);
while (folders.hasNext()) {// in case name is not unique
var folder = folders.next();
folderList.push(folder.getId() + " in " + folder.getParents().next().getName());
}
var id = "See below the " + folderList.length + " folder match(es) for " + name + "\n" + folderList.join("\n");
Logger.log(id); // view logs with Ctrl + Enter
SpreadsheetApp.getUi().alert(id); // an alert will appear on the active sheet
}
function pathIterator(query, folder) { // The loop for Way #2
var folders = folder.getFoldersByName(query)
if (folders.hasNext()) { // unfortunately, there could be more than one child folder with a given name. If that is the case, you will run into problems.
var folder = folders.next();
var name = folder.getName();
Logger.log(name) // view logs with Ctrl + Enter in the Script editor
if (folder) {
Logger.log("we just found " + name + "!\n")
return folder
};
} else return null;
}
function pathFinder() { // Way #2: main function
var string = SpreadsheetApp.getCurrentCell().getValue();
var array = string.split("\\")
Logger.log(array);
var mother = 'YOUR-PARENT-FILE-ID-HERE';
var mainFolder = DriveApp.getFolderById(mother);
var folder = mainFolder;
var error;
array.forEach(function(value) {
var recursion = pathIterator(value, folder)
if (recursion) {folder = recursion}
else {
error = "Could not find folder \"" + value + "\" in " + folder
Logger.log(error)
SpreadsheetApp.getUi().alert(error);}
})
if (error) {
return; // skipping the code below if some folder went unfound
}
var displayString = folder.getId() + "\nis the Id for the folder " + '"' + folder.getName() + '"'
Logger.log(displayString); // view logs with Ctrl + Enter
SpreadsheetApp.getUi().alert(displayString); // an alert will appear on the active sheet
}
Производительность через мои собственные 100 папок:
- Способ № 1 (easyNameFinder): 0,495 секунд
- Способ № 2 (pathFinder): 1,091 секунд