Thursday, October 22, 2015

List Files and Folder in Certain Folder in Google Drive using Google App Script

 Here it is.

 I used getFolderById() to determine the folder I want to list the files and folders inside.  I used home as variable name of the folder

 home.getFiles() is used to gets a collection of all files in home.

 home.getFolders() is used to gets a collection of all folders in home.

I have list and row  as array or tuple or 'list' to accommodate the result. Maybe it's wasting time to have two variable, but I plan to write code to list 'files and folders inside subfolders' recursively. I know maybe it didn't even need that array variable, :). But just in case...

function listFilesNFolders(form) {
  var list = [];
  list.push(['tadaa...<br>']);
  list.push(['heheh...']);
  var row = [];
  row.push('<br> Hello World!!! ');
  list.push(row);
  

  var home = DriveApp.getFolderById('0BxZS62a5NdNYUGxySmp2QW41OUU'); 
  // Log the name of every file in the user's Drive.
  var files = home.getFiles();
  list.push('<br>Files:');
  while (files.hasNext()) {
    var file = files.next();
    list.push('<br>-',file.getName());
    //Logger.log(file.getName());
  }
  // Log the name of every folder in the user's Drive.
  var folders = home.getFolders();
  list.push('<br>Folders:');
  while (folders.hasNext()) {
    var folder = folders.next();
    list.push('<br>-',folder.getName());
    //Logger.log(folder.getName());
  }
  
  
  return list;
}

function doGet(e) {
  return HtmlService.createHtmlOutputFromFile('form.html');
}


The Form

  <form id="myForm">
    <input type="submit" 
    value="OK"        
    onclick="
    this.value='Proses';
    google.script.run.withSuccessHandler(fileUploaded).listFilesNFolders(this.parentNode);
    return false;
    "
                    >
  
</form>

<div id="output"></div>

<script>
    function fileUploaded(status) {
        document.getElementById('myForm').style.display = 'none';
        document.getElementById('output').innerHTML = status;
    }
</script>

<style>
 input { display:block; margin: 20px; }
</style>

The Result