我一直在使用DocsList作为一个大项目而且它运行得很好。最近,漏洞已经出现,它们主要是获取文件夹或文件的根源。当我做研究时,我发现DriveApp已经更新。问题是DriveApp没有像DocsList那样的搜索参数。
例如,如果我有这样的文件夹结构:
Root
-Main Folder 1
--Folder 1
--Folder 2
-Main Folder 2
--Folder 1
--Folder 2
要在“主文件夹2”中获取文件夹“文件夹1”,我可以像这样放入搜索参数:DocsList.getFolder('主文件夹2 /文件夹1')
使用DriveApp,我无法理解如何使用它。根据我的理解,我必须为DriveApp执行类似的操作:
var mainFolders = DriveApp.getFoldersByName('Main Folder 2');
while (mainFolders.hasNext()) {
var mainFolder = termFolders.next();
var subFolders = termFolder.getFoldersByName('Folder 1');
// Something like this...
}
因此,如果我有一个更“深入”的文件夹,我将不得不进一步扩展它。?
我觉得不是让事情变得简单,而是让所有FileIterators和FolderIterators变得更复杂。而且只是难以用代码术语“获取”文件或文件夹。
所以基本上,这个主题的目的是找出一个用于DocsList导航和编辑Drive文件/文件夹的人如何迁移到DriveApp并实现相同的目的。
不同场景的小/离散示例将非常有用。我可以从那里拿走它。如果你们认为我不清楚我需要什么帮助,我会更多地编辑它。
答案 0 :(得分:7)
来自wchiquito的评论的讨论是一个有趣的阅读,但所有链接都是耗时的。
结论:没有DriveApp版本的getFolderByPath(),因此将需要自己推送。在the Google+ group中,Faustino提出了一种解决方法,并且Eric改进了它。在这里,添加了一个检查,允许以“/".
开头的路径function getFolderByPath(path) {
var parts = path.split("/");
if (parts[0] == '') parts.shift(); // Did path start at root, '/'?
var folder = DriveApp.getRootFolder();
for (var i = 0; i < parts.length; i++) {
var result = folder.getFoldersByName(parts[i]);
if (result.hasNext()) {
folder = result.next();
} else {
return null;
}
}
return folder;
}
有了它,你可以简单地做myFolder = getFolderByPath('Main Folder 2/Folder 1');
。您最终将获得DriveApp文件夹实例。
答案 1 :(得分:2)
以下代码适用于我的。 它基于具有相同的Id
function convertFileFromDocsListToDriveApp(file)
{ // Because of difference between DocsList and DriveApp
return (file === null) ? null : DriveApp.getFileById(file.getId());
}
function convertFolderFromDocsListToDriveApp(folder)
{ // Because of difference between DocsList and DriveApp
return (folder === null) ? null : DriveApp.getFolderById(folder.getId());
}
我在一些&#39;战略&#39;在我的代码中的位置。 我没有测试从DriveApp到DocsList的转换,但我希望这也能正常工作。