Как просмотреть родительскую папку документа Google?

91

Часто у меня есть прямая ссылка на документ Google (мой или общий для организации), и я хочу найти документы, которые хранятся в той же папке. Для этого мне нужно определить папку, в которой находится документ.

Есть ли способ сделать это?

Клаус
источник

Ответы:

72

Документ может находиться в нескольких папках, но вы можете получить их список через пользовательский интерфейс.

Нажмите значок папки рядом с заголовком документа. Если документ находится в одной папке, вы получите представление об этой папке, отображающее имя папки со значком, чтобы открыть папку на новой вкладке, другие документы в папке и параметры для перемещения текущего документа:

введите описание изображения здесь

Если документ находится в нескольких папках, вы получите список папок, в которых он находится, с гиперссылками на каждую.

Скриншот двух родительских папок

pkaeding
источник
16
Я помню, как этот «значок папки» был там некоторое время назад, но сейчас его нет. Кто-нибудь знает, как найти родительскую папку в новом дизайне?
Майк Энг
2
Значок папки, кажется, вернулся сейчас.
Видар С. Рамдал
4
Текст «Этот элемент в:» теперь перемещен в диалоговое окно, которое появляется после нажатия на «значок папки». К сожалению, это не работает для файлов, которые вы не создали.
Джедиджа
14
Пользовательский интерфейс Google Диска такой беспорядок ...
Франк Дернонкур
3
@Jangari Да, как бы бессмысленно это ни было, вы получаете гиперссылки, если документ находится в нескольких папках, но не гиперссылки, если документ находится только в одной папке. Я рекомендую вам отправить отзыв об этом продукте в Google. Возможно они изменят это, если они получат достаточно обратной связи вида. google.com/tools/feedback/intl/en
Майк Энг,
14

Отсутствует значок папки?

Если вы обнаружите, что эта маленькая папка отсутствует справа от имени файла, вы можете выбрать, File > Document details...по крайней мере, просмотреть имя родительского каталога. Например:

Когда маленький значок папки отсутствует ...

И ты найдешь, где, черт возьми, Уолдо. Я оказался в мире-2!

broc.seib
источник
5

Давайте предоставим средство для перехода в родительскую папку документа одним щелчком мыши.

Разместите скрипт ниже в редакторе скриптов вашего документа. Сделайте это, открыв документ, а затем в строке меню документа выберите «Инструменты»> «Редактор сценариев» ...

Если вы впервые редактируете скрипт этого документа, код по умолчанию будет заполнять экран редактора. Просто замените содержимое скрипта с кодом ниже. Включите обе функции onOpen () и listParentFolders (), перечисленные ниже.

Сохраните скрипт в редакторе, а затем «обновите» окно просмотра, отображающее связанный документ. Новый пункт меню появится для документа с именем Utils. При нажатии на панель меню Utils отобразится всплывающее меню «Показать путь». Этот скрипт отобразит путь к каталогу в виде списка гиперссылок.

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);
}
вничью
источник
Что если мой документ представляет собой файл PowerPoint (не приложения Google) на диске Google?
Fuhrmanator
@Fuhrmanator обращается к нему через API DriveApp, а не DocumentApp, каждый файл имеет в MIME-типе (типе файла), на котором вы можете найти его, а также уникальный идентификатор файла.
Луи Мэддокс
В частности, для папки с известным идентификатором id, установите source_folder = DriveApp.getFolderById(id)и используйте source_folder.getFilesByType(MimeType.MICROSOFT_POWERPOINT)или ...MimeType.MICROSOFT_POWERPOINT_LEGACY(или вы можете использовать фактическую строку типа MIME, в которой вычисляется последняя часть). Смотрите документы здесь
Луи Мэддокс
5

По состоянию на 2014-04-04 существует несколько способов получить документ из папки, в которой он находится.

В открытом документе щелкните значок папки рядом с заголовком документа. Появится диалоговое окно с «Этот элемент находится в» и содержащее имя папки. Имя папки связано с папкой. Если вместо этого появляется диалоговое окно «Перейти к», папка, содержащая документ, является корневой. Если это ваш документ или вы явно добавили его, он находится в папке «Мой диск». Если нет, попробуйте Дополнительно> Все элементы в списке папок слева от представления списка документов.

В представлении поиска документов выберите элемент. Подробнее> Детали и действия> Детали> Папки. Любые перечисленные имена папок связаны с соответствующими папками.

Начиная с 2014-12-03, я больше не могу понять, как перейти из представления файла в содержащую его папку для файлов, которые не являются документами Google для совместной работы. Пожалуйста, прокомментируйте или отредактируйте этот ответ, если знаете как.

Мэтт МакКлюр
источник
2

AFAIK нет, это невозможно сделать с помощью URL документа или самого документа. Вам нужно будет взять название документа и найти его в представлении списка дисков. Результаты поиска должны показать вам заголовок документа, а затем показать имя родительской папки серым цветом.

OnenOnlyWalter
источник
Обход, но это решение. Спасибо!
Клаус
1
Полезно, только если имя вашей родительской папки уникально. Не всегда так ...
Фурманатор
@Fuhrmanator по-прежнему полезен, если имя родительской папки не уникально, вам просто нужно выполнить поиск по всем папкам (что может быть затруднительно, если количество папок велико, но все же).
ThomasW
1

Родительская папка

Я написал небольшой скрипт, который извлекает родительскую папку, основываясь на ключе документа:

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

Это выглядит так

введите описание изображения здесь

Установить

  1. goto script.google.com , когда залогинен
  2. начать новый скрипт
  3. вставьте код и нажмите значок ошибки. Нажмите авторизироваться.
  4. при file>menaged versionсохранении сценария.
  5. перейдите Publish>Deploy as web appи нажмите обновить
  6. представленный URL (exec в конце) позволит вам запустить автономный скрипт.

Запись

Упоминается только родительская папка (именно то, что вы хотели), но она не раскрывает полный путь.

Джейкоб Ян Туинстра
источник
1

ОБНОВЛЕНИЕ: Google удалил эти API, так что будьте осторожны.

ПРИМЕЧАНИЕ: это действительно больше не нужно, используя новый интерфейс диска ...

  1. При поиске или наличии любого списка документов привет-облегчить файл, который вы найдете
  2. нажмите кнопку [i] (информация) в правом верхнем углу
  3. нажмите «Подробности» (по умолчанию «Активность»)
  4. вы увидите разделение и где оно хранится и т.д.

Я понял, что на это уже дан ответ, но на всякий случай, если люди найдут его во время поиска (я сделал), я добавлю к нему некоторые. Если вы новичок в Google App Script, перейдите по этой ссылке .

Спасибо @Jacob Jan Tuinstra и @Drawn за их сценарии, но ни один из них не был тем, что мне нужно, поэтому я использовал оба из них для создания своих. Приведенный ниже сценарий необходимо вставить в редактор сценариев GApps, а затем опубликовать в виде веб-приложения. Ссылка должна быть сохранена / добавлена ​​в закладки для последующего повторного использования:

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

Пользовательский интерфейс выглядит так: Скрипт UI

Обратите внимание, что идентификатор файла берется из его URL - то есть см. «<...>» в примере URL ниже:

https://docs.google.com/a/your_domain/spreadsheet/ccc?key=<...>&usp=drive_web#gid=0
kgingeri
источник
Именно то, что мне нужно; к сожалению, Google отказался от UiApp 11 декабря 2014 года, так что в какой-то момент это нужно будет переписать. В этом проблема облачных сервисов, ничего не работает долго, вы в их власти.
Эд Рэндалл
Да, действительно @EdRandall. Я
обновлю
1

Вот более полная и надежная реализация двух сценариев в этих ответах ( первый и второй ) на этот вопрос. Этот сценарий позволяет вставить полный URL-адрес файла или идентификатор файла в первое поле редактирования в диалоговом окне, а затем возвращает текстовое представление пути, а также ссылку на родительский каталог. Инструкции по установке идентичны приведенным выше Джейкобом , я скопировал их ниже для полноты.

ПРИМЕЧАНИЕ. Некоторые API-интерфейсы, используемые во всех этих сценариях, теперь устарели. Они все еще работают на момент написания этого поста, но, вероятно, перестанут работать в будущем.

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

Это выглядит так:

Найти родительский интерфейс

Установить:

  1. goto script.google.com , когда залогинен
  2. начать новый скрипт
  3. вставьте код и нажмите значок ошибки. Нажмите авторизироваться.
  4. под файлом> управляемая версия сохраните скрипт.
  5. перейдите в Публикация> Развернуть как веб-приложение и нажмите обновить
  6. представленный URL (exec в конце) позволит вам запустить автономный скрипт.
Грег Л.
источник
1
Просто примечание: «выше» на самом деле не имеет никакого контекста в ответах, поскольку ответы можно сортировать по-разному. Лучше дать ссылку на ответы, на которые вы ссылаетесь.
Эль
Спасибо Ал, я новичок в StackExchange. Я удалил ссылку «выше» и использовал ссылки.
Грег Л.
-2

Google уже предоставил решение для этого:

Предположим, вы ищете документ в формате PDF под названием myreport.pdf.

Вы ищете myreport, вы получаете список документов, которые удовлетворяют критериям.

Если вы хотите узнать, в какой папке он находится, просто щелкните правой кнопкой мыши и выберите « Найти на моем диске» .

Раджив Джовахир
источник