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



我正在使用一个脚本将谷歌驱动器文件夹中的所有文件递归地列出到电子表格中。它运行良好,但我需要按大小(顶部的最大大小(对文件列表进行排序。驱动器api还返回以字节为单位的大小值,但我需要以GB为单位的值。我还没有找到任何直接通过api实现的方法,所以我想将每个文件的大小值除以1 073 741 824,直到小数点后1位四舍五入(1 GB=1 073 742 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将值放入电子表格。在这种情况下,处理成本将很高。此外,在这种情况下,在将值放入电子表格后,需要对表格进行排序
  • 因此,在这个答案中,我想提出以下流程。
    1. 检索文件列表并放入数组中
    2. 按文件大小对数组进行排序
    3. 将数组放到电子表格中

当以上几点反映到您的脚本中时,它变成如下。

修改的脚本:

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
]);
}
}
}
  • 在这个修改后的脚本中,最大文件大小是工作表的顶部

参考文献:

  • 基准:使用谷歌应用程序脚本阅读和编写电子表格
  • 排序((
  • setValues(值(

最新更新