Возвращая полную папку путь активной электронной таблицы
-
22-12-2019 - |
Вопрос
У меня есть электронная таблица, которая находится в структуре общей папки. Эта структура общей папки передается среди 3-9 человек в любой момент времени. Теперь сама структура папки постоянна на любом из Google народа. Но «корня» структуры может быть размещена по-разному в зависимости от предпочтений человека. (Я надеюсь, что это имеет смысл.)
Пример:
Folder that is shared: RootFolder
Folder structure of RootFolder: RootFolder>First_Level_Folder>Second_Level_Folder>Third_Level_Folder
Spreadsheet that this question pertains to: SS_
Where SS_ resides in: Second_Level_Folder
People that are collaborating: P1 P2 P3 P4 P5
.
Теперь, rootfolder и все его содержание делятся среди людей. Они могут разместить rootfolder (общий) в любом месте их соответствующих дисков Google.
Пример:
P1: P1Root>P1First_Folder>RootFolder
P2: P2Root>RootFolder
P3: P3Root>P3First_Folder>P3Second_Folder>RootFolder
P4: P4Root>P4First_Folder>RootFolder
.
Так что, если скрипт прикреплен к SS_, и он должен «смотреть другую электронную таблицу» в той же папке, что и SS_, мне нужно знать полный путь папки SS_. Этот путь папки будет уникален для разных людей. (P1, P2, P3 и т. Д.)
Так мой вопрос, могу ли я узнать путь папки SS_ через скрипт ..? Таким образом, каждый раз, когда любой человек запускает скрипт, путь будет «правильным» для них, а остальная часть процесса не будет затруднена?
Я пытался искать функцию типа getFolderPath(spreadsheet)
, но не повезло.
Решение
Вам не нужен полный путь папки, если вам просто нужно поискать на непосредственной родительской папке текущей электронной таблицы.
Важно отметить, что файл на диске Google может «быть в нескольких папках».Поэтому определение пути полной папки не является чем-то абсолютной даже для одного пользователя.Даже папки могут быть внутри нескольких папок и, хотя я не проверил это, я думаю, что у вас может быть родитель внутри дочерней папки.Поэтому, если вы попытаетесь получить полный путь, вы можете в конечном итоге в бесконечной петле, если не осторожно обнаружить эту циклическую ситуацию.
Вот как вы получаете непосредственные родительские папки текущего Spreadsheet:
function logParents() {
var ss = SpreadsheetApp.getActive(); //current spreadsheet
var directParents = DriveApp.getFileById(ss.getId()).getParents();
while( directParents.hasNext() )
Logger.log(directParents.next().getName());
}
.
На коде выше я просто регистрирую каждое имя каждого родителя (если есть более одного), но для поиска в каждом родителе вам просто нужно позвонить в searchFiles
вместо getName
.