0% encontró este documento útil (0 votos)
618 vistas48 páginas

Curso Completo de JavaScript en Google Apps Script

Cargado por

gaston zamorano
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
618 vistas48 páginas

Curso Completo de JavaScript en Google Apps Script

Cargado por

gaston zamorano
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

"Curso Completo de JavaScript en Google Apps Script:

Fundamentos, Funciones, Control de Flujo y


Manipulación de Hojas de Cálculo"
Clase 1 – Introducción y primer script básico

🎯 Objetivo:

 Entender qué es Google Apps Script.


 Crear tu primer script que escribe texto en una celda.

🧠 Concepto clave

Google Apps Script es un lenguaje basado en JavaScript, diseñado para automatizar


tareas en Google Workspace (Sheets, Docs, Gmail, etc.).

Se programa directamente desde Extensiones > Apps Script en una hoja de cálculo de
Google.

🛠 Paso a paso: tu primer script

1. Abrí una hoja de cálculo de Google Sheets.


2. Menú: Extensiones > Apps Script.
3. Eliminá todo el código y pegá esto:

javascript
CopiarEditar
function escribirNombre() {
const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
hoja.getRange("A1").setValue("Hola, Gaston");
}

4. Hacé clic en el botón ▶️“Ejecutar”.

🧾 ¿Qué hace esto?

 Accede a la hoja activa.


 Escribe el texto "Hola, Gaston" en la celda A1.
✍️Ejercicio práctico

1. Cambiá el texto para que escriba tu apellido en la celda B1.


2. Escribí otro mensaje personalizado en la celda C1.
3. Usá setFontColor("red") para cambiar el color del texto en la celda A1.

¿Querés que te corrija el código si lo hacés? Podes pegármelo acá y te lo reviso.

✅ Próxima clase:

 Uso de variables.
 Uso de celdas dinámicas.
 Escribir en varias celdas con un bucle for.

Clase 2 – Variables, celdas dinámicas y bucles

🎯 Objetivo:

 Aprender a usar variables.


 Usar valores dinámicos en celdas.
 Escribir en varias celdas usando un bucle for.

🧠 Conceptos clave

 Una variable guarda un valor temporal:

javascript
CopiarEditar
let nombre = "Gaston";

 Podemos combinar texto y variables:

javascript
CopiarEditar
hoja.getRange("A1").setValue("Hola, " + nombre);

 Un bucle for nos permite repetir instrucciones:

javascript
CopiarEditar
for (let i = 1; i <= 5; i++) {
hoja.getRange(i, 1).setValue("Fila " + i);
}

🛠 Código ejemplo:
javascript
CopiarEditar
function llenarNombres() {
const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
let nombre = "Gaston";

for (let i = 1; i <= 5; i++) {


hoja.getRange(i, 1).setValue(nombre + " " + i);
hoja.getRange(i, 1).setFontColor("blue");
}
}

🔍 ¿Qué hace esto?

 Escribe "Gaston 1", "Gaston 2"... hasta "Gaston 5" en la columna A.


 Cambia el color de cada celda a azul.

✍️Ejercicio práctico

1. Cambiá "Gaston" por otro nombre o texto personalizado.


2. Usá setBackground("yellow") para darle color de fondo a cada celda.
3. Escribí los textos en la columna B en lugar de la A.

🧪 Ejercicio adicional (opcional):

 Cargá un array de colores y escribí "Gaston" en distintas filas con diferentes colores de
texto.

javascript
CopiarEditar
const colores = ["red", "blue", "green", "purple", "orange"];

Clase 3 – Lectura de celdas y estructuras condicionales

🎯 Objetivo:

 Leer valores desde una celda.


 Usar if para tomar decisiones.
 Mostrar alertas con Browser.msgBox().
🧠 Conceptos clave

 Leer una celda:

javascript
CopiarEditar
let valor = hoja.getRange("A1").getValue();

 Condicional if:

javascript
CopiarEditar
if (valor === "Gaston") {
// hacer algo
} else {
// hacer otra cosa
}

 Mostrar mensajes:

javascript
CopiarEditar
Browser.msgBox("Texto que quieras mostrar");

🛠 Ejemplo práctico
javascript
CopiarEditar
function verificarNombre() {
const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
let valor = hoja.getRange("A1").getValue();

if (valor === "Gaston") {


Browser.msgBox("¡Hola Gaston!");
hoja.getRange("A2").setValue("Bienvenido de nuevo.");
} else {
Browser.msgBox("Nombre no reconocido.");
hoja.getRange("A2").setValue("¿Quién sos?");
}
}

✍️Ejercicio práctico
1. Cambiá "Gaston" por tu nombre completo.
2. Hacé que se verifique si la celda B1 contiene "admin" y si es así escriba "Acceso
permitido" en B2, sino "Acceso denegado".
3. Agregá un setFontColor() diferente para cada caso.

Clase 4 – Recorrer múltiples celdas con matrices y bucles

🎯 Objetivo:

 Leer un rango completo de celdas como matriz.


 Usar un for para recorrer filas.
 Hacer búsquedas y acciones sobre listas de datos.

🧠 Conceptos clave

 Leer un rango de múltiples celdas:

javascript
CopiarEditar
let datos = hoja.getRange("A2:A10").getValues(); // devuelve una
matriz

 Acceder a cada valor dentro de un bucle:

javascript
CopiarEditar
for (let i = 0; i < datos.length; i++) {
let valor = datos[i][0]; // primera columna
// hacer algo con valor
}

🛠 Ejemplo práctico
javascript
CopiarEditar
function buscarNombreEnLista() {
const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
let datos = hoja.getRange("A2:A10").getValues(); // nombres en A2:A10
let encontrado = false;

for (let i = 0; i < datos.length; i++) {


if (datos[i][0] === "Gaston") {
hoja.getRange(i + 2, 2).setValue("✅ Encontrado");
encontrado = true;
}
}

if (!encontrado) {
Browser.msgBox("El nombre 'Gaston' no se encontró.");
}
}

🔍 ¿Qué hace este código?

 Lee la columna A, desde A2 a A10.


 Busca si hay alguna celda que contenga "Gaston".
 Si lo encuentra, escribe en la columna B correspondiente "✅ Encontrado".
 Si no lo encuentra, muestra un mensaje.

✍️Ejercicio práctico

1. Cambiá "Gaston" por otro nombre o palabra clave.


2. Agregá un color de fondo con setBackground("lightgreen") cuando lo encuentre.
3. Si el nombre se repite, que lo marque en todas las coincidencias, no solo la primera.

🧪 Ejercicio adicional (opcional):

 Cargá una lista de nombres en A2:A10 y escribí al lado su longitud (número de letras)
usando:

javascript
CopiarEditar

hoja.getRange(i + 2, 2).setValue(valor.length);

Clase 5 – Funciones personalizadas y eventos automáticos

🎯 Objetivo:

 Crear funciones personalizadas (=MISALUDO()) que se usan directamente en la hoja.


 Automatizar tareas con eventos como onEdit() o onOpen().

🧠 Parte 1: Funciones personalizadas


Estas funciones se escriben como fórmulas dentro de celdas.

javascript
CopiarEditar
function saludoPersonalizado(nombre) {
return "Hola, " + nombre + " 👋";
}

✅ ¿Cómo usarla?

1. Guardás el script.
2. En cualquier celda escribís:

arduino
CopiarEditar
=saludoPersonalizado("Carlos")

y devuelve:

CopiarEditar
Hola, Carlos 👋

🧠 Parte 2: Automatización con onEdit()

Esta función se ejecuta automáticamente cada vez que editás algo en la hoja.

javascript
CopiarEditar
function onEdit(e) {
const hoja = e.source.getActiveSheet();
const celda = e.range;

if (celda.getColumn() === 1 && celda.getRow() > 1) {


celda.offset(0, 1).setValue("Editado ✔️");
}
}

✅ ¿Qué hace?

 Si editás algo en la columna A (excepto A1), escribe "Editado ✔️


" en la columna B de esa
fila.

✍️Ejercicio práctico

1. Modificá el texto "Editado ✔️


" por otro mensaje.
2. Aplicá setFontColor() y setFontStyle() para personalizarlo.
3. Probá cambiar onEdit para que afecte solo una hoja específica (hoja.getName()).

Clase 6 – Menús personalizados y botones

🎯 Objetivo:

 Crear un menú en la barra superior de Google Sheets.


 Ejecutar tus scripts desde el menú o con botones.

🧠 Parte 1: Crear un menú

Con la función especial onOpen(), podemos agregar un menú cada vez que se abre la hoja.

javascript
CopiarEditar
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu("Automatización")
.addItem("Escribir saludo", "escribirSaludo")
.addSeparator()
.addItem("Limpiar hoja", "limpiarHoja")
.addToUi();
}

function escribirSaludo() {
const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
hoja.getRange("A1").setValue("¡Hola desde el menú!");
}

function limpiarHoja() {
const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
hoja.clear();
}

✅ ¿Qué hace esto?

 Agrega un menú llamado Automatización.


 Tiene dos opciones:
o Escribir saludo → ejecuta la función escribirSaludo.
o Limpiar hoja → borra todo.

🧠 Parte 2: Botones en la hoja

1. Insertá un Dibujo (desde el menú Insertar > Dibujo).


2. Dibujá una forma (por ejemplo, un rectángulo con texto).
3. Hacé clic en los tres puntos del dibujo y elegí Asignar script.
4. Escribí el nombre de la función (por ejemplo: escribirSaludo).

Ahora, cada vez que hagas clic en el botón, ejecutará el script.

✍️Ejercicio práctico

1. Cambiá el nombre del menú a "Utilidades".


2. Agregá una tercera opción al menú que escriba la fecha actual en la celda B1:

javascript
CopiarEditar
hoja.getRange("B1").setValue(new Date());

3. Insertá un botón que borre solo la columna A.

Clase 7 – Formularios y manejo de respuestas

🎯 Objetivo:

 Crear un formulario desde código.


 Leer respuestas y procesarlas automáticamente.

🧠 Parte 1: Crear un formulario por script


javascript
CopiarEditar
function crearFormulario() {
const formulario = FormApp.create("Formulario de contacto");
formulario.setDescription("Por favor, completá tus datos.");

formulario.addTextItem().setTitle("Nombre completo");
formulario.addTextItem().setTitle("Correo electrónico");
formulario.addMultipleChoiceItem()
.setTitle("¿Te interesa recibir novedades?")
.setChoiceValues(["Sí", "No"]);

Logger.log("URL del formulario: " + formulario.getEditUrl());


}

✅ ¿Qué hace?

 Crea un formulario con 3 preguntas.


 Muestra en el log (Ctrl + Enter) la URL de edición.
🧠 Parte 2: Leer respuestas desde una hoja de cálculo

Si ya tenés un formulario conectado a Google Sheets, podés procesar sus respuestas:

javascript
CopiarEditar
function procesarRespuestas() {
const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const datos = hoja.getDataRange().getValues();

for (let i = 1; i < datos.length; i++) {


const nombre = datos[i][0];
const correo = datos[i][1];
const suscripcion = datos[i][2];

if (suscripcion === "Sí") {


hoja.getRange(i + 1, 4).setValue("Agregar a lista de correo");
} else {
hoja.getRange(i + 1, 4).setValue("No contactar");
}
}
}

✍️Ejercicio práctico

1. Agregá una pregunta de tipo párrafo:

javascript
CopiarEditar
formulario.addParagraphTextItem().setTitle("Comentarios
adicionales");

2. Modificá procesarRespuestas para marcar en rojo las respuestas con suscripción “No”.
3. Hacelo compatible con formularios en los que los datos comienzan en otra hoja (usá
getSheetByName("NombreHoja")).

Clase 8 – Enviar correos automáticos con MailApp

🎯 Objetivo:

 Usar MailApp.sendEmail() para enviar emails personalizados.


 Enviar un mensaje automático cuando se registra una nueva entrada.

🧠 Sintaxis básica
javascript
CopiarEditar
MailApp.sendEmail(destinatario, asunto, mensaje);

🔐 Ejemplo básico
javascript
CopiarEditar
function enviarCorreoSimple() {
MailApp.sendEmail(
"[email protected]",
"Saludos desde Google Apps Script",
"Este es un mensaje automático de prueba."
);
}

🧠 Enviar desde una hoja

Supongamos que tenés una lista de emails en la columna A y nombres en la B:

javascript
CopiarEditar
function enviarCorreosPersonalizados() {
const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const datos = hoja.getRange("A2:B10").getValues();

for (let i = 0; i < datos.length; i++) {


const correo = datos[i][0];
const nombre = datos[i][1];

if (correo) {
let mensaje = `Hola ${nombre},\n\nGracias por participar.`;
MailApp.sendEmail(correo, "Confirmación de registro", mensaje);
}
}
}

🧠 Límite importante

 Las cuentas personales de Google tienen un límite diario (aprox. 100 correos/día).
 Las cuentas Google Workspace (empresa/educación) tienen más (hasta 1500).

✍️Ejercicio práctico

1. Agregá una tercera columna con un estado (Enviado o Pendiente).


2. Enviá solo a quienes tengan estado "Pendiente".
3. Después de enviar, actualizá esa celda con "Enviado" y poné fondo verde con:
javascript
CopiarEditar
hoja.getRange(i + 2,
3).setValue("Enviado").setBackground("lightgreen");

Clase 9 – Crear y actualizar archivos en Google Drive

🎯 Objetivo:

 Crear archivos en Google Drive desde Google Apps Script.


 Actualizar archivos y generar reportes automáticamente.

🧠 Parte 1: Crear un archivo en Google Drive

Podemos crear nuevos archivos desde Google Apps Script. Por ejemplo, si quieres crear un archivo
de texto:

javascript
CopiarEditar
function crearArchivoTexto() {
const archivo = DriveApp.createFile("NuevoArchivo.txt", "Este es el
contenido del archivo");
Logger.log("Archivo creado con ID: " + archivo.getId());
}

✅ ¿Qué hace?

 Crea un archivo de texto llamado NuevoArchivo.txt en tu Google Drive con el contenido


"Este es el contenido del archivo".
 Muestra el ID del archivo en el log para futuras referencias.

🧠 Parte 2: Crear una hoja de cálculo y escribir en ella

Si necesitas crear una nueva hoja de cálculo (Google Sheets):

javascript
CopiarEditar
function crearHojaDeCalculo() {
const hoja = SpreadsheetApp.create("Reporte Automático");
const sheet = hoja.getActiveSheet();
sheet.appendRow(["Nombre", "Correo", "Estado"]);
sheet.appendRow(["Juan", "[email protected]", "Enviado"]);
sheet.appendRow(["Ana", "[email protected]", "Pendiente"]);

Logger.log("Hoja creada con URL: " + hoja.getUrl());


}

✅ ¿Qué hace?

 Crea una hoja de cálculo llamada Reporte Automático.


 Escribe algunas filas de datos en ella.
 Muestra la URL de la hoja de cálculo creada.

🧠 Parte 3: Guardar un archivo como PDF

También puedes convertir y guardar una hoja de cálculo como un archivo PDF.

javascript
CopiarEditar
function guardarComoPDF() {
const hoja = SpreadsheetApp.getActiveSpreadsheet();
const archivoPDF = DriveApp.createFile(hoja.getAs("application/pdf"));
archivoPDF.setName("ReporteEnPDF.pdf");

Logger.log("Archivo PDF creado con ID: " + archivoPDF.getId());


}

✅ ¿Qué hace?

 Convierte la hoja de cálculo activa en un archivo PDF.


 Guarda ese PDF en Google Drive con el nombre ReporteEnPDF.pdf.

✍️Ejercicio práctico

1. Crea un archivo de texto que contenga los nombres de las personas de la columna A de tu
hoja activa.
2. Guarda ese archivo con un nombre específico, como "Nombres de la hoja.txt".
3. Si una columna tiene datos en ella, conviértelo en un archivo PDF con un nombre que
refleje la fecha actual.

📚 Clase 10 – Interactuar con APIs externas


🎯 Objetivo:

 Hacer solicitudes HTTP a APIs externas (por ejemplo, APIs REST).


 Procesar respuestas de API y usar esos datos en Google Sheets.

🧠 Parte 1: Hacer una solicitud HTTP GET

Con UrlFetchApp puedes hacer solicitudes a cualquier API que tenga un endpoint accesible por
HTTP o HTTPS.

Ejemplo de solicitud GET a una API pública (por ejemplo, para obtener datos del clima):

javascript
CopiarEditar
function obtenerDatosClima() {
const url = "https://api.openweathermap.org/data/2.5/weather?
q=London&appid=tu_api_key";
const respuesta = UrlFetchApp.fetch(url); // Hace la solicitud
const datos = JSON.parse(respuesta.getContentText()); // Parsea la
respuesta JSON

const temperatura = datos.main.temp;


const descripcion = datos.weather[0].description;

Logger.log("Temperatura: " + temperatura);


Logger.log("Descripción del clima: " + descripcion);
}

✅ ¿Qué hace?

 Hace una solicitud a la API de OpenWeatherMap para obtener el clima de Londres.


 Extrae la temperatura y la descripción del clima.
 Muestra los datos en el log.

Nota: Necesitas una clave de API para acceder a datos reales (puedes obtenerla registrándote en
el sitio de OpenWeatherMap).

🧠 Parte 2: Mostrar datos de una API en Google Sheets

Podemos tomar los datos de la API y mostrarlos directamente en las celdas de Google Sheets.

javascript
CopiarEditar
function mostrarClimaEnHoja() {
const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const url = "https://api.openweathermap.org/data/2.5/weather?
q=London&appid=tu_api_key";
const respuesta = UrlFetchApp.fetch(url);
const datos = JSON.parse(respuesta.getContentText());

const temperatura = datos.main.temp;


const descripcion = datos.weather[0].description;

hoja.getRange("A1").setValue("Temperatura");
hoja.getRange("B1").setValue(temperatura);
hoja.getRange("A2").setValue("Descripción");
hoja.getRange("B2").setValue(descripcion);
}

✅ ¿Qué hace?

 Hace la solicitud a la API de OpenWeatherMap.


 Coloca los valores de temperatura y descripción en las celdas A1, B1, A2 y B2.

🧠 Parte 3: Usar una API POST para enviar datos

Si necesitas enviar datos a una API, puedes usar el método UrlFetchApp.fetch() con el
método POST.

Ejemplo de cómo enviar datos a una API (por ejemplo, un formulario):

javascript
CopiarEditar
function enviarDatosAPI() {
const url = "https://api.example.com/submit";
const payload = {
nombre: "Juan",
correo: "[email protected]",
mensaje: "Este es un mensaje de prueba."
};

const opciones = {
method: "post",
contentType: "application/json",
payload: JSON.stringify(payload)
};

const respuesta = UrlFetchApp.fetch(url, opciones);


Logger.log("Respuesta de la API: " + respuesta.getContentText());
}

✅ ¿Qué hace?

 Envía un objeto JSON con nombre, correo y mensaje a una API a través de una solicitud
POST.
 Muestra la respuesta de la API en el log.

✍️Ejercicio práctico

1. Realizá una solicitud a una API pública (por ejemplo, una API de películas) y muestra
información relevante en una hoja (como título, año, calificación, etc.).
2. Usa un formulario en Google Sheets para enviar datos (nombre, email, etc.) a una API que
acepte POST.
3. Agrega un error de manejo (try/catch) para casos en que la API no responda.

📚 Clase 11 – Automatización con Triggers

🎯 Objetivo:

 Ejecutar scripts automáticamente con base en tiempo, edición o envío de formularios.


 Crear tareas programadas sin intervención manual.

🧠 ¿Qué es un Trigger?

Un trigger (disparador) es un evento que lanza la ejecución de una función automáticamente.

Hay 2 tipos:

1. Desencadenadores simples: como onOpen(), onEdit(), onFormSubmit().


2. Desencadenadores instalables: más potentes y personalizables (usados con ScriptApp).

🧠 Parte 1: Triggers simples

Ejecutar al abrir el archivo:

javascript
CopiarEditar
function onOpen() {
SpreadsheetApp.getUi().alert("¡Bienvenido! Este mensaje se muestra al
abrir el archivo.");
}

Ejecutar al editar una celda:


javascript
CopiarEditar
function onEdit(e) {
const hoja = e.source.getActiveSheet();
const celda = e.range;

if (celda.getColumn() === 1) {
celda.setBackground("yellow");
}
}

Ejecutar al enviar un formulario:

javascript
CopiarEditar
function onFormSubmit(e) {
const hoja = e.range.getSheet();
const fila = e.range.getRow();

hoja.getRange(fila, 4).setValue("Respuesta procesada");


}

🧠 Parte 2: Triggers instalables (más potentes)

Podés crear tareas programadas con ScriptApp.newTrigger():

javascript
CopiarEditar
function crearTriggerTiempo() {
ScriptApp.newTrigger("tareaAutomatica")
.timeBased()
.everyHours(1) // Ejecutar cada hora
.create();
}

function tareaAutomatica() {
Logger.log("Tarea ejecutada automáticamente cada hora: " + new Date());
}

Otras opciones:

 .everyMinutes(n)
 .everyDays(n)
 .atHour(10) → a las 10:00
 .onWeekDay(ScriptApp.WeekDay.MONDAY)

✍️Ejercicio práctico
1. Creá un trigger que actualice automáticamente una celda con la fecha y hora cada 10
minutos.
2. Usá onEdit para detectar si alguien escribe "URGENTE" y resaltarlo en rojo.
3. Mostrá un mensaje personalizado al abrir la hoja según el día de la semana.

📚 Clase 12 – Crear menús personalizados y botones

🎯 Objetivo:

 Crear menús personalizados en la barra de Google Sheets.


 Añadir botones en la hoja para ejecutar funciones específicas.

🧠 Parte 1: Crear un menú personalizado

Con el trigger onOpen(), podemos agregar un menú personalizado en la barra superior de Google
Sheets.

Ejemplo básico:

javascript
CopiarEditar
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('Mi Menú')
.addItem('Saludar', 'mostrarSaludo')
.addItem('Limpiar hoja', 'limpiarHoja')
.addToUi();
}

function mostrarSaludo() {
SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange('A1').s
etValue('¡Hola desde el menú!');
}

function limpiarHoja() {
const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
hoja.clear();
}

✅ ¿Qué hace?

 Agrega un menú llamado "Mi Menú" en la barra superior.


 Cuando se selecciona "Saludar", pone un mensaje en A1.
 Cuando se selecciona "Limpiar hoja", limpia toda la hoja.
🧠 Parte 2: Agregar botones en la hoja

Los botones permiten ejecutar funciones directamente desde la hoja.

1. Insertar un dibujo (Insertar > Dibujo).


2. Dibujar una forma (por ejemplo, un rectángulo).
3. Asignar un script al dibujo:
o Haz clic en los tres puntos del dibujo.
o Selecciona Asignar script.
o Escribe el nombre de la función (por ejemplo, mostrarSaludo).

Cuando se hace clic en el botón, se ejecutará la función correspondiente.

🧠 Parte 3: Crear un menú con submenús

Puedes crear submenús dentro de tu menú personalizado para hacer más organizados los accesos.

javascript
CopiarEditar
function onOpen() {
const ui = SpreadsheetApp.getUi();
const menu = ui.createMenu('Mi Menú');

menu.addItem('Mostrar Saludo', 'mostrarSaludo')


.addSubMenu(
ui.createMenu('Opciones adicionales')
.addItem('Limpiar Hoja', 'limpiarHoja')
.addItem('Contar Filas', 'contarFilas')
);

menu.addToUi();
}

function contarFilas() {
const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const cantidad = hoja.getLastRow();
SpreadsheetApp.getUi().alert('Hay ' + cantidad + ' filas en la hoja.');
}

✅ ¿Qué hace?

 Agrega un submenú dentro de "Mi Menú".


 El submenú tiene opciones para limpiar la hoja y contar filas.

✍️Ejercicio práctico
1. Crea un menú personalizado con las siguientes opciones:
o Ver fecha: Mostrar la fecha actual en A1.
o Borrar contenido: Borrar todas las celdas.
2. Añadir un botón que cambie el color de fondo de la hoja a azul.
3. Crea un submenú que permita insertar filas y columnas.

📚 Clase 13 – Crear gráficos y visualización de datos

🎯 Objetivo:

 Crear gráficos automáticamente usando Google Apps Script.


 Personalizar gráficos en Google Sheets.

🧠 Parte 1: Crear un gráfico básico

Google Sheets tiene herramientas integradas para crear gráficos, y podemos acceder a ellas
usando Google Apps Script.

Ejemplo para crear un gráfico de barras:

javascript
CopiarEditar
function crearGrafico() {
const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

// Supongamos que los datos están en el rango A1:B5


const rangoDatos = hoja.getRange("A1:B5");

// Crear un gráfico de barras


const grafico = hoja.newChart()
.setChartType(Charts.ChartType.COLUMN)
.addRange(rangoDatos)
.setPosition(2, 3, 0, 0) // Ubicación del gráfico en la hoja
.setOption("title", "Gráfico de ejemplo")
.setOption("hAxis", {title: "Categorías"})
.setOption("vAxis", {title: "Valores"})
.build();

// Insertar el gráfico en la hoja


hoja.insertChart(grafico);
}

✅ ¿Qué hace?

 Toma los datos de las celdas A1:B5.


 Crea un gráfico de barras con esos datos.
 Muestra el gráfico a partir de la celda C2.

🧠 Parte 2: Gráfico de líneas

Si quieres crear un gráfico de líneas, simplemente cambias el tipo de gráfico en


.setChartType():

javascript
CopiarEditar
function crearGraficoLineas() {
const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

// Supongamos que los datos están en el rango A1:B5


const rangoDatos = hoja.getRange("A1:B5");

// Crear un gráfico de líneas


const grafico = hoja.newChart()
.setChartType(Charts.ChartType.LINE)
.addRange(rangoDatos)
.setPosition(7, 3, 0, 0)
.setOption("title", "Gráfico de líneas")
.setOption("hAxis", {title: "Meses"})
.setOption("vAxis", {title: "Valor"})
.build();

// Insertar el gráfico
hoja.insertChart(grafico);
}

✅ ¿Qué hace?

 Crea un gráfico de líneas usando los datos de A1:B5.


 Inserta el gráfico en la posición deseada.

🧠 Parte 3: Personalizar gráficos

Puedes personalizar muchos aspectos de un gráfico, como colores, leyendas y más:

javascript
CopiarEditar
function crearGraficoPersonalizado() {
const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

const rangoDatos = hoja.getRange("A1:B5");


const grafico = hoja.newChart()
.setChartType(Charts.ChartType.PIE)
.addRange(rangoDatos)
.setPosition(7, 3, 0, 0)
.setOption("title", "Distribución de categorías")
.setOption("pieSliceText", "percentage")
.setOption("slices", {
0: {offset: 0.1},
1: {offset: 0.1},
})
.setOption("colors", ['#FF0000', '#00FF00', '#0000FF'])
.build();

hoja.insertChart(grafico);
}

✅ ¿Qué hace?

 Crea un gráfico de pastel (pie chart).


 Personaliza el título, la visualización de los porcentajes y los colores de cada sección.

✍️Ejercicio práctico

1. Crea un gráfico de barras con datos de ventas en el rango A1:B10.


2. Crea un gráfico de líneas que muestre la evolución mensual de una métrica en el rango
A1:C12.
3. Personaliza un gráfico de pastel para mostrar las distribuciones de categorías de un
conjunto de datos.
4. Agrega un título y cambia el color de las barras o líneas.

📚 Clase 14 – Crear informes automáticos y exportarlos como PDF

🎯 Objetivo:

 Crear informes dinámicos en Google Sheets.


 Exportar esos informes automáticamente como archivos PDF.

🧠 Parte 1: Crear un informe automático

Podemos usar Google Apps Script para generar informes dinámicos. Supongamos que queremos
crear un informe de ventas mensuales.

Ejemplo de cómo crear un informe con fecha dinámica:


javascript
CopiarEditar
function crearInforme() {
const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const fecha = new Date();
const mes = fecha.getMonth() + 1; // Los meses comienzan desde 0
const anio = fecha.getFullYear();

// Crear el título del informe


hoja.getRange("A1").setValue("Informe de ventas - " + mes + "/" +
anio);
hoja.getRange("A1").setFontSize(16).setFontWeight("bold");

// Agregar datos del informe (esto es solo un ejemplo)


hoja.getRange("A3").setValue("Producto");
hoja.getRange("B3").setValue("Ventas");
hoja.getRange("A4").setValue("Producto A");
hoja.getRange("B4").setValue(1500);
hoja.getRange("A5").setValue("Producto B");
hoja.getRange("B5").setValue(2300);

// Agregar más datos según sea necesario


}

✅ ¿Qué hace?

 Inserta un título con la fecha actual (mes/año).


 Llena algunas celdas con datos de productos y sus ventas.

🧠 Parte 2: Exportar el informe como PDF

Google Sheets permite exportar una hoja o rango como un archivo PDF. Usamos el método
SpreadsheetApp.getActiveSpreadsheet().getAs() para hacerlo.

Ejemplo de exportar el informe como PDF:

javascript
CopiarEditar
function exportarComoPDF() {
const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

// Obtener el rango de celdas que se desea exportar


const rango = hoja.getRange("A1:B5");

// Convertir el rango a PDF


const blob = rango.getAs('application/pdf');
// Guardar el PDF en Google Drive
const archivo = DriveApp.createFile(blob);

// Renombrar el archivo
archivo.setName('Informe de ventas - ' + new
Date().toLocaleDateString() + '.pdf');

Logger.log('Informe exportado como PDF: ' + archivo.getUrl());


}

✅ ¿Qué hace?

 Exporta el rango A1:B5 como un archivo PDF.


 Guarda el archivo en Google Drive y lo renombra con la fecha actual.
 Muestra la URL del archivo en el log.

🧠 Parte 3: Exportar todo el documento como PDF

Si deseas exportar toda la hoja o el documento entero, puedes usar el siguiente código:

javascript
CopiarEditar
function exportarTodoComoPDF() {
const ss = SpreadsheetApp.getActiveSpreadsheet();

// Configuración para exportar el documento completo


const url = ss.getUrl();
const nombreArchivo = 'Informe Completo - ' + new
Date().toLocaleDateString();

const pdfOptions = {
format: 'pdf',
gid: ss.getSheets()[0].getSheetId(), // Exporta la primera hoja
exportFormat: 'pdf',
size: 'A4',
landscape: false,
fitw: true,
gridlines: false
};

const archivo = DriveApp.createFile(UrlFetchApp.fetch(url + '/export?'


+ Object.entries(pdfOptions).map(([k, v]) => `${k}=$
{v}`).join('&')).getBlob());

archivo.setName(nombreArchivo + '.pdf');

Logger.log('Informe completo exportado como PDF: ' + archivo.getUrl());


}

✅ ¿Qué hace?
 Exporta toda la hoja activa como PDF.
 Guarda el archivo PDF en Google Drive y lo renombra.
 Muestra la URL del archivo exportado.

✍️Ejercicio práctico

1. Crea un informe automático que incluya la fecha actual y algunos datos de ventas ficticios
en A1:B10.
2. Exporta ese informe como un archivo PDF y guárdalo en Google Drive.
3. Usa un trigger para ejecutar la función de exportación al final de cada mes.
4.

📚 Clase 15 – Integración con otras aplicaciones de Google

🎯 Objetivo:

 Integrar Google Sheets con otras aplicaciones de Google (Google Calendar, Google
Contacts, etc.).

🧠 Parte 1: Integrar con Google Calendar

Podemos crear eventos en Google Calendar directamente desde Google Sheets.

Ejemplo para crear un evento:

javascript
CopiarEditar
function crearEvento() {
const calendar = CalendarApp.getDefaultCalendar();
const fechaInicio = new Date('2025-05-01T09:00:00');
const fechaFin = new Date('2025-05-01T10:00:00');

calendar.createEvent('Reunión importante', fechaInicio, fechaFin);


Logger.log('Evento creado en el calendario');
}

✅ ¿Qué hace?

 Crea un evento llamado "Reunión importante" en el calendario predeterminado, de 9:00


a 10:00.

🧠 Parte 2: Integrar con Google Contacts

Puedes crear o actualizar contactos en Google Contacts desde Google Sheets.


Ejemplo para agregar un contacto:

javascript
CopiarEditar
function agregarContacto() {
const contactos = ContactsApp.createContact('Juan', 'Pérez',
'[email protected]');
Logger.log('Contacto agregado: ' + contactos.getFullName());
}

✅ ¿Qué hace?

 Crea un nuevo contacto con el nombre "Juan Pérez" y el correo "[email protected]".

📚 Clase 16 – Trabajar con Google Drive desde Google Sheets

🎯 Objetivo:

 Crear, mover, y gestionar archivos en Google Drive directamente desde Google Sheets.

🧠 Parte 1: Crear un archivo de Google Docs

Puedes crear un archivo de Google Docs desde Google Sheets y agregarle contenido.

javascript
CopiarEditar
function crearDocumento() {
const doc = DocumentApp.create('Informe de Ventas');
doc.getBody().appendParagraph('Este es el contenido del informe de
ventas.');
doc.saveAndClose();
Logger.log('Documento creado: ' + doc.getUrl());
}

✅ ¿Qué hace?

 Crea un archivo de Google Docs llamado "Informe de Ventas".


 Agrega un párrafo con contenido y cierra el documento.

🧠 Parte 2: Mover un archivo en Google Drive

Ejemplo para mover un archivo a una carpeta específica en Google Drive:

javascript
CopiarEditar
function moverArchivo() {
const archivo = DriveApp.getFilesByName('Informe de Ventas').next();
const carpeta = DriveApp.getFolderById('ID_DE_LA_CARPETA');
carpeta.createFile(archivo);
Logger.log('Archivo movido a la carpeta');
}

✅ ¿Qué hace?

 Mueve un archivo llamado "Informe de Ventas" a una carpeta específica en Google Drive.

📚 Clase 17 – Automatización avanzada con Google Sheets

🎯 Objetivo:

 Automatizar tareas avanzadas en Google Sheets usando ScriptApp.

🧠 Parte 1: Enviar correos electrónicos automáticamente

Puedes enviar correos electrónicos usando Google Apps Script.

javascript
CopiarEditar
function enviarCorreo() {
const destinatario = "[email protected]";
const asunto = "Informe Automático";
const mensaje = "Este es el informe generado automáticamente.";

MailApp.sendEmail(destinatario, asunto, mensaje);


Logger.log('Correo enviado');
}

✅ ¿Qué hace?

 Envía un correo electrónico al destinatario con el asunto y mensaje especificados.

🧠 Parte 2: Programar la ejecución de funciones

Puedes programar la ejecución de funciones con ScriptApp.newTrigger().

javascript
CopiarEditar
function crearTrigger() {
ScriptApp.newTrigger("enviarCorreo")
.timeBased()
.everyDays(1) // Ejecutar todos los días
.atHour(9) // A las 9:00 AM
.create();
}

✅ ¿Qué hace?

 Crea un disparador que ejecuta la función enviarCorreo todos los días a las 9:00 AM.

📚 Clase 18 – Crear formularios automáticos con Google Forms

🎯 Objetivo:

 Crear y gestionar formularios de Google desde Google Sheets.

🧠 Parte 1: Crear un formulario con Google Forms

Puedes crear un formulario de Google Forms y agregarle preguntas usando Google Apps Script.

javascript
CopiarEditar
function crearFormulario() {
const formulario = FormApp.create('Encuesta de satisfacción');
formulario.addMultipleChoiceItem()
.setTitle('¿Cómo calificarías nuestro servicio?')
.setChoiceValues(['Excelente', 'Bueno', 'Regular', 'Malo']);
Logger.log('Formulario creado: ' + formulario.getEditUrl());
}

✅ ¿Qué hace?

 Crea un formulario con una pregunta de opción múltiple.

🧠 Parte 2: Enviar respuestas del formulario a Google Sheets

Puedes hacer que las respuestas de un formulario se envíen directamente a Google Sheets.

javascript
CopiarEditar
function vincularFormularioConHoja() {
const formulario = FormApp.openById('ID_DEL_FORMULARIO');
const hoja = SpreadsheetApp.getActiveSpreadsheet();

formulario.setDestination(FormApp.DestinationType.SPREADSHEET,
hoja.getId());
Logger.log('Formulario vinculado con la hoja');
}

✅ ¿Qué hace?

 Vincula un formulario de Google con una hoja de cálculo para que las respuestas se
registren automáticamente.

📚 Clase 19 – Crear aplicaciones completas con Google Sheets

🎯 Objetivo:

 Crear aplicaciones sencillas que se ejecuten desde Google Sheets usando formularios,
menús y funciones automáticas.

🧠 Parte 1: Crear un menú para una aplicación

Puedes crear un menú interactivo que permita ejecutar varias funciones.

javascript
CopiarEditar
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('Mi Aplicación')
.addItem('Generar Informe', 'generarInforme')
.addItem('Enviar Correo', 'enviarCorreo')
.addItem('Crear Formulario', 'crearFormulario')
.addToUi();
}

✅ ¿Qué hace?

 Crea un menú en la hoja con opciones para generar informes, enviar correos y crear
formularios.

🧠 Parte 2: Usar formularios de entrada en la aplicación

Puedes crear una función para ingresar datos a través de formularios.

javascript
CopiarEditar
function ingresarDatos() {
const ui = SpreadsheetApp.getUi();
const respuesta = ui.prompt('Ingrese su nombre');

if (respuesta.getSelectedButton() == ui.Button.OK) {
const nombre = respuesta.getResponseText();
SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange('A1')
.setValue('Nombre: ' + nombre);
}
}

✅ ¿Qué hace?

 Muestra un cuadro de texto para ingresar un nombre, luego lo coloca en la celda A1.

📚 Clase 20 – Resumen y mejores prácticas

🎯 Objetivo:

 Repasar lo aprendido y seguir mejores prácticas para optimizar tus scripts.

🧠 Parte 1: Repaso de lo aprendido

 Trabajamos con Google Sheets, Google Calendar, Google Contacts, Google Drive, y Google
Forms.
 Aprendimos a automatizar tareas, crear menús personalizados y exportar datos.

🧠 Parte 2: Mejores prácticas

1. Optimiza tu código: Revisa tu código y elimina funciones innecesarias.


2. Usa triggers adecuados: Usa triggers temporales cuando necesites tareas recurrentes.
3. Manejo de errores: Usa try-catch para manejar errores y evitar fallos inesperados.
4. No excedas los límites de Google Apps Script: Hay límites de uso que no debes superar.

📚 Clase 21 – Integración con otras aplicaciones de Google

🎯 Objetivo:

 Aprender a integrar Google Sheets con otras aplicaciones de Google, como Google Drive,
Gmail, Google Calendar, Google Docs, y más, utilizando Google Apps Script.

🧠 Parte 1: Integración con Google Drive


Google Drive es uno de los servicios más utilizados para almacenar y gestionar archivos en la nube.
Con Google Apps Script, puedes interactuar con archivos de Google Drive, crear carpetas, mover
archivos, o incluso compartirlos.

Código de ejemplo para crear una carpeta en Google Drive:

javascript
CopiarEditar
function crearCarpeta() {
const nombreCarpeta = "Mi Nueva Carpeta";
const carpeta = DriveApp.createFolder(nombreCarpeta); // Crea una
nueva carpeta en Google Drive
Logger.log('Carpeta creada: ' + carpeta.getName()); // Muestra el
nombre de la carpeta creada
}

Explicación:

 DriveApp.createFolder(nombreCarpeta): Crea una nueva carpeta en Google Drive


con el nombre proporcionado.
 Logger.log(): Registra el nombre de la carpeta creada en el registro de ejecución.

🧠 Parte 2: Enviar correos con Gmail

Gmail es otra aplicación de Google que puedes controlar a través de Google Apps Script. Puedes
enviar correos electrónicos automáticamente desde Google Sheets o desde cualquier otra
aplicación integrada.

Código de ejemplo para enviar un correo:

javascript
CopiarEditar
function enviarCorreo() {
const destinatario = "[email protected]";
const asunto = "Asunto del correo";
const mensaje = "Este es el cuerpo del mensaje.";

MailApp.sendEmail(destinatario, asunto, mensaje); // Enviar correo con


Gmail
Logger.log("Correo enviado a: " + destinatario); // Muestra que el
correo fue enviado
}

Explicación:

 MailApp.sendEmail(): Método de Gmail para enviar correos electrónicos. Acepta tres


parámetros: destinatario, asunto y cuerpo del mensaje.
 Logger.log(): Registra el evento de envío de correo en los logs.
🧠 Parte 3: Integración con Google Calendar

Google Calendar permite gestionar eventos y citas. Con Google Apps Script, puedes crear eventos,
modificar, y obtener información de tu calendario.

Código de ejemplo para crear un evento en Google Calendar:

javascript
CopiarEditar
function crearEvento() {
const calendario = CalendarApp.getDefaultCalendar(); // Obtiene el
calendario predeterminado
const titulo = "Reunión de trabajo";
const fechaInicio = new Date(2025, 4, 30, 10, 0); // Fecha y hora de
inicio
const fechaFin = new Date(2025, 4, 30, 11, 0); // Fecha y hora de
finalización

// Crea el evento
calendario.createEvent(titulo, fechaInicio, fechaFin);
Logger.log("Evento creado: " + titulo); // Muestra el título del
evento creado
}

Explicación:

 CalendarApp.getDefaultCalendar(): Obtiene el calendario predeterminado de la


cuenta de Google.
 createEvent(titulo, fechaInicio, fechaFin): Crea un evento en el calendario
con el título, la fecha de inicio y la fecha de fin especificadas.

🧠 Parte 4: Integración con Google Docs

Con Google Apps Script, también puedes crear y modificar documentos de Google Docs
directamente desde tu script. Esto es útil para automatizar la creación de documentos, informes,
etc.

Código de ejemplo para crear un documento de Google Docs:

javascript
CopiarEditar
function crearDocumento() {
const doc = DocumentApp.create("Mi Documento de Google Docs"); // Crea
un nuevo documento
const cuerpo = doc.getBody();
cuerpo.appendParagraph("¡Hola, este es un documento generado
automáticamente!"); // Agrega un párrafo al documento
doc.saveAndClose(); // Guarda y cierra el documento

Logger.log("Documento creado: " + doc.getName()); // Muestra el nombre


del documento creado
}

Explicación:

 DocumentApp.create("Nombre del Documento"): Crea un nuevo documento de


Google Docs con el nombre especificado.
 doc.getBody().appendParagraph(): Agrega un párrafo al cuerpo del documento.
 doc.saveAndClose(): Guarda y cierra el documento.

🧠 Parte 5: Integración con Google Sheets

Además de trabajar con Google Sheets a través de Apps Script, también puedes interactuar con
otras aplicaciones de Google como Google Forms y Google Sites.

Código de ejemplo para añadir datos a una hoja de Google Sheets:

javascript
CopiarEditar
function agregarDatosHoja() {
const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// Obtiene la hoja activa
hoja.appendRow(["Dato 1", "Dato 2", "Dato 3"]); // Agrega una fila con
datos
Logger.log("Datos añadidos a la hoja."); // Muestra un mensaje de
confirmación
}

Explicación:

 SpreadsheetApp.getActiveSpreadsheet(): Obtiene la hoja de cálculo activa en


Google Sheets.
 appendRow(): Añade una nueva fila con los valores especificados al final de la hoja.

🧠 Parte 6: Usar Google Apps Script en conjunto con Google Apps (API de
Google)

A través de las APIs de Google, puedes crear integraciones más avanzadas entre Google Sheets y
otras aplicaciones de Google. Por ejemplo, puedes automatizar la creación de documentos en
Google Docs a partir de datos de una hoja de cálculo, o incluso integrar Google Sheets con Google
Forms para recopilar respuestas automáticamente.

Código de ejemplo para enviar datos de Google Sheets a Google Forms:

javascript
CopiarEditar
function enviarDatosAFormulario() {
const formulario = FormApp.openById("ID_DE_TU_FORMULARIO"); // Abre un
formulario existente
const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// Obtiene la hoja activa
const datos = hoja.getRange("A2:A10").getValues(); // Obtiene los
datos de la columna A (de la fila 2 a la 10)

// Enviar datos a cada respuesta del formulario


for (let i = 0; i < datos.length; i++) {
formulario.createResponse().withItemResponse(formulario.getItems()
[0].asTextItem().createResponse(datos[i][0])).submit();
}
Logger.log("Datos enviados al formulario."); // Muestra un mensaje de
confirmación
}

Explicación:

 FormApp.openById(): Abre un formulario de Google Forms mediante su ID.


 createResponse().withItemResponse(): Crea una nueva respuesta para el
formulario y asocia un valor de respuesta a un campo específico.

📚 Resumen de la Clase 21 – Integración con otras aplicaciones de Google

 Google Drive: Puedes gestionar carpetas y archivos, crear carpetas y organizarlas


automáticamente con Google Apps Script.
 Gmail: Usando MailApp, puedes enviar correos electrónicos desde Google Sheets o
cualquier otra aplicación.
 Google Calendar: Crear y gestionar eventos en tu calendario de forma automatizada.
 Google Docs: Automatiza la creación y edición de documentos en Google Docs.
 Google Sheets y otras aplicaciones: Integra Google Sheets con Google Forms, Google
Docs, y otros servicios de Google.

📚 Clase 22 – Fundamentos de JavaScript en Google Apps Script

🎯 Objetivo:
 Revisar y afianzar los fundamentos de JavaScript que son fundamentales para trabajar con
Google Apps Script, incluyendo las estructuras básicas, cómo se gestionan las variables, y
las funciones clave que usamos en la plataforma.

1. Variables: const, let, var


const

La palabra clave const se usa para declarar variables que no cambiarán su valor. Cuando defines
una variable con const, se convierte en una constante, es decir, su valor no puede modificarse
después de la asignación inicial.

Ejemplo:

javascript
CopiarEditar
const nombre = "Gaston";
nombre = "Juan"; // Esto causaría un error

let

Se utiliza para declarar variables que sí pueden cambiar su valor durante la ejecución del código.
Es más flexible que const porque puedes reasignar su valor.

Ejemplo:

javascript
CopiarEditar
let edad = 30;
edad = 31; // Esto es válido, ya que 'edad' es una variable con 'let'

var

Aunque ya no se usa tanto debido a la existencia de let y const, var se utiliza de forma similar a
let, pero tiene un alcance de función (scope) en lugar de bloque. Esto puede causar problemas en
algunos casos, y es preferible usar let o const en lugar de var.

Ejemplo:

javascript
CopiarEditar
var ciudad = "Buenos Aires";
ciudad = "Córdoba"; // Esto también es válido, pero 'var' tiene un
alcance más amplio que 'let' y 'const'.
2. Funciones: function

Las funciones en JavaScript son bloques de código que se ejecutan cuando se les invoca. Puedes
pasarles datos (parámetros) y retornar un valor (resultado).

Sintaxis básica de una función:

javascript
CopiarEditar
function miFuncion() {
// Código que ejecuta la función
}

Ejemplo de función con parámetros y valor de retorno:

javascript
CopiarEditar
function suma(a, b) {
return a + b; // Retorna la suma de los parámetros
}

let resultado = suma(2, 3); // Llamada a la función con 2 y 3 como


parámetros
Logger.log(resultado); // Imprime '5'

3. Condicionales: if, else, else if

Las estructuras condicionales te permiten ejecutar código dependiendo de si se cumple una


condición.

Sintaxis:

javascript
CopiarEditar
if (condicion) {
// Código si la condición es verdadera
} else if (otraCondicion) {
// Código si la otra condición es verdadera
} else {
// Código si ninguna de las condiciones es verdadera
}

Ejemplo:

javascript
CopiarEditar
let edad = 20;

if (edad >= 18) {


Logger.log("Eres adulto");
} else {
Logger.log("Eres menor de edad");
}

4. Ciclos: for, while, do...while


for

El ciclo for te permite repetir un bloque de código un número determinado de veces,


especialmente útil cuando conoces cuántas veces quieres iterar.

Sintaxis:

javascript
CopiarEditar
for (let i = 0; i < 5; i++) {
Logger.log("Iteración: " + i);
}

while

El ciclo while ejecuta un bloque de código mientras se cumpla una condición. Es útil cuando no
sabes de antemano cuántas veces necesitas iterar.

Sintaxis:

javascript
CopiarEditar
let i = 0;
while (i < 5) {
Logger.log("Iteración: " + i);
i++; // No olvides modificar el valor de i para evitar un ciclo
infinito
}

do...while

El ciclo do...while es similar a while, pero garantiza que el código se ejecute al menos una vez,
incluso si la condición no se cumple desde el principio.

Sintaxis:

javascript
CopiarEditar
let i = 0;
do {
Logger.log("Iteración: " + i);
i++;
} while (i < 5);
5. Objetos:

En JavaScript, los objetos son colecciones de datos en forma de clave: valor. Los objetos son muy
útiles para estructurar información compleja y se utilizan de manera extensiva en Google Apps
Script para manipular datos.

Sintaxis básica de un objeto:

javascript
CopiarEditar
let persona = {
nombre: "Gaston",
edad: 30,
saludo: function() {
Logger.log("¡Hola, soy " + this.nombre);
}
};

persona.saludo(); // Llama al método saludo del objeto

Explicación:

 nombre: "Gaston": La clave es nombre y el valor es "Gaston".


 edad: 30: La clave es edad y el valor es 30.
 saludo: function(): Un método dentro del objeto, que puede acceder a las
propiedades del objeto utilizando this.

6. Logger.log()

El método Logger.log() es útil para ver el resultado de los cálculos o los valores de las variables
durante la ejecución de un script. Se utiliza mucho para depuración.

Ejemplo:

javascript
CopiarEditar
Logger.log("Este es un mensaje"); // Imprime el mensaje en la consola de
logs

7. Métodos para Google Sheets:

Google Apps Script te permite interactuar con Google Sheets de forma sencilla utilizando métodos
como getActiveSpreadsheet(), getActiveSheet(), y appendRow().
appendRow()

Este método agrega una nueva fila con los valores proporcionados al final de la hoja activa.

Ejemplo:

javascript
CopiarEditar
function agregarFila() {
const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
hoja.appendRow(["Dato 1", "Dato 2", "Dato 3"]);
Logger.log("Fila agregada");
}

Explicación:

 getActiveSpreadsheet(): Obtiene la hoja de cálculo activa.


 getActiveSheet(): Obtiene la hoja activa dentro de esa hoja de cálculo.
 appendRow(): Agrega una fila al final de la hoja con los valores proporcionados.

Resumen de la Clase 22 – Fundamentos de JavaScript en Google Apps


Script

En esta clase cubrimos los fundamentos esenciales de JavaScript, los cuales son fundamentales
para comenzar a trabajar con Google Apps Script. Estos conceptos incluyen:

 Declaración de variables (const, let, var).


 Funciones: Cómo declararlas y utilizarlas.
 Estructuras condicionales (if, else, else if).
 Ciclos (for, while, do...while).
 Objetos en JavaScript.
 Logger.log(): Para depuración y seguimiento.
 Interacción con Google Sheets usando SpreadsheetApp y appendRow().

Estos fundamentos son esenciales para escribir scripts eficaces en Google Apps Script y aprovechar
al máximo las capacidades de automatización que ofrece la plataforma.
Para empezar a programar en Java dentro de Google Sheets (Drive) utilizando Google
Apps Script, necesitas seguir los pasos que te indico a continuación. Ten en cuenta que
Google Apps Script no es exactamente Java, sino JavaScript, el cual es un lenguaje de
programación basado en Java, pero distinto en varios aspectos. Aquí te explico cómo
acceder y empezar:

Pasos para programar en Google Apps Script en Google Sheets:

1. Acceder a Google Sheets:


o Abre Google Sheets en tu navegador.
o Si aún no tienes un documento, crea uno nuevo.
2. Abrir el editor de Google Apps Script:
o Con tu hoja de cálculo abierta, ve al menú superior y selecciona
Extensiones → Apps Script.
o Esto abrirá el editor de Google Apps Script en una nueva pestaña.
3. Escribir tu código:
o En el editor de Google Apps Script, escribe tu código en JavaScript. Ten
en cuenta que Google Apps Script se basa en JavaScript, no en Java.
o Puedes empezar con un simple script como el siguiente para verificar que
todo esté funcionando:
javascript
CopiarEditar
function myFunction() {
Logger.log('¡Hola Mundo!');
}

4. Guardar y ejecutar el script:


o Haz clic en el ícono de Guardar (el disquete) en la parte superior izquierda.
o Para ejecutar el script, haz clic en el botón de Ejecutar (el triángulo en la
parte superior del editor).
o La primera vez que ejecutes el script, necesitarás autorizarlo. Haz clic en
Revisar permisos y luego otorga acceso con tu cuenta de Google.
5. Ver el resultado:
o Para ver los resultados de tu script, abre el panel de Logs dentro del editor
de Apps Script seleccionando Ver → Registros.

¿Por qué Google Apps Script y no Java directamente?

 Google Apps Script utiliza JavaScript porque está diseñado para integrarse con
productos de Google (como Google Sheets, Docs, Gmail, etc.), mientras que Java
no tiene esa integración directa.
 Google Apps Script ofrece una interfaz más sencilla para automatizar tareas dentro
de la suite de Google, mientras que Java generalmente se usa para aplicaciones más
grandes o sistemas backend.

Resumen de herramientas disponibles en Google Apps Script para Google Sheets:

 SpreadsheetApp: Para manipular hojas de cálculo de Google Sheets.


 Logger: Para registrar salidas y facilitar la depuración.
 DocumentApp, DriveApp, GmailApp: Para trabajar con otros servicios de
Google.

Importante:

Si necesitas hacer algo muy avanzado o específico en Java que no sea posible con Google
Apps Script (JavaScript), podrías usar la Google Sheets API desde un entorno de Java,
pero para la mayoría de los casos de automatización y manipulación de hojas de cálculo,
Google Apps Script (JavaScript) es la forma más sencilla y recomendada.
TRASFORMACION DE MACRO A JAVASCRIPT EN GOOGLE APPS
SCRIPT

MACRO

Sub GenerarCalendario()
Dim Año As Integer
Dim Mes As Integer
Dim Fecha As Date
Dim DiaInicial As Integer
Dim Fila As Integer
Dim Columna As Integer

' Limpiar el contenido existente en el rango del calendario


Sheets("CALENDARIO_INFINITO").Range("A4:G9").ClearContents
Sheets("CALENDARIO_INFINITO").Range("A4:G9").Interior.ColorIndex =
xlNone
' Cambiar fuente y tamaño de letra
Sheets("CALENDARIO_INFINITO").Range("A4:G9").Font.Name = "Arial"
Sheets("CALENDARIO_INFINITO").Range("A4:G9").Font.Size = 36

' Establecer el ancho de columna y el alto de fila


Sheets("CALENDARIO_INFINITO").Range("A:G").ColumnWidth = 11
Sheets("CALENDARIO_INFINITO").Range("4:9").RowHeight = 44.25

' Ignorar error si A1 está vacía o contiene texto no numérico


On Error Resume Next
Año = Sheets("CALENDARIO_INFINITO").Range("A1").Value ' Año en la
celda A1 de CALENDARIO_INFINITO
On Error GoTo 0 ' Restablecer el manejo de errores

If Año = 0 Then
MsgBox "Por favor, ingresa un año válido en la celda A1.", vbExclamation
Exit Sub
End If

' Extraer el mes de la celda A2 (celda combinada)


Dim MesStr As String
MesStr =
Sheets("CALENDARIO_INFINITO").Range("A2").MergeArea.Cells(1, 1).Value
On Error Resume Next
Mes = Month(DateValue("1 " & MesStr & " " & Año)) ' Obtener el número del
mes
On Error GoTo 0

If Mes = 0 Then
MsgBox "Por favor, ingresa un mes válido en la celda A2.", vbExclamation
Exit Sub
End If

' Calcular el día inicial del mes


Fecha = DateSerial(Año, Mes, 1)
DiaInicial = Weekday(Fecha, vbMonday) ' Definir que el lunes sea el primer día
de la semana

' Escribir días del mes en la hoja de Excel


Fila = 4 ' Fila donde comenzará a escribir el calendario
Columna = DiaInicial ' Columna donde comenzará a escribir el calendario

' Escribir días del mes


Dim i As Integer
For i = 1 To Day(DateSerial(Año, Mes + 1, 0))
Sheets("CALENDARIO_INFINITO").Cells(Fila, Columna).Value = i
If Columna = 7 Then
Columna = 1
Fila = Fila + 1
Else
Columna = Columna + 1
End If
Next i

' Cambiar el texto de la columna G a rojo


Sheets("CALENDARIO_INFINITO").Range("G4:G9").Font.Color = RGB(255,
0, 0) ' Rojo

' Poner en gris las celdas sin datos


Dim celda As Range
For Each celda In Sheets("CALENDARIO_INFINITO").Range("A4:G9")
If celda.Value = "" Then
celda.Interior.Color = RGB(192, 192, 192) ' Gris
End If
Next celda

' Restaurar el color original de todas las celdas excepto G4:G9


Sheets("CALENDARIO_INFINITO").Range("A4:F9").Font.Color = RGB(0, 0,
0) ' Negro

' Verificar si la fecha está en la lista de feriados y cambiar el color del texto a rojo
Dim feriados As Range
Set feriados = Sheets("FERIADOS_C_I").Range("FERIADOS") ' Referencia a la
hoja FERIADOS_C_I y al rango con nombre 'FERIADOS'

For Each celda In Sheets("CALENDARIO_INFINITO").Range("A4:G9")


If Not IsEmpty(celda.Value) Then
Dim fechaComparar As Date
fechaComparar = DateSerial(Año, Mes, celda.Value)

' Verificar si la fecha está en la lista de feriados


If Application.WorksheetFunction.CountIf(feriados, fechaComparar) > 0
Then
celda.Font.Color = RGB(255, 0, 0) ' Rojo
End If
End If
Next celda
End Sub
JAVASCRIPT

Para transformar esta macro de VBA (Visual Basic for Applications) en un Google
Apps Script que funcione en Google Sheets (Drive), hay que realizar algunos
cambios porque Google Apps Script utiliza JavaScript, no VBA. Aquí tienes una
adaptación de la macro para que funcione en Google Sheets:

Código en Google Apps Script:

javascript
CopiarEditar
function generarCalendario() {
var hoja =
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("CALENDARIO_INFIN
ITO");
var año = hoja.getRange("A1").getValue(); // Año en la celda A1
var mesStr = hoja.getRange("A2").getValue(); // Mes en la celda A2
var fecha = new Date(año, obtenerNumeroMes(mesStr), 1); // Fecha del primer día
del mes
var diaInicial = fecha.getDay() || 7; // Convertir domingo (0) a 7 para que lunes sea
el día 1

// Limpiar el contenido existente en el rango del calendario


hoja.getRange("A4:G9").clearContent();
hoja.getRange("A4:G9").setBackground(null); // Limpiar el fondo

// Establecer fuente y tamaño de letra


hoja.getRange("A4:G9").setFontFamily("Arial").setFontSize(36);

// Establecer ancho de columnas y altura de filas


hoja.setColumnWidth(1, 85); // Columna A-G (ancho 85)
hoja.setRowHeights(4, 6, 44); // Filas 4-9 (alto 44)

if (!año || !mesStr) {
SpreadsheetApp.getUi().alert("Por favor, ingresa un año y un mes válidos en las
celdas A1 y A2.");
return;
}
// Escribir días del mes
var fila = 4;
var columna = diaInicial; // La columna donde empieza el primer día

for (var i = 1; i <= new Date(año, obtenerNumeroMes(mesStr) + 1, 0).getDate(); i+


+) {
hoja.getRange(fila, columna).setValue(i);
if (columna == 7) { // Si llegamos a la columna 7 (domingo), pasamos a la
siguiente fila
columna = 1;
fila++;
} else {
columna++;
}
}

// Cambiar el texto de la columna G a rojo


hoja.getRange("G4:G9").setFontColor("red");

// Poner en gris las celdas vacías


var rango = hoja.getRange("A4:G9");
var celdas = rango.getValues();
for (var i = 0; i < celdas.length; i++) {
for (var j = 0; j < celdas[i].length; j++) {
if (!celdas[i][j]) {
hoja.getRange(4 + i, j + 1).setBackground("lightgray");
}
}
}

// Restaurar color original de todas las celdas excepto G4:G9


hoja.getRange("A4:F9").setFontColor("black");

// Verificar si la fecha está en la lista de feriados


var feriados =
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("FERIADOS_C_I").getR
ange("FERIADOS").getValues();
for (var i = 0; i < celdas.length; i++) {
for (var j = 0; j < celdas[i].length; j++) {
if (celdas[i][j]) {
var fechaComparar = new Date(año, obtenerNumeroMes(mesStr), celdas[i][j]);
for (var k = 0; k < feriados.length; k++) {
if (fechaComparar.getTime() == new Date(feriados[k]).getTime()) {
hoja.getRange(4 + i, j + 1).setFontColor("red");
}
}
}
}
}
}

// Función auxiliar para obtener el número del mes


function obtenerNumeroMes(mesStr) {
var meses = ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio",
"agosto", "septiembre", "octubre", "noviembre", "diciembre"];
return meses.indexOf(mesStr.toLowerCase());
}

Explicación de los cambios:

1. Uso de SpreadsheetApp y getRange:


o En lugar de Sheets("CALENDARIO_INFINITO"), se utiliza
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("CALEND
ARIO_INFINITO") para acceder a la hoja.
o Para manipular celdas y rangos, se utiliza getRange() en Google Apps
Script.
2. Manejo de Fechas:
o La función DateSerial de VBA se reemplaza por new Date(año, mes,
1) para crear una fecha en Google Apps Script.
o El día de la semana se obtiene con getDay() y se ajusta para que el
lunes sea el primer día (0 en JavaScript corresponde al domingo, por
eso se utiliza || 7).
3. Estilo y formato:
o setFontFamily y setFontSize se usan para establecer la fuente y
tamaño de la letra.
o setColumnWidth y setRowHeights se utilizan para ajustar el tamaño
de las columnas y filas.
4. Lógica de los feriados:
o Los feriados se toman de un rango con nombre ("FERIADOS") y se
compara cada fecha del calendario con las fechas de los feriados
utilizando getValues() y getTime() para la comparación.
5. Funciones auxiliares:
o La función obtenerNumeroMes() se utiliza para convertir el nombre
del mes a su número correspondiente, como se hace en VBA con la
función Month(DateValue(...)).
Cómo usar este código:

1. Abre tu hoja de Google Sheets.


2. Ve a Extensiones → Apps Script.
3. Pega el código anterior en el editor de Google Apps Script.
4. Guarda el proyecto con un nombre apropiado.
5. Para ejecutar el script, haz clic en el botón Ejecutar (triángulo) en la parte
superior del editor.

También podría gustarte