如何查看Google文档的父文件夹?


91

我经常直接链接到Google文档(我的文档或组织共享的文档),并希望查找存储在同一文件夹中的文档。为此,我需要确定文档所在的文件夹。

有没有办法做到这一点?

Answers:


72

一个文档可能位于多个文件夹中,但是您可以通过UI获得它们的列表。

单击文档标题旁边的文件夹图标。如果文档在单个文件夹中,则可以查看该单个文件夹的视图,其中显示文件夹名称,并带有图标以在新选项卡中打开该文件夹,该文件夹中的其他文档以及用于移动当前文档的选项:

在此处输入图片说明

如果该文档位于多个文件夹中,则会获得该文件夹的列表,并带有指向每个文件夹的超链接。

两个父文件夹的屏幕截图


16
我记得这个“文件夹图标”已经有一段时间了,但是现在不见了。有人知道如何在新设计中找到父文件夹吗?
Mike Eng 2013年

2
文件夹图标现在又回来了。
Vidar S. Ramdal

4
现在,“此项目位于:”文本已移至单击“文件夹图标”后出现的对话框。不幸的是,这似乎不适用于尚未创建的文件。
耶迪贾2015年

14
Google云端硬盘的用户界面是如此混乱……
Franck Dernoncourt,2015年

3
@Jangari是的,虽然毫无意义,但是如果文档位于多个文件夹中,则会获得超链接,但如果文档仅位于一个文件夹中,则不会获得超链接。鼓励您将此产品反馈意见提交给Google。如果他们得到足够的反馈,也许他们会改变它。google.com/tools/feedback/intl/en
Mike Eng

14

缺少文件夹图标?

如果您发现该文件名右侧缺少该小文件夹,则可以选择File > Document details...至少查看父目录名。例如:

当小文件夹图标丢失时...

您会发现Waldo到底在哪里。 我发现自己进入了第二世界!


5

让我们提供一种单击鼠标即可转到文档的父文件夹的方法。

将脚本放在文档的“容器绑定”脚本编辑器中。为此,请打开文档,然后从文档菜单栏中选择工具>脚本编辑器...

如果这是您第一次编辑该文档的脚本,则默认代码将填充编辑器的屏幕。只需用下面的代码替换脚本内容。包括下面列出的函数onOpen()和listParentFolders()。

将脚本保存在编辑器中,然后“刷新”显示相关文档的浏览窗口。对于名为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);
}

如果我的文档是Google驱动器上的PowerPoint(非Google应用)文件怎么办?
Fuhrmanator 2014年

@Fuhrmanator使用DriveApp API(而不是DocumentApp)访问它,每个文件在Drive中都有一个模仿类型(文件类型),您可以在其中找到它以及唯一的文件ID。
Louis Maddox

具体来说,对于已知id id,set source_folder = DriveApp.getFolderById(id)和use source_folder.getFilesByType(MimeType.MICROSOFT_POWERPOINT)...MimeType.MICROSOFT_POWERPOINT_LEGACY(或您可以使用后面部分求值的实际mime类型字符串)的文件夹。在此处
Louis Maddox

5

自2014年4月4日起,有两种方法可以将文档从其包含的文件夹中获取。

在打开的文档中,单击文档标题旁边的文件夹图标。出现一个对话框,显示“此项目位于”和包含的文件夹名称。文件夹名称链接到该文件夹​​。如果出现“移至”对话框,则文档所在的文件夹为根目录。如果是您的文档,或者您已明确添加它,则它在“我的云端硬盘”中。如果没有,请尝试在文档列表视图左侧的文件夹列表中的“更多”>“所有项目”。

在文档搜索视图中,选择项目。更多>详细信息和活动>详细信息>文件夹。列出的所有文件夹名称都链接到相应的文件夹。

从2014年12月3日开始,对于不再是协作式Google文档的文件,我不再想出如何从文件视图转到其包含的文件夹。如果您知道怎么做,请评论或编辑此答案。


2

AFAIK不行,无法从文档URL或文档本身执行此操作。您需要获取文档标题,然后在“云端硬盘”列表视图中进行搜索。搜索结果应显示您的文档标题,然后还以灰色显示父文件夹的名称。


绕了一圈,但这是一个解决方案。谢谢!
克劳斯

1
仅在您的父文件夹名称唯一时才有用。并非总是如此...
Fuhrmanator 2014年

@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。

注意:使用新的驱动器UI确实不再需要此功能...

  1. 当您搜索或有任何文档列表时,请高亮显示要查找的文件
  2. 点击右上角的[i](信息)按钮
  3. 单击“详细信息”(与默认的“活动”相对)
  4. 您将看到共享及其存储位置等

我意识到已经解决了这个问题,但是以防万一人们在搜索时找到了它(我做到了),所以我会添加一些。如果您不熟悉Google App脚本,请参阅此链接

感谢@Jacob Jan Tuinstra和@Drawn提供了他们的脚本,但是我都不需要它们,因此我使用了他们两个来创建我的脚本。下面的脚本需要粘贴到GApps脚本编辑器中,然后作为Web应用发布。该链接应保存/添加书签以供以后重用:

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

用户界面如下所示: 脚本用户界面

请注意,文件的ID来自其URL,即在下面的URL示例中看到“ <...>”:

https://docs.google.com/a/your_domain/spreadsheet/ccc?key=<...>&usp=drive_web#gid=0

正是我所需要的;遗憾的是Google于2014年12月11日弃用了UiApp,因此这需要在某个时候重新编写。这就是云服务的麻烦,长期没有任何作用,您任由他们摆布。
艾德·兰德尔

是的,确实是@EdRandall。我将在原始版本中对此进行更新
-thx

1

这是此问题的这些答案(第一个第二个)中两个脚本的更完整和可靠的实现。该脚本允许您将文件的完整URL或文件ID粘贴到对话框的第一个编辑框中,然后返回路径的文本表示形式以及到父目录的链接。安装说明与Jacob上面显示的相同,为完整起见,我在下面复制了它们。

注意:所有这些脚本中使用的某些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. 转到发布>部署为Web应用并按更新
  6. 出现的url(末尾是exec)将允许您运行独立脚本。

1
请注意:答案上方并没有任何上下文,因为答案可以以不同的方式排序。最好链接到您要参考的答案。
ale

感谢Al,我是StackExchange的新手。我删除了“以上”参考,而是使用了链接。
Greg L.

-2

Google已经提供了解决方案:

假设您正在寻找一个名为myreport.pdf的pdf文件。

您搜索myreport,将获得满足条件的文档列表。

如果您想知道它所在的文件夹,只需右键单击并单击“ 在我的云端硬盘中查找”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.