【问题标题】:In this google app script, how can we get list of subfolders and put them in next column?在这个谷歌应用程序脚本中,我们如何获取子文件夹列表并将它们放在下一列?
【发布时间】:2021-12-30 10:52:57
【问题描述】:

以下代码非常适合获取文件夹列表,但我找不到将子文件夹提升至 3 级的方法。

谁能建议如何实现它?


function generateFolderIndex(id) {
   var folder = DriveApp.getFolderById('[ID]');
   var subFolders = folder.getFolders();
   var childFolders = subFolders
   var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Projekt');

   sheet.clear();
   sheet.appendRow(["Projekt", "Länk", "Skapad"]);

while (subFolders.hasNext())
  {    
  var childFolder = childFolders.next(); 

  var folderID = childFolder.getId();
  var name = childFolder.getName()
  var link = childFolder.getUrl()
  var date = childFolder.getDateCreated()


   data = [name, link, date, ]
    sheet.appendRow(data);

  }
};

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    如果您最多需要 3 个级别,并且只需要您在问题中提到的指定结构的数据。

    试试这个怎么样:

    function generateFolderIndex(id) 
    {
      var folder = DriveApp.getFolderById('[ID]'); //replace it with parent folder
      var subFolders = folder.getFolders();
      var childFolders = subFolders
      var ss = SpreadsheetApp.openById('Projekt')
      var sheet = ss.getSheetByName('_cache_');
      sheet.clear();
      sheet.appendRow(["Projekt", "Länk", "Skapad"]);
      
      while (subFolders.hasNext())// level1
      {    
        var childFolder = childFolders.next(); 
        var folderID = childFolder.getId();
        var name = childFolder.getName()
        var link = childFolder.getUrl()
        var date = childFolder.getDateCreated()     
        data = [name, link, date]
        sheet.appendRow(data);
        var folder = DriveApp.getFolderById(folderID);
        var level2 = folder.getFolders()
        var levelChild = level2
              while (level2.hasNext()) // level 2
              { 
                var childFolder = levelChild.next(); 
                var folderID = childFolder.getId();
                var name = childFolder.getName()
                var link = childFolder.getUrl()
                var date = childFolder.getDateCreated()
                
                data = [name, link, date]
                sheet.appendRow(data);
                
                var folder = DriveApp.getFolderById(folderID);
                var level3 = folder.getFolders()
                var levelChild = level3
                
                    while (level3.hasNext()) // level 3
                    { 
                      var childFolder = levelChild.next(); 
                      var folderID = childFolder.getId();
                      var name = childFolder.getName()
                      var link = childFolder.getUrl()
                      var date = childFolder.getDateCreated()
                      
                      data = [name, link, date]
                      sheet.appendRow(data);
                      
                    }
                
              }
        
      }
    }

    【讨论】:

      【解决方案2】:

      我相信你的目标如下。

      • 您想使用 Google Apps 脚本检索文件夹列表,包括第三级中的子文件夹。

      这样的话,下面的修改怎么样?

      我认为当appendRow在循环中使用时,处理成本会变高。 Ref所以,在这个答案中,也包括了针对这个问题的修改。

      修改脚本:

      function getData(folder, n = 4, res = []) {
        if (n != 4) res.push([folder.getName(), folder.getUrl(), folder.getDateCreated()]);
        if (--n == 0) return;
        const subfolders = folder.getFolders();
        while (subfolders.hasNext()) getData(subfolders.next(), n, res);
        return res;
      }
      
      function generateFolderIndex(id = '[ID]') {
        const folder = DriveApp.getFolderById(id);
        const values = [["Projekt", "Länk", "Skapad"], ...getData(folder)];
      
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var sheet = ss.getSheetByName('Projekt');
        sheet.clear();
        sheet.getRange(1, 1, values.length, values[0].length).setValues(values);
      }
      
      • 在您的脚本中,idfunction generateFolderIndex(id) { 可能不会被使用。所以这个修改使用id。使用此脚本时,请设置'[ID]'或作为参数。

      • 在此修改后的脚本中,当n = 4 更改时,您可以更改要检索的级别。 n = 4 表示包含顶层文件夹的级别。因此,例如,如果要检索顶层文件夹下的2个级别,请将其修改为n = 3

      注意:

      • 此外,您可以使用 Google Apps 脚本库 (FilesApp) 来检索特定文件夹下的文件列表。

      【讨论】:

        猜你喜欢
        • 2022-01-23
        • 2019-08-20
        • 1970-01-01
        • 2022-12-15
        • 2016-03-31
        • 2020-10-03
        • 2017-02-19
        • 2023-03-19
        • 1970-01-01
        相关资源
        最近更新 更多