首页 > 解决方案 > 如何从谷歌驱动器文件夹递归列出所有文件到电子表格?

问题描述

我正在尝试将所有文​​件从谷歌驱动器文件夹递归地列出到电子表格中,并按大小对文件列表进行排序(最大的文件应该在顶部)。我遇到了脚本问题

启动功能给出错误 -ReferenceError: *****folder_id is not defined (Line 16)

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

    var folder = DriveApp.getFoldersById(FOLDER_ID);

    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
    ]);
        }
    }

    
}

标签: javascriptgoogle-apps-scriptgoogle-sheetsgoogle-drive-api

解决方案


要检查 Gdrive 中是否存在特定文件类型,您不能使用If statementbutfile.hasnext()函数,以下是仅检查spreadsheet类型并根据您的期望返回属性的方法,请注意,获取file size电子表格将是毫无意义的操作,因为它由于存储在 Google 数据库中,将为 0 字节:

function fileType() {
  var folder = DriveApp.getFolderById('xxx');
  var files = folder.getFiles();
  while(files.hasNext()){
    var file = files.next();
    Logger.log(file.getUrl());
    Logger.log(file.getName())
  }
}

我已经进行了测试,整个代码工作正常,除了这部分,通过修改我将更新所有日志和工作表数据:)

var folder = DriveApp.getFoldersById(FOLDER_ID);

    if (folder.hasNext()) {
        processFolder(folder);
    } else {
        Browser.msgBox('Folder not found!');
    }

至:

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

推荐阅读