如何在电子表格中按大小对 google 个驱动器文件进行排序?

How to sort google drive files by size in a spreadsheet?

我正在使用脚本以递归方式将 Google 驱动器文件夹中的所有文件列出到电子表格中。它工作正常,但我需要按大小(最大的大小在顶部)对文件列表进行排序。 还以字节为单位驱动 api returns 大小值,但我需要它们以 GB 为单位。我还没有找到任何方法可以直接通过 api 来做到这一点,所以我想将每个文件的大小值除以 1 073 741 824 最多 1 位小数四舍五入(1 GB = 1 073 741 824 字节)

function start() {
    var sheet = SpreadsheetApp.getActiveSheet();
    sheet.clear();
    sheet.appendRow(["Name", "Date", "Size", "URL", "Download", "Description", "Type", "Folder", "Folder Slug"]);

    var folders = DriveApp.getFolderById('FOLDER_ID');
    var folder = folders.getFolders();
    if (folder.hasNext()) {
        processFolder(folder);
    } else {
        Browser.msgBox('Folder not found!');
    }

    function processFolder(folder) {
        while (folder.hasNext()) {
            var f = folder.next();
            var contents = f.getFiles();
            addFilesToSheet(contents, f);
            var subFolder = f.getFolders();
            processFolder(subFolder);
        }
    }

    function addFilesToSheet(files, folder) {
        var data;
        var folderName = folder.getName();
        while (files.hasNext()) {
            var file = files.next();
            Logger.log(file.getName());

            sheet.appendRow([
      file.getName(),
      file.getDateCreated(),
      file.getSize(),
      file.getUrl(),
      "https://docs.google.com/uc?export=download&confirm=no_antivirus&id=" + file.getId(),
      file.getDescription(),
      file.getMimeType(),
      folderName
    ]);
        }
    }

    
}

修改点:

  • 在您的脚本中,在循环中使用 appendRow 将值放入 Spreadsheet。在这种情况下,工艺成本会很高。 Ref 而且,在这种情况下,在将值放入 Spreadsheet 之后,需要对 sheet.
  • 进行排序
  • 所以,在这个回答中,我想提出以下流程。
    1. 检索文件列表并放入数组。
    2. 按文件大小对数组排序。
    3. 将数组放入Spreadsheet。

当以上几点反映到你的脚本中,就会变成下面这样。

修改后的脚本:

function start() {
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.clear();
  sheet.appendRow(["Name", "Date", "Size", "URL", "Download", "Description", "Type", "Folder", "Folder Slug"]);
  var folders = DriveApp.getFolderById('FOLDER_ID');
  var folder = folders.getFolders();
  if (folder.hasNext()) {

    // 1. Retrieve the file list and put to an array.
    // 2. Sort the array by the file size.
    var list = processFolder(folder).sort((a, b) => a[2] < b[2] ? 1 : -1);

    // 3. Put the array to the Spreadsheet.
    sheet.getRange(2, 1, list.length, list[0].length).setValues(list);
  } else {
    Browser.msgBox('Folder not found!');
  }

  function processFolder(folder, list = []) {
    while (folder.hasNext()) {
      var f = folder.next();
      var contents = f.getFiles();
      addFilesToSheet(contents, f, list);
      var subFolder = f.getFolders();
      processFolder(subFolder, list);
    }
    return list;
  }

  function addFilesToSheet(files, folder, list) {
    var folderName = folder.getName();
    while (files.hasNext()) {
      var file = files.next();
      list.push([
        file.getName(),
        file.getDateCreated(),
        Math.round(10 * file.getSize() / 1073741824) / 10, // Modified from file.getSize() / 1073741824,
        file.getUrl(),
        "https://docs.google.com/uc?export=download&confirm=no_antivirus&id=" + file.getId(),
        file.getDescription() || "",
        file.getMimeType(),
        folderName
      ]);
    }
  }
}
  • 在此修改后的脚本中,最大文件大小为 sheet。

参考文献: