首页 > 解决方案 > 使用 Google Apps 脚本从 google drive 文件夹中获取 Google 表格中列出的文件夹和文件

问题描述

我有一个谷歌表,用户可以在其中剪切和粘贴谷歌驱动器文件夹 URL,它将提取文件夹 ID。这是在命名范围“FolderID”中提取的。

然后,我想将文件夹中的文件夹和文件(如果可能的话,也包括子文件夹和文件)列出到工作表“文件”中。

我已经玩过我写的另一个脚本,但是在初始文件夹列表中出现错误(我还没有进入文件列表)。

我收到此错误:异常:在对象 DriveApp 上获取方法或属性 getFolderById 时出现意外错误。

当前脚本是:

function listFoldersAndFilesInAFolder() {
  var ss = SpreadsheetApp.getActive();
  var sh = ss.getSheetByName('Files');
  var foldername = ss.getRangeByName('FolderID');
  sh.clearContents();
  sh.appendRow(["Name", "Link"]);
  var fA = [];
  var folders = DriveApp.getFolderById(foldername).getFolders();//Enter folder id
  while (folders.hasNext()) {
    var folder = folders.next();
    var folderURLstart = "https://drive.google.com/drive/folders/"
    fA.push([folder.getName(), folderURLstart + folder.getId()]);
  }
  sh.getRange(sh.getLastRow() + 1, 1, fA.length, 2).setValues(fA);
  sh.getRange(2, 1, sh.getLastRow() - 1, 2).sort({ column: 1, ascending: true });
}

谁能帮忙:

  1. 修复上面的脚本,以便我可以列出文件夹。
  2. 指导我向列表文件、子文件夹和文件添加什么?

标签: google-apps-scriptgoogle-sheets

解决方案


要添加文件、子文件夹和文件的列表,请使用

function listFilesAndFolders() {
  var folderid = '18akqHAN7PSPMnG3h5HpCskQsMCv4TqCM'; // change FolderID
  var sh = SpreadsheetApp.getActiveSheet();
  sh.clear();
  sh.appendRow(["parent","folder", "name", "update", "size", "URL", "ID", "description", "type"]);
  try {
    var parentFolder =DriveApp.getFolderById(folderid);
    listFiles(parentFolder,parentFolder.getName())
    listSubFolders(parentFolder,parentFolder.getName());
  } catch (e) {
    Logger.log(e.toString());
  }
}

function listSubFolders(parentFolder,parent) {
  var childFolders = parentFolder.getFolders();
  while (childFolders.hasNext()) {
    var childFolder = childFolders.next();
    Logger.log("Fold : " + childFolder.getName());
    listFiles(childFolder,parent)
    listSubFolders(childFolder,parent + "|" + childFolder.getName());
  }
}

function listFiles(fold,parent){
  var sh = SpreadsheetApp.getActiveSheet();
  var data = [];
  var files = fold.getFiles();
  while (files.hasNext()) {
    var file = files.next();
    data = [ 
      parent,
      fold.getName(),
      file.getName(),
      file.getLastUpdated(),
      file.getSize(),
      file.getUrl(),
      file.getId(),
      file.getDescription(),
      file.getMimeType()
      ];
    sh.appendRow(data);
  }
}

https://docs.google.com/spreadsheets/d/13fHMrWR9OOWa045uJbkz67YoVkOG4Pg6ScvrRpE-WBc/copy


推荐阅读