返回活动电子表格的完整文件夹路径

ssu*_*ndr 2 shared-directory google-sheets google-apps-script

我有一个共享文件夹结构的电子表格.这个共享文件夹结构在任何给定时间在3-9人之间共享.现在文件夹结构本身在任何人的Google云端硬盘上都是不变的.但结构的"根"可能根据个人的偏好而有所不同.(我希望这是有道理的.)

例:

Folder that is shared: RootFolder
Folder structure of RootFolder: RootFolder>First_Level_Folder>Second_Level_Folder>Third_Level_Folder
Spreadsheet that this question pertains to: SS_
Where SS_ resides in: Second_Level_Folder
People that are collaborating: P1 P2 P3 P4 P5
Run Code Online (Sandbox Code Playgroud)

现在,RootFolder及其所有内容在人们之间共享.他们可能会将RootFolder(共享)放置在各自的Google Drives中的任何位置.

例:

P1: P1Root>P1First_Folder>RootFolder
P2: P2Root>RootFolder
P3: P3Root>P3First_Folder>P3Second_Folder>RootFolder
P4: P4Root>P4First_Folder>RootFolder
Run Code Online (Sandbox Code Playgroud)

因此,如果脚本附加到SS_并且假设在与SS_相同的文件夹中"查找另一个电子表格",我需要知道SS_的完整文件夹路径.此文件夹路径对于不同的人来说是唯一的.(P1,P2,P3等)

所以我的问题是,我可以通过脚本找到SS_的文件夹路径吗?这样每次任何人运行脚本时,路径对他们来说都是"正确的",其余的过程都不会受到阻碍?

我试图找一个getFolderPath(spreadsheet)类型函数,但没有运气.

Hen*_*reu 5

如果只需要搜索当前电子表格的直接父文件夹,则不需要完整的文件夹路径.

请注意,Google云端硬盘上的文件可能"位于"多个文件夹中.因此,即使对于单个用户,确定完整文件夹路径也不是绝对的.甚至文件夹也可以放在多个文件夹中,虽然我没有测试过这个,但我认为你可以在子文件夹中有一个父文件夹.因此,如果你试图获得完整的路径,如果不小心检测到这种循环情况,你可能会陷入无限循环.

以下是获取当前spreadheeet的直接父文件夹的方法:

function logParents() {
  var ss = SpreadsheetApp.getActive(); //current spreadsheet
  var directParents = DriveApp.getFileById(ss.getId()).getParents();
  while( directParents.hasNext() )
    Logger.log(directParents.next().getName());
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我只是记录每个父名称(如果有多个),但要在每个父项中搜索,您只需要调用searchFiles而不是getName.

  • 好的,这整个帖子已经纠正了一些关于Google Drive如何构建的先入为主的观念.现在整个`FileIterator`和'next()`事情是有道理的.我总是首选使用Doclist来通过DriveApp来浏览Google云端硬盘.但现在我觉得使用后者更舒服一点.感谢你们! (2认同)