Hoy les muestro como usar Google Apps Script para crear fácil y rápidamente carpetas con los parámetros que ustedes quieran.
Aquí te dejo la explicación en video
Cómo se crea una carpeta en Google Drive con Google Apps Script
Hay varias maneras de crear maneras manualmente en Google Drive, pero eso es tema de otro artículo, hoy nos interesa, es como crear carpetas desde Google Apps Script. Para esto, lo primero que necesitamos, es conectarnos con el servicio DriveApp
En realidad, si son nuevos a Google Apps Script, tenemos que acceder al editor. Para esto sigue los siguientes pasos:
- Accede a tu cuenta de Google
- Crea un nuevo archivo de Google Sheets (Aquí varias maneras de hacerlo)
- Ve a «Extensiones» > «Google Apps Script»
- Una vez allí, renombra el proyecto como «Creador de Carpetas»
- Renombra la función como «crearCarpeta»
Dentro de la función, vamos ahora si a acceder al servicio DriveApp y a llamar al método createFolder(nombre), donde el argumento nombre es el nombre que le quieres poner a la carpeta
function crearCarpeta() {
DriveApp.createFolder("Mi primera carpeta")
}
Sencillo, ¿No?
Lo único a tener en cuenta con este método, es que siempre lo va a crear en la carpeta raíz o «Mi Unidad» de Google Drive
La verdad es una mejor práctica siempre especificar la carpeta en la que se va a crear, para esto vamos primero a definir una variable carpeta, donde escogemos la carpeta y después aplicamos el método createFolder desde esa carpeta en vez de desde el DriveApp
Crear carpeta dentro de otra carpeta en Google Drive
En este ejemplo, lo hacemos otra vez desde la raíz, pero especificando que así lo queremos. Para esto, vas a usar el método getRootFolder para acceder a la carpeta raíz. Quedaría así:
function crearCarpetaEnRaiz() {
var carpeta=DriveApp.getRootFolder()
carpeta.createFolder("Mi primera carpeta")
}
En este caso nos aseguramos que queda en la carpeta que queremos.
Si quieres ir un paso más allá, en vez de .getRootFolder, usas .getFolderById para especificar la carpeta que quieras.
Para esto, necesitas saber la identificación de tu carpeta. Esta la traes desde la url de la carpeta en Google Drive
Ahora usas ese ID para el método getFolderById, asi:
function crearCarpeta() {
var carpeta=DriveApp.getFolderById("1HDXTZ_qXZjDy_UcbJwvuHarEk7iS5X20")
carpeta.createFolder("Mi primera carpeta")
}
Crear carpeta con subcarpetas
Ya conociendo el método anterior, podemos simultáneamente crear carpetas y subcarpetas.
Par esto, guardamos la recién creada carpeta en una variable nuevaCarpeta, y después volvemos a usar el mismo método así:
function crearSubcarpetasEnCarpetaDefinida() {
var carpeta=DriveApp.getFolderById("1HDXTZ_qXZjDy_UcbJwvuHarEk7iS5X20")
var nuevaCarpeta=carpeta.createFolder("Mi primera carpeta")
nuevacarpeta.createFolder("Mi primera subcarpeta")
}
Y así mismo, podrías crear todas las sub carpetas que quisieras, simplemente repitiendo esa línea
function crearVariasSubcarpetas() {
var carpeta=DriveApp.getFolderById("1HDXTZ_qXZjDy_UcbJwvuHarEk7iS5X20")
var nuevaCarpeta=carpeta.createFolder("Mi primera carpeta")
nuevacarpeta.createFolder("Subcarpeta 1")
nuevacarpeta.createFolder("Subcarpeta 2")
nuevacarpeta.createFolder("Subcarpeta 3")
nuevacarpeta.createFolder("Subcarpeta 4")
}
Esto lo podrías hacer de manera más eficiente usando un bucle, así
function crearVariasSubcarpetas() {
var carpeta=DriveApp.getFolderById("1HDXTZ_qXZjDy_UcbJwvuHarEk7iS5X20")
var nuevaCarpeta=carpeta.createFolder("Mi primera carpeta")
for(var i=1;i<=5;i++){
nuevacarpeta.createFolder("Subcarpeta "+i)
}
}
Crear carpeta desde Sheets
Podemos ahora, aplicar estos mismos conceptos, pero usando títulos y listas desde Google Sheets
Digamos que tengamos en nuestra hoja «Datos», en la celda B2, el nombre de la carpeta a crear. Entonces, debemos conectarnos a esta hoja y a esta celda para extraer el nombre, y luego si utilizar los métodos que ya vimos.
Queda´ría algo así
function crearCarpetaDesdeSheets() {
var libro=SpreadsheetApp.getActiveSpreadsheet()
var hoja=libro.getSheetByName("Datos")
var nombreMaestra=hoja.getRange("B2").getValue()
DriveApp.createFolder(nombreMaestra)
}
Del mismo modo que ya hicimos antes, podemos crear varias carpetas con el mismo nombre usando un bucle, así:
function crearVariasCarpetasDesdeSheets() {
var libro=SpreadsheetApp.getActiveSpreadsheet()
var hoja=libro.getSheetByName("Datos")
var nombreCarpeta=hoja.getRange("B2").getValue()
for(var i=1;i<=5;i++){
DriveApp.createFolder(nombreCarpeta)
}
}
Recuerda que así estás creando todas las carpetas en la raíz. Si quisieras crearlas en una carpeta específica, usamos getFolderById así:
function crearVariasCarpetasDesdeSheetsEnCarpetaMaestra() {
var carpetaMaestra=DriveApp.getFolderById("1HDXTZ_qXZjDy_UcbJwvuHarEk7iS5X20")
var libro=SpreadsheetApp.getActiveSpreadsheet()
var hoja=libro.getSheetByName("Datos")
var nombreCarpeta=hoja.getRange("B2").getValue()
for(var i=1;i<=5;i++){
carpetaMaestra.createFolder(nombreCarpeta)
}
}
Resumen
Vimos en este artículo, varios métodos para crear carpetas automáticamente con la ayuda de Google Sheets y Google Apps Script. Ya la restricción es nuestra imaginación
Prueba
Hola Juan, excelente tu tutorial, tengo un problema con el script o tal vez sea otra cosa. La idea era que desde un formulario que se llene se cree una carpeta por cada campo completado. Pero cada vez que lo hago tarda mucho en mostrar la carpeta en el Drive. Este es el Script
function crearCarpetasAPartirDeUnListado() {
var carpeta=DriveApp.getFolderById(«1TJ8VTR29O_257dy6uwjj6ytGiZtxYSlm»)
var libro=SpreadsheetApp.getActiveSpreadsheet() ;
var hoja=libro.getSheetByName(«Trabajos»);
var numFilas=hoja.getLastRow()-1;
var numColumnas=hoja.getLastColumn();
var rango=hoja.getRange(2,1,numFilas).getValues();
for (var i = 0; i < numFilas; i++){
var carpetaactual=carpeta.createFolder(rango[i][0])
}
}
function onOpen (){
var menu=SpreadsheetApp.getUi().createMenu("Trabajos")
menu.addItem("📁 Crear carpetas","crearCarpetasAPartirDeUnListado")
menu.addToUi();
}
Lo estas haciendo bien.
Lo que pasa es que crear una carpeta es un proceso demorado comparado a otros
Saludos!