Sachin
Sachin

Reputation: 1309

How to list all files recursively from google drive folder to spreadsheet?

i am trying to the list all the files recursively from a google drive folder to a spreadsheet and sort the file listing by size ( Largest sized file should be on top ) . i am facing issues with the script

start function is giving the error - 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
    ]);
        }
    }

    
}

Upvotes: 0

Views: 1690

Answers (1)

Kin Siang
Kin Siang

Reputation: 2699

To check whether a specific file type exist in Gdrive, you cannot use If statement but file.hasnext() function, below is the method to check only spreadsheet type and return the property as per your expectation, do take note that it will be meaningless action to get the file size of spreadsheet since it will be 0 byte due to store in Google database:

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())
  }
}

I have performed the testing, the entire code work fine, except this part, by amended I will have all the log and sheet data updating :)

From

var folder = DriveApp.getFoldersById(FOLDER_ID);

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

To:

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

Upvotes: 1

Related Questions