Odpowiedzi:
Dokument może potencjalnie znajdować się w wielu folderach, ale można uzyskać ich listę za pośrednictwem interfejsu użytkownika.
Kliknij ikonę folderu obok tytułu dokumentu. Jeśli dokument znajduje się w jednym folderze, wyświetla się widok tego folderu zawierający nazwę folderu z ikoną, aby otworzyć folder na nowej karcie, inne dokumenty w folderze oraz opcje przeniesienia bieżącego dokumentu:
Jeśli dokument znajduje się w więcej niż jednym folderze, otrzymasz listę folderów, w których się znajduje, z hiperłączami do każdego z nich.
Zapewnijmy sposób na przejście do folderu nadrzędnego dokumentu jednym kliknięciem myszy.
Umieść poniższy skrypt w edytorze skryptów w dokumencie. Zrób to, otwierając dokument, a następnie z paska menu dokumentu wybierz Narzędzia> Edytor skryptów ...
Jeśli edytujesz skrypt tego dokumentu po raz pierwszy, domyślny kod zapełni ekran edytora. Po prostu zamień zawartość skryptu na poniższy kod. Uwzględnij zarówno funkcje onOpen (), jak i listParentFolders () wymienione poniżej.
Zapisz skrypt w edytorze, a następnie „odśwież” okno przeglądania zawierające powiązany dokument. Pojawi się nowa pozycja menu dla dokumentu o nazwie Utils. Kliknięcie pola menu Utils wyświetli menu podręczne, Show Path. Ten skrypt wyświetli ścieżkę katalogu jako listę hiperłączy.
function onOpen() {
// Add a menu with some items, some separators, and a sub-menu.
DocumentApp.getUi().createMenu('Utils')
.addItem('Show Path', 'listParentFolders')
.addToUi();
}
function listParentFolders() {
var theDocument = DocumentApp.getActiveDocument();
var docID = theDocument.getId();
var theFile = DocsList.getFileById(docID);
var parents = theFile.getParents();
// No folders
if ( parents == null ) return;
var folder = parents[0];
var folderName = folder.getName();
var folderURL = folder.getUrl();
var folders = [[folderName,folderURL]];
while (folderName != "Root"){
parents = folder.getParents();
folder = parents[0];
folderName = folder.getName();
folderURL = folder.getUrl();
folders.unshift([folderName,folderURL]);
}
var app = UiApp.createApplication().setTitle("Folder Hierarchy").setHeight(250).setWidth(300);
var grid = app.createGrid(folders.length, 1).setStyleAttribute(0, 0, "width", "300px").setCellPadding(5);
var indentNum = 0, link;
for (var fldCntr = 0; fldCntr < folders.length; fldCntr++){
folderName = folders[fldCntr][0];
folderURL = folders[fldCntr][1];
link = app.createAnchor(folderName, folderURL).setId("id_" + fldCntr).setStyleAttribute("font-size", "10px");
grid.setWidget(indentNum, 0, link);
indentNum += 1;
}
app.add(grid);
DocumentApp.getUi().showSidebar(app);
}
id
, zestawie source_folder = DriveApp.getFolderById(id)
i użyciu source_folder.getFilesByType(MimeType.MICROSOFT_POWERPOINT)
lub ...MimeType.MICROSOFT_POWERPOINT_LEGACY
(lub możesz użyć rzeczywistego ciągu typu mime, którego ostatnia część ocenia). Zobacz dokumenty tutaj
Na dzień 2014-04-04 istnieje kilka sposobów na przejście z dokumentu do folderu zawierającego.
W otwartym dokumencie kliknij ikonę folderu obok tytułu dokumentu. Pojawi się okno dialogowe z „Ten element jest w” i nazwą folderu zawierającego. Nazwa folderu jest powiązana z folderem. Jeśli zamiast tego pojawi się okno dialogowe „Przenieś do”, folder zawierający dokument jest katalogiem głównym. Jeśli jest to Twój dokument lub został on wyraźnie dodany, znajduje się na Moim dysku. Jeśli nie, spróbuj Więcej> Wszystkie elementy na liście folderów po lewej stronie widoku listy dokumentów.
W widoku wyszukiwania dokumentu wybierz element. Więcej> Szczegóły i aktywność> Szczegóły> Foldery. Wszystkie wymienione nazwy folderów są powiązane z odpowiednimi folderami.
Od 03.12.2014 nie mogę już dowiedzieć się, jak przejść z widoku pliku do jego folderu zawierającego pliki, które nie są dokumentami Google współpracującymi. Skomentuj lub edytuj tę odpowiedź, jeśli wiesz jak.
AFAIK nie, nie można tego zrobić z adresu URL dokumentu lub samego dokumentu. Musisz pobrać tytuł dokumentu i wyszukać go w widoku listy Dysku. Wyniki wyszukiwania powinny pokazać tytuł dokumentu, a następnie pokazać nazwę folderu nadrzędnego na szaro.
Napisałem mały skrypt, który pobiera folder nadrzędny, na podstawie klucza dokumentu:
function doGet() {
// create app and grid
var app = UiApp.createApplication();
var grid = app.createGrid(4,2);
// set labels for first column
grid.setWidget(0, 0, app.createLabel("Add document key: ")
.setStyleAttribute('fontWeight', 'bold'));
grid.setWidget(2, 0, app.createLabel("Parent Folder: ")
.setStyleAttribute('fontWeight', 'bold'));
// set text boxes for second column
grid.setWidget(0, 1, app.createTextBox().setId("key")
.setName("key").setWidth(500));
grid.setWidget(2, 1, app.createTextBox().setId("path")
.setName("path").setWidth(500));
// create button and handler
grid.setWidget(3, 0, app.createButton("PATH")
.addClickHandler(app.createServerHandler("getPath")
.addCallbackElement(grid)));
// add grid to application and show app
app.add(grid);
return app;
}
function getPath(e) {
// get active application and key
var app = UiApp.getActiveApplication();
var key = e.parameter.key;
// Get file and path
var path;
try {
var file = DocsList.getFileById(key);
path = file.getParents()[0].getName();
} catch(e) {
path = "file not found";
}
// add path to application and update app
app.getElementById("path").setValue(path);
return app;
}
file>menaged version
zapisz skrypt.Publish>Deploy as web app
i naciśnij aktualizacjęWspomniany jest tylko folder nadrzędny (dokładnie to, czego chciałeś), ale nie ujawni on pełnej ścieżki.
AKTUALIZACJA: Google wycofało te API, więc uważaj.
UWAGA: to naprawdę nie jest już potrzebne przy użyciu nowego interfejsu użytkownika dysku ...
Uświadomiłem sobie, że już na nie odpowiedziano, ale na wypadek, gdyby ludzie znaleźli to podczas wyszukiwania (zrobiłem), dodam trochę. Jeśli jesteś nowy w Google App Script, zobacz ten link .
Dzięki @Jacob Janowi Tuinstrze i @Drawn za ich skrypty, ale żadna nie była dokładnie tym, czego potrzebowałem, więc użyłem ich obu do stworzenia mojego. Poniższy skrypt należy wkleić do edytora skryptów GApps, a następnie opublikować jako aplikację internetową. Link należy zapisać / dodać do zakładek w celu późniejszego ponownego wykorzystania:
function doGet() {
// create app and grid
var app = UiApp.createApplication();
var grid = app.createGrid(4,2);
// set labels for first column
grid.setWidget(1, 0, app.createLabel("Document's key: ")
.setStyleAttribute('fontWeight', 'bold'));
grid.setWidget(2, 0, app.createLabel("Folder Path: ")
.setStyleAttribute('fontWeight', 'bold'));
// set text boxes for second column
grid.setWidget(1, 1, app.createTextBox().setId("key")
.setName("key").setWidth(500));
grid.setWidget(2, 1, app.createTextBox().setId("path")
.setName("path").setWidth(500));
// create button and handler
grid.setWidget(3, 0, app.createButton("Find")
.addClickHandler(app.createServerHandler("listParentFolders")
.addCallbackElement(grid)));
// add grid to application and show app
app.add(grid);
return app;
}
function listParentFolders(e) {
var app = UiApp.createApplication();
var path = '';
var key = e.parameter.key;
var theFile = DocsList.getFileById(key);
var parents = theFile.getParents();
// No folders
if ( parents == null ) {
app.getElementById("path").setValue('unknown');
return app;
}
var folder = parents[0];
var folderName = folder.getName();
var folders = [[folderName]];
try {
folderName = parents[0].getName();
}
catch(error)
{
app.getElementById("path").setValue('(unknown - shared document)');
return app;
}
while (folderName != "Root"){
parents = folder.getParents();
folder = parents[0];
folderName = folder.getName();
// we are going in reverse - build list in other direction
folders.unshift([folderName]);
}
// built path list
var indentNum = 0;
for (var fldrCntr = 0; fldrCntr < folders.length; fldrCntr++){
folderName = folders[fldrCntr][0];
if(fldrCntr == 0) {
path = 'My Drive'; // ...instead of 'Root'
} else {
path += ' / ' + folderName;
}
indentNum += 1;
}
app.getElementById("path").setValue(path);
return app;
}
Interfejs wygląda następująco:
Pamiętaj, że identyfikator pliku pochodzi z jego adresu URL - tzn. Patrz „<...>” w przykładowym adresie URL poniżej:
https://docs.google.com/a/your_domain/spreadsheet/ccc?key=<...>&usp=drive_web#gid=0
Oto bardziej kompletna i niezawodna implementacja dwóch skryptów w tych odpowiedziach ( pierwszej i drugiej ) na to pytanie. Ten skrypt pozwala wkleić pełny adres URL pliku lub identyfikator pliku w pierwszym polu edycji w oknie dialogowym, a następnie zwraca tekstową reprezentację ścieżki oraz link do katalogu nadrzędnego. Instrukcje instalacji są identyczne z przedstawionymi powyżej przez Jacoba , skopiowałem je poniżej dla kompletności.
UWAGA: Niektóre interfejsy API używane we wszystkich tych skryptach są już nieaktualne. Nadal działają od momentu opublikowania tego postu, ale prawdopodobnie przestaną działać w przyszłości.
//
// Take a Google Drive file URL or ID and output a string representation of the path as well as a link
// to the parent folder
//
// Based on https://webapps.stackexchange.com/questions/43881/how-to-view-the-parent-folder-of-a-google-document
function doGet() {
// create app and grid
var app = UiApp.createApplication();
var grid = app.createGrid(5,2);
// set labels for first column
grid.setWidget(1, 0, app.createLabel("URL or file ID: ").setStyleAttribute('fontWeight', 'bold'));
grid.setWidget(2, 0, app.createLabel("Folder Path: ").setStyleAttribute('fontWeight', 'bold'));
grid.setWidget(3, 0, app.createLabel("Folder URL: ").setStyleAttribute('fontWeight', 'bold'));
// set text boxes for second column
grid.setWidget(1, 1, app.createTextBox().setId("key").setName("key").setWidth(1000));
grid.setWidget(2, 1, app.createTextBox().setId("path").setName("path").setWidth(1000));
grid.setWidget(3, 1, app.createAnchor("","").setId("url").setName("url").setWidth(1000));
// create button and handler
grid.setWidget(4, 0, app.createSubmitButton("Find")
.addClickHandler(app.createServerHandler("listParentFolders")
.addCallbackElement(grid)));
// add grid to application and show app
app.add(grid);
return app;
}
//
// getIdFromUrl - Get the file id portion of the url. If the file id itself is passed in it will match as well
//
// From http://stackoverflow.com/questions/16840038/easiest-way-to-get-file-id-from-url-on-google-apps-script
// This regex works for any google url I've tried: Drive url for folders and files, Fusion Tables, Spreadsheets,
// Docs, Presentations, etc. It just looks for anything in a string that "looks like" a Google key. That is, any
// big enough string that has only (google key) valid characters in it.
//
// Also, it works even if it receives the ID directly, instead of the URL. Which is useful when you're asking
// the link from the user, as some may paste the id directly instead of the url and it still works.
function getIdFromUrl(url) {
return url.match(/[-\w]{25,}/);
}
function listParentFolders(e) {
var app = UiApp.createApplication();
var key = getIdFromUrl(e.parameter.key);
var theFile = DriveApp.getFileById(key);
var parents = theFile.getParents();
var fileName = theFile.getName();
// no folders
if ( parents == null ) {
app.getElementById("path").setValue('Unknown file');
return app;
}
var url;
var folder;
var folderName;
var path;
// traverse the list of parents of folders to build the path
while (parents.hasNext()){
folder = parents.next();
folderName = folder.getName();
// on the first pass get the URL of the folder which is the parent folder of the file
if (url == null)
url = folder.getUrl();
// build up a string version of the path
if (path == null)
path = folderName;
else
path = folderName + ' / ' + path;
// get the parent of the current folder
parents = folder.getParents();
}
app.getElementById("path").setValue(path);
app.getElementById("url").setHref(url).setText(url);
return app;
}
To wygląda tak:
Żeby zainstalować:
Google już zapewniło rozwiązanie tego problemu:
Załóżmy, że szukasz dokumentu pdf o nazwie myreport.pdf.
Wyszukujesz moje zgłoszenie, otrzymujesz listę dokumentów spełniających kryteria.
Jeśli chcesz poznać folder, w którym się znajduje, po prostu kliknij prawym przyciskiem myszy i kliknij polecenie Znajdź na moim dysku .