【问题标题】:Trying to create tree-view of google drive folders尝试创建谷歌驱动器文件夹的树视图
【发布时间】:2019-05-31 19:43:40
【问题描述】:

非常感谢 cmets 和响应。那个代码对我来说有点太高级了,我最终找到了一个非常不雅的解决方案,因为我没有时间了。我能够获得列出文件夹和带有链接的第一级子文件夹的代码,但我还不能让它遍历所有级别的文件夹,主要是因为我只需要备份并学习很多基本。我还能够使用我找到的一些代码来列出所有文件夹以创建树,但我无法将其格式化为您可以实际看到结构或添加链接的方式。我会继续尝试,如果我整理出来会发布。这是我使用的,这对我们的目的来说很好,因为我们的共享驱动器相当有限。

作为参考,这是我开始使用的代码: https://superuser.com/questions/1095578/list-of-subfolder-names-and-file-links-in-google-sheets-script

function listFolders(foldername) {
var ss = SpreadsheetApp.openById(ID);
var sheet = ss.getSheetByName("sheet name");
sheet.appendRow("Parent Folder", "Name", "Link" ]);

//change the folder ID below to reflect your folder's ID (look in the            
URL when you're in your folder)

var folders = DriveApp.getFolderById(ID);
var contents = folders.getFolders();
var cnt = 0;
var folderD;

while (contents.hasNext()) {
var folderD = contents.next();
cnt++;

data = [
        folders.getName(),
        folderD.getName(),
        folderD.getUrl(),
];


sheet.appendRow(data);
};
};

原帖: 我是在谷歌表格中使用脚本的初学者,我正在尝试在谷歌驱动器中创建一个包含许多子文件夹的文件夹列表。理想情况下,它将是一个树形,但此时我会选择一个列表。我不需要列出所有文件,只需要列出文件夹。我一直在尝试让下面的代码工作,但它在调用电子表格时一直挂断。任何人都可以帮忙吗?

我尝试通过名称和 ID 调用文件夹和电子表格,但它总是告诉我它无法执行 getactivespreadsheet 命令。我也尝试修改另一个问题中提到的代码,但我也无法让它工作:https://ctrlq.org/code/19923-google-drive-files-list

function generateFolderIndex(myfoldername) {
var folder = DriveApp.getFolderById('0B8vOJQUb-IIVTHdudlZSVkdtdE0');
var subFolders = folder.getFolders();
var childFolders = subFolders
var ss = SpreadsheetApp.getActiveSpreadsheet('1Trv9OtJFnD4AdSHrZKFfsSu6JMV9f78H6wwZNhF2_M4');
var sheet = ss.getSheetByName('Directory');

sheet.clear(directory);
sheet.appendRow([name, link]);

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

var foldername = childFolder.getname();
var name = childFolder.getName()
var link = childFolder.getUrl()
var date = childFolder.getDateCreated()


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

}
};

我正在尝试获取一张表,其中列出了带有 URL 链接的文件夹和子文件夹。我目前收到以下错误消息: [19-05-31 15:32:20:911 EDT] 执行失败:找不到方法 getActiveSpreadsheet(string)。 (第 5 行,文件“代码”)[0.432 秒总运行时间]

【问题讨论】:

  • Google 云端硬盘根本不保证是树形结构。 (团队驱动器是)。包含文件夹 A 的文件夹 A 包含文件夹 B?没问题,继续。
  • 另外,appendRow 速度非常慢,只有在需要原子行为时才值得这么慢。否则使用getRangesetValues

标签: google-apps-script directory tree


【解决方案1】:

或者..简单的方法...

在 PC 中使用 DRIVE 或 FS DRIVE APP 用于桌面。 Usea CMD(windows)...和功能

树>a.txt

生成的文件 a.txt 会显示所有的树。

它节省了研究时间。

【讨论】:

    【解决方案2】:

    SpreadsheetApp.getActiveSpreadsheet() 没有任何参数。

    然而

    SpreadsheetApp.openById('ssid') 确实需要和 id。我想也许你打算使用 openById();

    openById

    getActiveSpreadsheet

    这是我目前正在处理的脚本,但它会生成电子表格列表,您可以按 id 排除文件夹,按 id 排除文件。

    function getAllSpreadsheets() {
      var ss=SpreadsheetApp.getActive();
      var sh=ss.getSheetByName('FilesAndFolders');
      if(sh.getLastRow()>0) {
        sh.getRange(1,1,sh.getLastRow(),2).clear().clearDataValidations();
      }
      getFnF();
      SpreadsheetApp.getUi().alert('Process Complete')
    }
    
    var level=0;
    function getFnF(folder) {
      var folder= folder || DriveApp.getRootFolder();
      //var folder=DriveApp.getRootFolder();
      var ss=SpreadsheetApp.getActive();
      var sh=ss.getSheetByName('FilesAndFolders');
      var files=folder.getFilesByType(MimeType.GOOGLE_SHEETS)
      while(files.hasNext()) {
        var file=files.next();
        if(isExcluded(file.getId(),'file')){continue;}
        var firg=sh.getRange(sh.getLastRow() + 1,level + 1);
        firg.setValue(Utilities.formatString('=HYPERLINK("%s","%s")',file.getUrl(),'FILE: ' + file.getName()));
        firg.offset(0,1).insertCheckboxes('Exclude','Include');
      }
      var subfolders=folder.getFolders() 
      while(subfolders.hasNext()) {
        var subfolder=subfolders.next();
        if(isExcluded(subfolder.getId(),'folder')){continue;}
        var forg=sh.getRange(sh.getLastRow() + 1,level + 1);
        forg.setValue(Utilities.formatString('=HYPERLINK("%s","%s")',subfolder.getUrl(),'FOLDER: ' + subfolder.getName()));
        //forg.offset(0,1).insertCheckboxes('Exclude','Include');
        //level++;
        getFnF(subfolder);
      }
      //level--;
    }
    
    function isExcluded(id,type) {//type: file or folder
      var type=type||'Missing Input';
      var xFldrIdA=['Excluded folder ids'];
      var xFileIdA=['Excluded file ids'];
      var type=type.toLowerCase();
      switch(type) {
        case 'file':
          return xFileIdA.indexOf(id)>-1;
          break;
        case 'folder':
          return xFldrIdA.indexOf(id)>-1;
          break;
        default:
          throw(Utilities.formatString('Error: Invalid Type: %s in isExcluded.',type));
          return true;//assume excluded
          break;
      }
    }
    

    欢迎您使用它,也许它会有所帮助。

    【讨论】:

      猜你喜欢
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      相关资源
      最近更新 更多