El Profe Arci – Mtro. Fernando Arciniega –

Crea carpetas en lote para Google Drive y obtén su enlace individual

Publicado el 3 junio, 2025
por Mtro. Fernando Omar Arciniega Martínez

Crea carpetas en lote para Google Drive y obtén su enlace individual

Automatiza Google Drive: Crea y Encuentra Carpetas con Apps Script 🚀

¡Hola, colegas docentes y apasionados de la tecnología! ¿Alguna vez han sentido que su Google Drive se convierte en un laberinto de carpetas, especialmente cuando gestionan proyectos con muchos alumnos o grupos? La organización digital es clave, pero a veces, la creación manual y la búsqueda de carpetas específicas pueden consumir un tiempo precioso que podríamos dedicar a lo que realmente importa: ¡enseñar y aprender!

Pero, ¿qué pasaría si les dijera que existe una herramienta poderosa, ya integrada en el ecosistema de Google, que puede hacer todo ese trabajo pesado por ustedes? Prepárense para descubrir el potencial de Google Apps Script y cómo puede transformar la gestión de sus archivos en Google Drive.

¿Qué es Google Apps Script? 💡

Google Apps Script es una plataforma de desarrollo basada en la nube que permite automatizar tareas, integrar servicios de Google (como Drive, Sheets, Docs, Gmail) y crear aplicaciones web ligeras. Es un lenguaje de programación (JavaScript) que se ejecuta en los servidores de Google, lo que significa que no necesitas instalar nada en tu computadora. Para nosotros, los docentes, es como tener un asistente digital que puede hacer magia con nuestros datos y documentos.

¿Por Qué Automatizar Carpetas en Google Drive? 📂

La automatización no es solo para expertos en programación; es una habilidad esencial en la era digital. Para un docente, significa:

  • Ahorro de Tiempo: Olvídate de crear carpetas una por una para cada alumno o proyecto.
  • Consistencia: Asegura que todas las carpetas tengan la misma estructura y nombres, evitando errores manuales.
  • Eficiencia: Libera tu mente para tareas más creativas y pedagógicas.
  • Organización: Mantén tu Drive impecable y fácilmente navegable.

Imagina tener una carpeta principal para tu “Generación 2022-2025” y dentro de ella, carpetas para cada alumno. ¿Cómo crear una subcarpeta estandarizada, como “Presentacion” o “Memoria de trabajo”, dentro de cada una de ellas de forma masiva? ¡Google Apps Script es la respuesta!

Creación de Carpetas por Lote en Google Drive Usando Google Sheets

Este método es ideal porque puedes preparar una lista de los nombres de las carpetas que deseas crear en una hoja de cálculo, y el script leerá esa lista para generarlas automáticamente en la ubicación de Drive que especifiques.

1. Prepara tu Hoja de Cálculo de Google Sheets

Crea una nueva hoja de cálculo (o usa una existente) y en una columna, lista todos los nombres de las carpetas que quieres crear.

Dirigete a tu drive y haz clic en:

Nuevo > Hoja de cálculo de Google

En esa hoja de cálculo, escribe en la columna A, los nombres que llevarán las carpetas, en este caso la de los alumnos (sin encabezados):

Dentro de tu Drive crea la carpeta “Padre” la que contendrá las carpetas de los alumnos:

En la parte superior del navegador, en la barra de direcciones, visualiza el ID de esa carpeta, lo ocuparemos más adelante, se encuentra en seguida de https://drive.google.com/drive/folders/ son todos los dígitos que aparecen después del link:

2. El Script de Google Apps Script

Ahora, abre el editor de Apps Script desde tu hoja de cálculo (o desde script.google.com y asócialo a tu hoja). en tu hoja de cálculo, haz clic en: Extensiones > Apps Script

Escribe un nombre a tu proyecto:

Yo le puse “Carpetas en lote”

Vas a pegar el siguiente código, reemplazando las líneas que tiene por default el proyecto:

function crearCarpetasPorLote() {
  // *** CONFIGURACIÓN NECESARIA ***

  // 1. ID de la carpeta PADRE donde se crearán las nuevas carpetas.
  //    Puedes encontrar este ID en la URL de la carpeta en Google Drive.
  //    Ejemplo: https://drive.google.com/drive/folders/ESTE_ES_EL_ID
  const idCarpetaPadre = "TU_ID_DE_LA_CARPETA_PADRE_AQUI"; // ¡REEMPLAZA ESTO!

  // 2. Nombre de la hoja en tu Google Sheet donde están los nombres de las carpetas.
  const nombreHoja = "Hoja1"; // O el nombre de tu hoja, ej: "NombresCarpetas"

  // 3. Número de la columna donde se encuentran los nombres de las carpetas.
  //    (1 para la columna A, 2 para la B, etc.)
  const columnaNombres = 1; // Columna A

  // 4. Fila desde la que el script debe empezar a leer los nombres.
  //    Si tienes encabezados en la primera fila, usa 2. Si los nombres empiezan en la fila 1, usa 1.
  const filaInicio = 1;

  // --- FIN DE LA CONFIGURACIÓN ---

  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getSheetByName(nombreHoja);

  if (!sheet) {
    Logger.log(`ERROR: No se encontró la hoja con el nombre "${nombreHoja}".`);
    Browser.msgBox('Error', `No se encontró la hoja con el nombre "${nombreHoja}". Por favor, verifica la configuración.`, Browser.Buttons.OK);
    return;
  }

  const ultimaFila = sheet.getLastRow();
  if (ultimaFila < filaInicio) {
    Logger.log(`No hay nombres de carpetas para leer en la hoja "${nombreHoja}" a partir de la fila ${filaInicio}.`);
    Browser.msgBox('Información', `No hay nombres de carpetas para leer en la hoja "${nombreHoja}" a partir de la fila ${filaInicio}.`, Browser.Buttons.OK);
    return;
  }

  let parentFolder;
  try {
    parentFolder = DriveApp.getFolderById(idCarpetaPadre);
  } catch (e) {
    Logger.log(`ERROR: No se pudo encontrar la carpeta padre con ID: ${idCarpetaPadre}. Detalles: ${e.message}`);
    Browser.msgBox('Error', `No se pudo encontrar la carpeta padre con ID: "${idCarpetaPadre}". Por favor, verifica el ID y los permisos.`, Browser.Buttons.OK);
    return;
  }

  Logger.log(`--- Creando Carpetas en: "${parentFolder.getName()}" (ID: ${parentFolder.getId()}) ---`);

  let carpetasCreadas = 0;
  let carpetasExistentes = 0;
  let nombresVacios = 0;

  // Leer todos los nombres de una vez para mayor eficiencia
  const nombresDeCarpetas = sheet.getRange(filaInicio, columnaNombres, ultimaFila - filaInicio + 1, 1).getValues();

  for (let i = 0; i < nombresDeCarpetas.length; i++) {
    const folderName = nombresDeCarpetas[i][0] ? nombresDeCarpetas[i][0].toString().trim() : ''; // Asegura que es string y elimina espacios

    if (folderName === "") {
      Logger.log(`Fila ${filaInicio + i}: Nombre de carpeta vacío. Saltando.`);
      nombresVacios++;
      continue; // Saltar a la siguiente iteración si el nombre está vacío
    }

    // Verificar si la carpeta ya existe en la carpeta padre
    const existingFolders = parentFolder.getFoldersByName(folderName);
    if (existingFolders.hasNext()) {
      Logger.log(`Fila ${filaInicio + i}: La carpeta "${folderName}" ya existe. Saltando creación.`);
      carpetasExistentes++;
    } else {
      try {
        parentFolder.createFolder(folderName);
        Logger.log(`Fila ${filaInicio + i}: Carpeta "${folderName}" creada exitosamente.`);
        carpetasCreadas++;
      } catch (e) {
        Logger.log(`Fila ${filaInicio + i}: ERROR al crear la carpeta "${folderName}". Detalles: ${e.message}`);
        Browser.msgBox('Error', `Ocurrió un error al crear la carpeta "${folderName}". Revisa el registro.`, Browser.Buttons.OK);
      }
    }
  }

  Logger.log(`\n--- Resumen del Proceso ---`);
  Logger.log(`Carpetas creadas: ${carpetasCreadas}`);
  Logger.log(`Carpetas que ya existían: ${carpetasExistentes}`);
  Logger.log(`Nombres de carpeta vacíos/ignorados: ${nombresVacios}`);
  Logger.log(`Proceso completado.`);

  Browser.msgBox('Proceso Completado',
                 `Se han creado ${carpetasCreadas} carpetas nuevas.\n` +
                 `${carpetasExistentes} carpetas ya existían.\n` +
                 `Revisa el registro de ejecución para más detalles.`,
                 Browser.Buttons.OK);
}

Recuerda reemplazar el ID en la línea 7, es el único cambio que tienes que hacer.

Haz clic en el ícono de guardar proyecto:

Ejecuta el Script: En la barra de herramientas del editor, haz clic en el botón de “Ejecutar” (el icono de “Play”).

Autoriza el Script (solo la primera vez): La primera vez que lo ejecutes, Google te pedirá que autorices el script para acceder a tu Google Drive y a tus hojas de cálculo. Sigue las instrucciones en pantalla para conceder los permisos. Es un proceso estándar y seguro.

Si te sale una advetencia, haz clic en:

Luego clic en Continuar.

El script comenzará a crear las carpetas:

Una vez que el proceso esté completado:

Ve a la hoja de calculo para confirmar:

Revisa tu carpeta en Drive y deberán aparecer todas las carpetas creadas (si es necesario actualiza con F5 el navegador):


Obtener Enlaces de Carpetas en Google Sheets

Este script te permitirá listar todas las subcarpetas de una carpeta principal que tú definas (por ejemplo, tu carpeta de “Generación” o cualquier otra), y volcar sus nombres y sus URLs directamente en la hoja de cálculo de Google Sheets que tengas abierta.

1. El Script de Google Apps Script

Tomando el ejemplo anterior, vamos a crear una segunda hoja en nuestro Libro de Google Sheets, le voy a poner el nombre de Enlaces:

Nuevamente hacemos clic en Extensiones>Apps Scripts:

Esto actualiza el proyecto, damos clic en el simbolo + para agregar un nuevo archivo (ya que previamente tiene permisos configurados):

Seleccionamos Secuencia de comandos:

Y le ponemos un nombre al archivo, en este caso se llamará Enlaces:

Pega el siguiente código, recuerda configurar unicamente el ID:

function obtenerNombresYEnlacesDeCarpetas() {
  // *** CONFIGURACIÓN NECESARIA ***

  // ID de la carpeta PADRE de la cual deseas obtener los nombres y enlaces de sus subcarpetas.
  // ¡Asegúrate de reemplazar "TU_ID_DE_LA_CARPETA_PADRE_AQUI" con el ID real!
  // Puedes encontrar este ID en la URL de la carpeta en Google Drive.
  // Ejemplo: https://drive.google.com/drive/folders/ESTE_ES_EL_ID
  const idCarpetaPadre = "TU_ID_DE_LA_CARPETA_PADRE_AQUI"; // <<-- ¡REEMPLAZA ESTO!

  // --- FIN DE LA CONFIGURACIÓN ---

  let parentFolder;
  try {
    parentFolder = DriveApp.getFolderById(idCarpetaPadre);
  } catch (e) {
    Logger.log(`ERROR: No se pudo encontrar la carpeta padre con ID: ${idCarpetaPadre}. Detalles: ${e.message}`);
    Browser.msgBox('Error', `No se pudo encontrar la carpeta padre con ID: "${idCarpetaPadre}". Por favor, verifica el ID y los permisos.`, Browser.Buttons.OK);
    return;
  }

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  Logger.log(`--- Obteniendo Nombres y Enlaces de Carpetas en: "${parentFolder.getName()}" (ID: ${parentFolder.getId()}) ---`);

  let resultados = [];
  // Añadir encabezados a la primera fila de la hoja de cálculo
  resultados.push(["Nombre de la Carpeta", "Enlace"]);

  const subFolders = parentFolder.getFolders();
  let contadorCarpetas = 0;

  while (subFolders.hasNext()) {
    const folder = subFolders.next();
    const folderName = folder.getName();
    const folderUrl = folder.getUrl();

    resultados.push([folderName, folderUrl]);
    Logger.log(`- Nombre: ${folderName}, Enlace: ${folderUrl}`);
    contadorCarpetas++;
  }

  if (contadorCarpetas === 0) {
    Logger.log('No se encontraron subcarpetas dentro de la carpeta padre especificada.');
    Browser.msgBox('Información', 'No se encontraron subcarpetas dentro de la carpeta padre especificada.', Browser.Buttons.OK);
  } else {
    // Limpiar el contenido existente de la hoja antes de pegar los nuevos datos
    // ¡ADVERTENCIA! Esto borrará todo el contenido actual de la hoja activa.
    sheet.clearContents();
    
    // Pegar los resultados en la hoja de cálculo activa, comenzando desde la celda A1
    sheet.getRange(1, 1, resultados.length, resultados[0].length).setValues(resultados);
    Logger.log(`\nProceso completado. Se encontraron ${contadorCarpetas} carpetas.`);
    Browser.msgBox('Proceso Completado',
                   `Se han listado ${contadorCarpetas} carpetas.\n` +
                   `Revisa la hoja de cálculo activa para ver los nombres y enlaces.`,
                   Browser.Buttons.OK);
  }
}

Recuerda dónde se obtiene el ID:

Clic en Guardar, y luego Ejecutar:

Una vez completado el proceso:

Regresa a la hoja de calculo para confirmar:

Y verás que se actualiza tu hoja de cálculo con el nombre de las carpetas (ALumnos) y el link de las mismas:

Este script es una herramienta muy útil para mantener un registro organizado de tus carpetas de Drive directamente en una hoja de cálculo. ¡Espero que te sea de gran ayuda!



Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *