Answers:
一个文档可能位于多个文件夹中,但是您可以通过UI获得它们的列表。
单击文档标题旁边的文件夹图标。如果文档在单个文件夹中,则可以查看该单个文件夹的视图,其中显示文件夹名称,并带有图标以在新选项卡中打开该文件夹,该文件夹中的其他文档以及用于移动当前文档的选项:
如果该文档位于多个文件夹中,则会获得该文件夹的列表,并带有指向每个文件夹的超链接。
让我们提供一种单击鼠标即可转到文档的父文件夹的方法。
将脚本放在文档的“容器绑定”脚本编辑器中。为此,请打开文档,然后从文档菜单栏中选择工具>脚本编辑器...
如果这是您第一次编辑该文档的脚本,则默认代码将填充编辑器的屏幕。只需用下面的代码替换脚本内容。包括下面列出的函数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);
}
id
,set source_folder = DriveApp.getFolderById(id)
和use source_folder.getFilesByType(MimeType.MICROSOFT_POWERPOINT)
或...MimeType.MICROSOFT_POWERPOINT_LEGACY
(或您可以使用后面部分求值的实际mime类型字符串)的文件夹。在此处
自2014年4月4日起,有两种方法可以将文档从其包含的文件夹中获取。
在打开的文档中,单击文档标题旁边的文件夹图标。出现一个对话框,显示“此项目位于”和包含的文件夹名称。文件夹名称链接到该文件夹。如果出现“移至”对话框,则文档所在的文件夹为根目录。如果是您的文档,或者您已明确添加它,则它在“我的云端硬盘”中。如果没有,请尝试在文档列表视图左侧的文件夹列表中的“更多”>“所有项目”。
在文档搜索视图中,选择项目。更多>详细信息和活动>详细信息>文件夹。列出的所有文件夹名称都链接到相应的文件夹。
从2014年12月3日开始,对于不再是协作式Google文档的文件,我不再想出如何从文件视图转到其包含的文件夹。如果您知道怎么做,请评论或编辑此答案。
AFAIK不行,无法从文档URL或文档本身执行此操作。您需要获取文档标题,然后在“云端硬盘”列表视图中进行搜索。搜索结果应显示您的文档标题,然后还以灰色显示父文件夹的名称。
我写了一个小脚本,根据文档的关键检索父文件夹:
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
保存脚本下。Publish>Deploy as web app
并按更新仅提及父文件夹(正是您想要的),但它不会透露完整路径。
更新:Google已提防这些API。
注意:使用新的驱动器UI确实不再需要此功能...
我意识到已经解决了这个问题,但是以防万一人们在搜索时找到了它(我做到了),所以我会添加一些。如果您不熟悉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
这是此问题的这些答案(第一个和第二个)中两个脚本的更完整和可靠的实现。该脚本允许您将文件的完整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;
}
看起来像这样:
安装:
Google已经提供了解决方案:
假设您正在寻找一个名为myreport.pdf的pdf文件。
您搜索myreport,将获得满足条件的文档列表。
如果您想知道它所在的文件夹,只需右键单击并单击“ 在我的云端硬盘中查找”。