从DocsList迁移到DriveApp?

时间:2013-11-24 18:51:54

标签: google-apps-script migration google-drive-api

我一直在使用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并实现相同的目的。

不同场景的小/离散示例将非常有用。我可以从那里拿走它。如果你们认为我不清楚我需要什么帮助,我会更多地编辑它。

2 个答案:

答案 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的转换,但我希望这也能正常工作。