Como obtener los ficheros de una carpeta con Google Apps Script


 En muchas ocasiones cuando programamos en Google Apps Script podemos necesitar obtener los ficheros que hay en una carpeta ya sea para analizarlos,  copiarlos o crear nuevos ficheros.

El código que os mostraré es muy sencillo pero lo suficientemente potente para que podáis montar vuestra gestión de ficheros con Google Apps Script como necesitéis.

Lo primero es repasar un poco la base de como acceder a ficheros y carpetas con Google Apps Script:

function GetFolder()
{
  //Opcion1: Sabemos el id del folder
  var folder = DriveApp.getFolderById("XXXYYYZZZZ");
  
  //Opcion2: Obtenemos todos los folders
  var folders = DriveApp.getFolders();
  
  //Opcion3: Obtenemos todos los folders con un cierto nombre
  var folders = DriveApp.getFoldersByName("bllbalabbla");
  
  //En la opcion 2 y 3 obtenedremos un iterador.
  //Si queremos el primer folder de la lista solo tendriamos que hacer esto
  if(folders.hasNext())
  {
    folder = folders.next();
  }
  
  //NOTA: Podríamos hacer operaciones en todos los folders de la lista de esta manera
  /*
  while(folders.hasNext())
  {
     var folder = folders.next();
     
     //Aqui hariamos lo que quisieramos con cada folder
  }
  */
  
  return folder;
}

function GetFiles()
{
   var folder = GetFolder();
   
   //OPCION1: Sabemos el id del file que queremos obtener
   var file = DriveApp.getFileById("XXXXXX");
   
   //OPTION2: Obtenemos todos los ficheros con un cierto nombre
   var files = DriveApp.getFilesByName("blalblablbl");
   
   //OPTION3: Obtenemos todos los ficheros de un cierto tipo ( pdf, csv, docs,sheets, etc..)
   var files = DriveApp.getFilesByType(MimeType.PDF);
   
  //En la opcion 2 y 3 obtenedremos un iterador.
  //NOTA: Podriamos hacer operaciones en todos los files de la lista de esta manera
  /*
  while(files.hasNext())
  {
     var file = files.next();
     
     //Aqui hariamos lo que quisieramos con cada file
  }
  */
  
  //Todas estas opciones se pueden hacer cambiando DriveApp por un folder
  /*
  var files = folder.getFilesByName("blalblablbl");
  var files = folder.getFilesByType(MimeType.PDF);
  */
}


Una vez esto lo tenemos claro os dejo un código que os permitirá obtener todos los ficheros de una carpeta de forma recursiva ( es decir, irá abriendo todas las carpetas que haya dentro para ir buscando hasta el último fichero:


function TestRecursive()
{
   var folder = DriveApp.getFolderById("XXXXXXXXX");
   GetFilesRecursive(folder);
}

function GetFilesRecursive(folder)
{
   var folders = folder.getFolders();
   while(folders.hasNext())
   {
     var f = folders.next();
     GetFilesRecursive(f);
   }
   
   var files = folder.getFiles();
   while(files.hasNext())
   {
     var f = files.next();
     Logger.log(f.getName());
   }
}

Espero que os sirva, no vaciléis en hacerme llegar vuestras dudas

Nos vemos


4 comentarios:

  1. Muy util e interesante el último ejemplo para poder recuperar todo los ficheros de una carpeta de forma recursiva. Lo que no logro realizar, es enviar los datos a una Spreadsheet. Agradezco tus consejos

    ResponderEliminar
    Respuestas
    1. Creo q este link te irá bien: https://www.tutorialesgoogleappscripts.com/p/como-usar-google-apps-scripts-en-hojas.html Los primeros artículos son los más básicos y creo q son los que más te ayudarán. Cualquier cosa, ya lo sabes.

      Eliminar
    2. Necesito traer a una hoja de calculo todos los archivos que hay en una carpeta y sus subcarpetas, arme el script pero solo pero solo me trae los archivos de la carpeta no logro que me traiga los archivos de las subcarpetas.

      function ObtenerArchivos()
      {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("hoja1");
      var cabecera = sheet.getRange("A1:C1");
      var titulos = cabecera.setValues([["Nombre","Dirección URL","Tipo"]]);
      var folder = DriveApp.getFolderById("XXXXX");
      var folders = folder.getFolders();
      while(folders.hasNext())
      {
      var f = folders.next();

      }

      var files = folder.getFiles();
      var i = 1;
      while (files.hasNext()) {
      var file = files.next();
      sheet.getRange(i+1, 1, 1, 3).setValues([[file.getName(),file.getUrl(),file.getMimeType()]]);
      i++;

      }
      }

      Eliminar
    3. Por lo que me parece entender, no estas haciendo nada con las carpetas. Fijate que en el while de folders.hasNext() no estás haciendo nada. Por lo tanto, solo te obtendrá los ficheros de la carpeta principal. Has de llamar a la función de forma recursiva pasandole una carpeta a la función. Vuelvete a mirar el código del post y verás q está diferente de como lo tienes. Avisame si no lo ves claro. Nos vemos!

      Eliminar

Tal vez te interese