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

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

最佳答案

wchiquito的评论中的讨论很有趣,但是遵循所有链接非常耗时。

底线:不会有getFolderByPath()的DriveApp版本,因此您需要自己滚动。 Faustino在the Google+ group中提出了一种解决方法,而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文件夹实例。

10-04 16:48