如何在Google SpreadSheet上列出Google云端硬盘文件夹中所有文件的列表

Jon*_*ton 5 javascript google-apps-script google-drive-api

我有一个超过2000个文件夹的文件夹..而且我需要在谷歌电子表格上列出所有这些文件..我在网上发现了一些脚本..但它们并没有完全正常工作.当我点击"RUN"时,我只得到250个文件列表.

在Google Developers页面上阅读我发现了一些关于启用Google Drive高级服务的事情(我做到了)..而且我认为我可以使用名为"令牌"的东西来解决这个问题?

我不知道..我不是程序员,我几乎不懂英语..我试过编辑这个脚本融合我在网上找到的东西..但是任何东西都有效......我只是得到错误,我不能甚至明白..

那么..有人能够解决它吗?

function listFilesInFolder() {
  var folder = DocsList.getFolder("Film");
  var contents = folder.getFiles();
  var file;
  var data;

  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.clear();

  sheet.appendRow(["Nome", "Data", "Dimensione"]);

  for (var i = 0; i < contents.length; i++) {
    file = contents[i];

    if (file.getFileType() == "SPREADSHEET") {
      continue;
    }

    data = [ 
      file.getName(),
      file.getDateCreated(),
      file.getSize(),
    ];

    sheet.appendRow(data);
  }
};
Run Code Online (Sandbox Code Playgroud)

Jon*_*ton 6

此脚本适用于至少2200个文件:)

function listFilesInFolder(id) {
  var folder = DriveApp.getFolderById('MyFolderID');
  var contents = folder.getFiles();
  var file;
  var name;
  var sheet = SpreadsheetApp.getActiveSheet();
  var date;
  var size;

  sheet.clear();
  sheet.appendRow(["Nome", "Data", "Dimensione"]);


  while(contents.hasNext()) {
    file = contents.next();
    name = file.getName();
    date = file.getDateCreated()
    size = file.getSize()

    data = [name, date, size]
    sheet.appendRow(data);
  }
};
Run Code Online (Sandbox Code Playgroud)


Mr5*_*5o1 1

分页就是您正在寻找的。当您有大量结果(例如 2000 个文件)时,您通常将请求划分为“页面”,要么逐页向用户显示,要么在这种情况下保持在 API 限制之内。

“令牌”并不是什么大问题......这只是您的脚本在处理当前页面时记住页码的方式。

因此,这里有关于此的信息:https://developers.google.com/apps-script/reference/docs-list/files-result

页面顶部的脚本非常适合您的情况。你的脚本变得像......

function listFilesInFolder() {
  var folder = DocsList.getFolder("Film");
  //var contents = folder.getFiles();
  var file;
  //var data;

  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.clear();

  sheet.appendRow(["Nome", "Data", "Dimensione"]);


 var pageSize = 200;
 var files = null;
 var token = null; // use a null token for the first lookup
 do {
   var result = DocsList.getAllFilesForPaging(pageSize, token);
   files = result.getFiles();
   token = result.getToken();
   for (var i = 0; i < files.length; i++) {
    //Logger.log(files[i].getName());
    file = files[i];
    if (file.getFileType() == "SPREADSHEET") {
      continue;
    }
    data = [ 
      file.getName(),
      file.getDateCreated(),
      file.getSize(),
    ];

    sheet.appendRow(data);
   }
 } while (files.length >= pageSize);

};
Run Code Online (Sandbox Code Playgroud)

我不保证这会起作用..但我相信你可以解决它。基本上,该页面上的“while 循环”替换了脚本中的“for 循环”。该页面上的循环仅调用 Logger.log(),因此您可以将其与sheet.appendRow(data) 交换