Como obtener el id de un fichero con Google Apps Script


En muchas ocasiones podemos necesitar el id de un fichero de Drive y  a veces no está claro como obtenerlo. En este artículo te mostraré todas las maneras que hay para obtener el id de un fichero de Drive con Google Apps Script.

Caso 1: Cómo obtener el id de un fichero de Drive teniendo su url
No existe función que nos permita abrir un fichero de drive (genérico) a través de su url así que la única manera de conseguir la id es directamente sacandolo de la url.
El código lo tenéis a continuación:

function GetIdFromUrl(url)
{
   return url.split("/")[5]; 
}

Caso 2: Cómo obtener el id de un spreadsheet a través de su url
Si nos interesa saber el id de un spreadsheet podriamos utilizar el código del caso 1, pero realmente podriamos hacer el código un poco más "limpio":

function GetIdFromSpreadsheet(url)
{
   return SpreadsheetApp.openByUrl(url).getId();
}

Podríamos hacer lo mismo para el caso de documentos con un código casi idéntico:

function GetIdFromDocument(url)
{
   return DocumentApp.openByUrl(url).getId();
}

Caso 3. Cómo obtener el id de un documento de Drive a través de su nombre
Si necesitáis obtener el id de un documento de Drive del cual solo tenéis el nombre una forma fácil de hacerlo seria con el siguiente código:

function GetIdFromName(name)
{
   var files = DriveApp.getFilesByName(name);
 
   if( files.hasNext() )
   {
      return files.next().getId(); 
   }
 
   return undefined;
}
El único problema de obtener el id de un fichero con este sistema es que o bien solo obtendremos el id del primer fichero con este nombre o bien tendremos que ponerle alguna condición adicional a la lógica ( fecha de creación, tipo de fichero, etc...)

Caso 4. Cómo obtener el id de un documento de Drive a través de su nombre sabiendo que está en una carpeta en concreto
Una versión mejorada del punto 3 es buscar un documento por su nombre sabiendo que está en una carpeta en concreto. La idea es la misma, pero usando las funciones del folder en concreto donde estemos.

function GetIdFromNameInFolder(name,folder)
{
   var files = folder.getFilesByName(name);
 
   if( files.hasNext() )
   {
      return files.next().getId(); 
   }
 
   return undefined;
}

Caso 5. Cómo obtener el id de un documento de Drive sabiendo el nombre del fichero y de la carpeta que lo contiene
Básicamente esta opción es una pequeña mejora respecto al código anterior:

function GetIdFromFileNameAndFolderName(foldername,filename)
{
   var folders = DriveApp.getFoldersByName(foldername);
   var folder = null;
 
   if( folders.hasNext() )
   {
     folder = folders.next();
   }
 
   if( folder != null )
   {
     return GetIdFromNameInFolder(filename,folder);
   }
 
   return undefined;
}

Se os ocurre algún otro caso en que sea necesario hacer un código diferente para obtener el id de un documento de Drive?

No vaciléis en hacerme llegar vuestras dudas

Nos vemos

P.D: Tal vez te interese hacer el paso contrario, como obtener el nombre de un fichero teniendo el id, con Google Apps Script

5 comentarios:

  1. HOLA!
    Tengo el siguiente script en un archivo HCG:

    function BuscarCarpetaEnDrive(nombrecarpeta)
    {
    var libro=SpreadsheetApp.getActive();
    var carpetas=DriveApp.getFoldersByName(nombrecarpeta);
    if(carpetas.Hasnext())
    {
    return("Carpeta "+nombrecarpeta+"< EXISTE!!>");
    }
    else
    {
    return("Carpeta: "+nombrecarpeta+"< NO EXISTE!!>");
    }
    }
    ###############

    Celda A1="REGIONES" (texto)
    Celda A2="=BuscarCarpetaEnDrive(A1)" (fórmula)

    en la celda A2 ocurre el siguiente error:
    Error
    Exception: You do not have permission to call DriveApp.getFoldersByName.
    Required permissions: (https://www.googleapis.com/auth/drive.readonly |ó https://www.googleapis.com/auth/drive)
    (línea 4).


    que debería hacer para resolver dicho error???
    Muchas Gracias!!!

    Victor

    ResponderEliminar
  2. Hola teniendo el id de los ficheros de drive que los tengo en un columna de un spredsheet, como obtengo el nombre real del fichero? O sea el name? Gracias

    ResponderEliminar
    Respuestas
    1. Hola Carina... algo como esto? https://www.tutorialesgoogleappscripts.com/2021/07/como-obtener-el-nombre-de-un-fichero-con-google-apps-script.html Ya me dirás como te ha ido, nos vemos!

      Eliminar
  3. Hola, realice un formulario en el que las personas pueden subir archivos y esos archivos necesito moverlos a carpetas que se crean de manera automática (por cada persona), tengo los url respectivos en la hoja generada por el formulario

    ResponderEliminar
    Respuestas
    1. las carpetas se crean al responder el formulario esta programado

      Eliminar

Tal vez te interese