Skip to content

Instantly share code, notes, and snippets.

@Dms-Codee
Last active October 11, 2025 21:39
Show Gist options
  • Select an option

  • Save Dms-Codee/bea91ccd1f1162fdc2aec04b31c89426 to your computer and use it in GitHub Desktop.

Select an option

Save Dms-Codee/bea91ccd1f1162fdc2aec04b31c89426 to your computer and use it in GitHub Desktop.
Google Apps Script Utils 🔴🟡🟢🔵

Google Apps Script Utils 🔴🟡🟢🔵

Algunas funciones que pueden ayudarte o ahorrarte algo de tiempo.

/**
* @fileoverview Script de Google Apps Script que obtiene información sobre las subcarpetas
* dentro de una carpeta específica de Google Drive utilizando su ID.
*/
/**
* ID de la carpeta principal en Google Drive de la cual se obtendrá la información.
* Reemplaza el valor con el ID de tu carpeta.
* @type {string}
*/
const idFolder = '';
/**
* Name: driveInfoFolders
*
* Description: Obtiene información de todas las subcarpetas dentro de una carpeta de Drive específica.
*
* Esta función accede a una carpeta de Google Drive a través de su ID (`idFolder`),
* itera sobre todas las subcarpetas contenidas dentro de ella y genera un arreglo de objetos
* con los datos más relevantes de cada carpeta encontrada: nombre, URL y descripción.
*
* @returns {Array<{nombreFolder: string, url: string, descripcion: string}>}
* Un arreglo con la información de cada subcarpeta encontrada.
*
* @example
* // Ejemplo de uso
* const folders = driveInfoFolders();
* Logger.log(folders);
*/
function driveInfoFolders() {
// Obtiene la carpeta principal usando su ID
var folderMain = DriveApp.getFolderById(idFolder);
// Obtiene un iterador con todas las subcarpetas dentro de la carpeta principal
var folders = folderMain.getFolders();
// Arreglo donde se almacenará la información de cada subcarpeta
var listado = [];
// Recorre todas las subcarpetas y extrae sus datos
while (folders.hasNext()) {
var folder = folders.next();
var item = {
nombreFolder: folder.getName(),
url: folder.getUrl(),
descripcion: folder.getDescription()
};
listado.push(item);
}
// Devuelve el listado con la información recopilada
return listado;
}
/**
* @fileoverview Script de Google Apps Script que obtiene los datos de una pestaña específica
* dentro de una hoja de cálculo de Google Sheets utilizando su ID y nombre de pestaña.
*/
/**
* ID de la hoja de cálculo (Spreadsheet) en Google Sheets.
* Reemplaza el valor con el ID de tu documento.
* @type {string}
*/
const idSpreadsheet = "";
/**
* Nombre (o índice numérico) de la pestaña dentro de la hoja de cálculo.
* @type {string}
*/
const sheetName = "";
/**
* Obtiene todos los datos de una pestaña específica dentro de una hoja de cálculo de Google Sheets.
*
* Esta función abre una hoja de cálculo mediante su ID (`idSpreadsheet`), accede a la pestaña
* indicada (`sheetName`) y devuelve una matriz con todos los valores de su rango de datos.
*
* @param {string} idSpreadSheet - ID de la hoja de cálculo de Google Sheets.
* @param {string} sheetName - Nombre de la pestaña (también puede ser su índice numérico).
* @returns {Array<Array<*>>} Una matriz bidimensional con los valores de las celdas.
* Cada subarreglo representa una fila de la hoja.
*
* @example
* // Ejemplo de uso:
* const data = getSheetData(idSpreadsheet, sheetName);
* Logger.log(data);
*
* // Si deseas eliminar los encabezados, puedes usar:
* // data.shift();
*/
function getSheetData(idSpreadSheet, sheetName) {
// Abre la hoja de cálculo por su ID
const ss = SpreadsheetApp.openById(idSpreadSheet);
// Obtiene la pestaña específica por nombre y sus valores
const data = ss.getSheetByName(sheetName).getDataRange().getValues();
// Si deseas eliminar los encabezados (primera fila), descomenta la siguiente línea:
// data.shift();
// Devuelve todos los valores de la pestaña
return data;
}
/**
* @fileoverview Función `doGet` de Google Apps Script que genera una interfaz web HTML
* a partir de una plantilla (archivo .html) y agrega las meta etiquetas necesarias
* para hacerla responsiva, compatible con frameworks como Bootstrap.
*/
/**
* Función de entrada principal (`doGet`) utilizada por los Web Apps de Google Apps Script.
*
* Esta función se ejecuta automáticamente cuando se accede al URL del Web App.
* Carga una plantilla HTML (por ejemplo `index.html`), la evalúa, establece un título
* para la página y agrega la metaetiqueta `viewport` para asegurar que la interfaz
* sea responsiva en dispositivos móviles.
*
* @returns {GoogleAppsScript.HTML.HtmlOutput}
* Un objeto `HtmlOutput` configurado con título y metaetiquetas, listo para mostrarse en el navegador.
*
* @example
* // Al desplegar el script como Web App, esta función se ejecutará automáticamente al abrir el enlace:
* // https://script.google.com/macros/s/AKfycbx1234567890/exec
*/
function doGet() {
// Crea una plantilla HTML a partir del archivo 'index.html' en el proyecto
var template = HtmlService.createTemplateFromFile('index');
// Evalúa la plantilla y establece el título de la página web
var html = template.evaluate().setTitle('ElTituloDeTuSitio');
// Crea un objeto HtmlOutput a partir del contenido generado
var htmlOutput = HtmlService.createHtmlOutput(html);
// Agrega una metaetiqueta 'viewport' para hacer el sitio responsivo (ideal para Bootstrap)
htmlOutput.addMetaTag('viewport', 'width=device-width, initial-scale=1');
// Devuelve el contenido HTML procesado y listo para renderizarse en el navegador
return htmlOutput;
}
/**
* @fileoverview Función de utilidad para convertir una URL de vista previa de Google Drive
* en una URL visible y utilizable dentro del atributo `src` de una etiqueta `<img>`.
*/
/**
* Convierte una URL de Google Drive en una URL directa para mostrar imágenes.
*
* Google Drive no proporciona por defecto enlaces directos a imágenes utilizables en HTML.
* Esta función toma una URL de un archivo almacenado en Drive, extrae el ID del archivo
* y construye una URL con el formato correcto para poder usarla como fuente (`src`)
* en una etiqueta `<img>`.
*
* @param {string} imgURL - URL original del archivo en Google Drive.
* Ejemplo de entrada:
* `https://drive.google.com/file/d/1A2B3C4D5E6F7G8H9I/view?usp=sharing`
*
* @returns {string} Una URL visible que puede utilizarse directamente en el atributo `src`
* de una etiqueta `<img>`.
* Ejemplo de salida:
* `https://drive.google.com/uc?export=view&id=1A2B3C4D5E6F7G8H9I`
*
* @example
* // Ejemplo de uso:
* const originalURL = "https://drive.google.com/file/d/1A2B3C4D5E6F7G8H9I/view?usp=sharing";
* const visibleURL = setImgUrl(originalURL);
* Logger.log(visibleURL);
* // Resultado:
* // https://drive.google.com/uc?export=view&id=1A2B3C4D5E6F7G8H9I
*/
function setImgUrl(imgURL) {
// Divide la URL por cada '/' para obtener las partes del enlace
let splitURL = imgURL.split('/');
// Extrae el ID del archivo (usualmente se encuentra después del sexto slash)
let getImgID = splitURL[5];
// Construye la URL visible y utilizable como fuente de imagen
let visibleURL = 'https://drive.google.com/uc?export=view&id=' + getImgID;
// Devuelve la nueva URL
return visibleURL;
}
/**
* @fileoverview Script de Google Apps Script que convierte una pestaña de Google Sheets
* en un JSON consumible mediante `fetch` u otras solicitudes HTTP.
*
* Incluye funciones para:
* - Obtener los datos de una hoja de cálculo.
* - Transformar los datos en un arreglo de objetos personalizados.
* - Exponer un endpoint web (`doGet`) que devuelve el JSON resultante.
*/
/**
* ID de la hoja de cálculo (Spreadsheet) en Google Sheets.
* Reemplaza el valor con el ID de tu documento.
* @type {string}
*/
const idSpreadsheet = "";
/**
* Nombre (o índice) de la pestaña dentro de la hoja de cálculo que se convertirá a JSON.
* @type {string}
*/
const sheetName = "";
/**
* Obtiene los datos de una pestaña específica y los convierte a formato JSON.
*
* Esta función abre la hoja de cálculo mediante su ID (`idSpreadsheet`),
* obtiene los valores de la pestaña indicada (`sheetName`),
* y convierte los datos en un objeto estructurado mediante `createObject()`.
*
* @param {string} idSpreadSheet - ID de la hoja de cálculo de Google Sheets.
* @param {string} sheetName - Nombre o índice de la pestaña a convertir.
* @returns {string} Una cadena JSON representando los datos de la hoja.
*
* @example
* // Ejemplo de uso:
* const jsonData = outputData(idSpreadsheet, sheetName);
* Logger.log(jsonData);
*/
function outputData(idSpreadSheet, sheetName) {
// Abre la hoja de cálculo por su ID
const ss = SpreadsheetApp.openById(idSpreadSheet);
// Obtiene los valores de todas las celdas dentro de la pestaña especificada
const data = ss.getSheetByName(sheetName).getDataRange().getValues();
// Si deseas eliminar los encabezados, descomenta la siguiente línea:
// data.shift();
// Convierte el arreglo bidimensional en un objeto estructurado
const object = createObject(data);
// Convierte el objeto final a formato JSON
const json = JSON.stringify(object);
// Devuelve el JSON como cadena
return json;
}
/**
* Construye un objeto estructurado a partir de los datos obtenidos de la hoja.
*
* Por defecto, genera un objeto con una propiedad `relatedObjs` que contiene
* un arreglo de objetos (uno por cada fila de la hoja).
*
* Esta función puede personalizarse para mapear las columnas de la hoja
* a propiedades específicas de cada objeto.
*
* @param {Array<Array<*>>} data - Datos de la hoja de cálculo obtenidos con `getValues()`.
* @returns {{relatedObjs: Array<Object>}} Objeto con un arreglo de elementos representando cada fila.
*
* @example
* // Ejemplo de personalización:
* // Si tu hoja tiene columnas: Nombre, Edad, País
* // puedes modificar dentro del forEach así:
* // let typeObj = { nombre: elemento[0], edad: elemento[1], pais: elemento[2] };
*/
function createObject(data) {
// Crea el objeto contenedor con una propiedad tipo array
let object = { relatedObjs: [] };
// Recorre cada fila del arreglo de datos
data.forEach(elemento => {
// Crea un objeto temporal con las propiedades de cada fila (personalizable)
let typeObj = {
// nombre: elemento[0],
// edad: elemento[1],
// pais: elemento[2]
};
// Agrega el objeto al arreglo principal
object.relatedObjs.push(typeObj);
});
// Devuelve el objeto estructurado
return object;
}
/**
* Función `doGet` que expone un endpoint público en formato JSON.
*
* Al desplegar el script como Web App, esta función se ejecuta al acceder a la URL pública,
* devolviendo la salida JSON del método `outputData()`.
*
* @returns {GoogleAppsScript.Content.TextOutput} Respuesta HTTP en formato JSON lista para ser consumida.
*
* @example
* // Ejemplo de consumo desde JavaScript:
* // fetch('https://script.google.com/macros/s/AKfycbx1234567890/exec')
* // .then(response => response.json())
* // .then(data => console.log(data));
*/
function doGet() {
// Genera la respuesta JSON a partir de los datos de la hoja
return ContentService
.createTextOutput(outputData(idSpreadsheet, sheetName))
.setMimeType(ContentService.MimeType.JSON);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment