创建谷歌驱动器文件夹的树视图

分享于2022年07月17日 database google-apps-script javascript treeview 问答
【问题标题】:创建谷歌驱动器文件夹的树视图(Creating a treeview of google drive folders)
【发布时间】:2022-01-27 02:55:27
【问题描述】:

我想从谷歌驱动器创建一个 JSON 文件夹数据库(仅)用于树视图窗格, 我尝试使用此代码使用谷歌表格提取数据库

var level=0;
getFnF()

function getFnF(folder) {
  var folder= folder || DriveApp.getFolderById(" ID HERE");
  var sh=SpreadsheetApp.getActiveSheet();
  var subfolders=folder.getFolders() 
  while(subfolders.hasNext()) {
    var subfolder=subfolders.next();
    var forg=sh.getRange(sh.getLastRow() + 1,level + 1);
    forg.setValue(Utilities.formatString(subfolder.getName() + "      "+ subfolder.getId()));
    level++;
    getFnF(subfolder);
  }
  level--;
}

但我坚持如何将其转换为这种格式的数据库:

export const treeMenu = [
  {
    key: "Folder id",
    label: "folder1",
    nodes: [
      {
        key: "Folder id",
        label: "sub-folder",
        nodes: [
          {
            key: "Folder id",
            label: "sub-sub-folder",
            nodes: [],
          },
        ],
      },
    ],
  },
  {
    key: "Folder id",
    label: "folder",
  },
];

  • 我认为您询问如何使用该级别,这是特定于应用程序的,因此取决于您。就我而言,我正在将树结构构建到电子表格中
  • 在您的情况下,这个 Google Apps 脚本库有用吗? github.com/tanaikech/FilesApp
  • @salahkai 您尝试过建议的解决方案吗?请提供反馈。
  • @Tanaike 这似乎也有效,一个非常有用的回购谢谢你包括它!

【解决方案1】:

您可以使用递归来做到这一点:

function myFunction() {


  var getSubfolders = subfoldersObject => {
    var subfolders = []; 
    while(subfoldersObject.hasNext()){
      subfolders.push(subfoldersObject.next())
    } 
    return subfolders;
  }

  var rootFolder = DriveApp.getRootFolder();
  
   
  function recursive(folder){

    var subFolders = getSubfolders(folder.getFolders());
    return {id: folder.getId(), label: folder.getName(),
             nodes: subFolders.map(folder => recursive(folder))}
  }

  const treeMenu = recursive(rootFolder);
}

诀窍是在遇到的每个文件夹上调用相同的函数。这将意味着在其内部调用函数,这正是我们想要的:在里面寻找文件夹 在里面寻找文件夹 在寻找文件夹......直到我们遇到死胡同,我们又回到了上一级。

  • 感谢您的详尽回答!这正是我想要的。