【问题标题】:How to list all files recursively from google drive folder to spreadsheet?如何从谷歌驱动器文件夹递归列出所有文件到电子表格?
【发布时间】:2021-06-15 10:23:56
【问题描述】:

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

启动函数给出错误 - 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
    ]);
        }
    }

    
}

【问题讨论】:

标签: javascript google-apps-script google-sheets google-drive-api


【解决方案1】:

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

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!');
    }

【讨论】:

  • 是的,使用所有文件类型更容易,使用getfiles检查我编辑的答案
  • 但这不能递归地工作,它只会列出文件如果它们直接存在于传递给脚本的文件夹ID的根目录中
  • 您是否要从您的所有文件夹中获取整个文件??
  • 如果你想添加自定义菜单developers.google.com/apps-script/guides/menus,你应该使用.addUi,并且FOLDERID不是一个有效的地址,你应该为你想要检查的那个选择特定的文件夹,即。 1xasddxxxx,对于剩下的部分,我认为它有很多不必要的调用....您需要根据最简单的方法对其进行锻炼,以获取所有文件详细信息并对其进行修改...
  • 我显然是在输入我的文件夹 ID ,我已将其替换为 (FOLDER_ID) 只是为了解决这个问题
猜你喜欢
  • 2019-07-21
  • 2020-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多