Jak wyświetlić folder nadrzędny dokumentu Google?

91

Często mam bezpośredni link do dokumentu Google (mojego lub udostępnionego dokumentu organizacji) i chcę znaleźć dokumenty przechowywane w tym samym folderze. Aby to zrobić, musiałbym określić folder, w którym znajduje się dokument.

Czy jest na to sposób?

Mikołaj
źródło

Odpowiedzi:

72

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:

wprowadź opis zdjęcia tutaj

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.

Zrzut ekranu dwóch folderów nadrzędnych

pkaeding
źródło
16
Pamiętam, że ta „ikona folderu” była już jakiś czas temu, ale już jej nie ma. Czy ktoś wie, jak znaleźć folder nadrzędny w nowym projekcie?
Mike Eng
2
Ikona folderu wydaje się być teraz z powrotem.
Vidar S. Ramdal,
4
Tekst „Ten element jest w:” został teraz przeniesiony do okna dialogowego, które pojawia się po kliknięciu „ikony folderu”. Niestety, nie działa to w przypadku plików, które nie zostały utworzone.
Jedidja
14
Interfejs użytkownika Dysku Google to taki bałagan…
Franck Dernoncourt
3
@Jangari Tak, choć bezsensowne, otrzymujesz hiperłącza, jeśli dokument jest w wielu folderach, ale nie ma hiperłącza, jeśli dokument jest tylko w jednym folderze. Zachęcam do przesłania opinii o tym produkcie do Google. Może to zmienią, jeśli otrzymają wystarczającą ilość informacji zwrotnych tego rodzaju. google.com/tools/feedback/intl/en
Mike Eng
14

Brakuje ikony folderu?

Jeśli okaże się, że brakuje tego małego folderu po prawej stronie nazwy pliku, możesz File > Document details...przynajmniej zobaczyć nazwę katalogu nadrzędnego. Na przykład:

Gdy brakuje małej ikony folderu ...

I dowiesz się, gdzie, u diabła, jest Waldo. Znalazłem się w świecie-2!

broc.seib
źródło
5

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);
}
Pociągnięty
źródło
Co się stanie, jeśli mój dokument jest plikiem programu PowerPoint (innego niż aplikacje Google) na dysku Google?
Fuhrmanator
@Fuhrmanator uzyskuje dostęp do niego za pomocą interfejsu API DriveApp, a nie DocumentApp, każdy plik ma typ mimetyczny (typ pliku) na Dysku, na którym można go znaleźć, a także unikalny identyfikator pliku.
Louis Maddox,
W szczególności, w przypadku folderu o znanym identyfikatorze 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
Louis Maddox,
5

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.

Matt McClure
źródło
2

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.

OnenOnlyWalter
źródło
Wokół, ale jest to rozwiązanie. Dzięki!
Claus,
1
Przydatne tylko, jeśli nazwa folderu nadrzędnego jest unikalna. Nie zawsze tak jest ...
Fuhrmanator
@Fuhrmanator nadal jest użyteczny, jeśli nazwa folderu nadrzędnego nie jest unikalna, wystarczy przeszukać wszystkie foldery (co może być trudne, jeśli liczba folderów jest duża, ale nadal).
ThomasW,
1

Folder nadrzędny

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;
}

To wygląda tak

wprowadź opis zdjęcia tutaj

Żeby zainstalować

  1. goto script.google.com , gdy jesteś zalogowany
  2. rozpocznij nowy skrypt
  3. wklej kod i naciśnij ikonę błędu. Naciśnij autoryzuj.
  4. pod file>menaged versionzapisz skrypt.
  5. goto Publish>Deploy as web appi naciśnij aktualizację
  6. prezentowany adres URL (exec na końcu) pozwoli ci uruchomić skrypt stand-a-lone.

Uwaga

Wspomniany jest tylko folder nadrzędny (dokładnie to, czego chciałeś), ale nie ujawni on pełnej ścieżki.

Jacob Jan Tuinstra
źródło
1

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 ...

  1. podczas wyszukiwania lub posiadania dowolnej listy dokumentów, hi-lite plik, który chcesz znaleźć
  2. kliknij przycisk [i] (informacje) w prawym górnym rogu
  3. kliknij „Szczegóły” (w porównaniu z domyślną „Aktywnością”)
  4. zobaczysz udostępnianie i miejsce przechowywania itp

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: Interfejs skryptu

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
kgingeri
źródło
Właśnie tego potrzebuję; niestety Google wycofało UiApp 11 grudnia 2014 roku, więc w pewnym momencie będzie trzeba go ponownie napisać. Taki jest problem z usługami w chmurze, nic nie działa długo, jesteś na ich łasce.
Ed Randall
Tak, rzeczywiście @EdRandall. Zaktualizuję to w oryginalnym - thx
kgingeri
1

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:

Znajdź interfejs folderu nadrzędnego

Żeby zainstalować:

  1. goto script.google.com , gdy jesteś zalogowany
  2. rozpocznij nowy skrypt
  3. wklej kod i naciśnij ikonę błędu. Naciśnij autoryzuj.
  4. w pliku> wersja zarządzana zapisz skrypt.
  5. goto Publikuj> Wdróż jako aplikację internetową i naciśnij aktualizację
  6. prezentowany adres URL (exec na końcu) pozwoli ci uruchomić skrypt stand-a-lone.
Greg L.
źródło
1
Tylko uwaga: „powyżej” tak naprawdę nie ma żadnego kontekstu w odpowiedziach, ponieważ odpowiedzi można sortować na różne sposoby. Lepiej link do odpowiedzi, do których się odnosisz.
ale
Dzięki Al, jestem nowy w StackExchange. Usunąłem odniesienie „powyżej” i zamiast tego użyłem linków.
Greg L.,
-2

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 .

Rajiv Jowaheer
źródło