Apps Script desde cero: automatiza lo repetitivo sin ser programador

En este artículo
La tarea que haces 40 veces al mes
Todos los lunes a las 8 de la mañana, Claudia abre la misma hoja de cálculo. Filtra las ventas de la semana, copia el total, abre Gmail, redacta el mismo correo de siempre y se lo manda a su jefe. Lunes tras lunes. Lleva dos años haciéndolo.
Quince minutos por lunes, durante dos años, son más de tres días laborales completos dedicados a copiar y pegar números. Y Claudia no es un caso raro: casi todos tenemos una tarea así, hecha en piloto automático y odiada en silencio.
Apps Script existe para eso: para que la hoja haga sola lo repetitivo. Y no necesitas ser programador: si sabes escribir =SUMA(A1:A10), ya tienes medio camino andado.
¿Qué es Apps Script, sin tecnicismos?
Apps Script es un lenguaje que vive dentro de Google Sheets (y de Docs, Gmail, Calendar…). Está basado en JavaScript, pero no vas a construir aplicaciones: vas a escribir instrucciones cortas como “cuando editen esta celda, pon la fecha en la de al lado”.
Son las fórmulas con esteroides: un script reacciona a los datos y además envía correos, crea archivos o mueve información entre hojas. La diferencia entre una calculadora y un asistente.
¿Y por qué no usar las macros de Excel? Porque Apps Script vive en la nube: tus scripts corren aunque tu computador esté apagado, y se comparten con la hoja. Si le pasas el archivo a un compañero, la automatización viaja con él. (Y si tus tareas repetitivas incluyen buscar datos a mano entre tablas, primero domina la herramienta: aquí tienes BUSCARV en Excel explicado paso a paso con un ejemplo real.)
Cómo abrir el editor (tarda 20 segundos)
Antes de escribir nada, abre el taller. En tu hoja de Google Sheets:
- Ve al menú Extensiones → Apps Script.
- Se abre el editor. Verás un archivo
Código.gscon una función de ejemplo. - Eso es todo. Ya estás dentro.
El editor tiene tres zonas que te interesan: el panel de archivos a la izquierda, el código en el centro y, arriba, los botones Ejecutar y Registros. Piensa en ello como un bloc de notas con superpoderes.
Tu primer script: marca de tiempo al editar una celda
Algo útil de verdad: en una hoja “Pedidos”, cada vez que alguien escriba un cliente en la columna A, la columna B registrará la fecha y hora automáticamente. Borra el código de ejemplo y pega esto:
function onEdit(e) {
var hoja = e.source.getActiveSheet();
var celda = e.range;
// Solo actúa en la columna A de la hoja "Pedidos"
if (hoja.getName() === "Pedidos" && celda.getColumn() === 1) {
var fila = celda.getRow();
hoja.getRange(fila, 2).setValue(new Date());
}
}
¿Qué hace? onEdit es un nombre mágico: Sheets la ejecuta sola con cada edición. La e trae info sobre qué celda cambió; verificamos que sea la hoja “Pedidos” y la columna A, y escribimos la fecha y hora actual en la columna B de la misma fila.
Guarda con Ctrl+S, vuelve a tu hoja, escribe un nombre en A2 y mira la columna B. Fecha y hora, solas. Acabas de programar, y te tomó cinco minutos. Este script no necesita que pulses nada: corre solo con cada edición gracias a los activadores, que veremos ahora.
Macros grabadas vs código escrito: ¿por cuál empiezo?
Sheets tiene Extensiones → Macros → Grabar macro: registra tus clics y los convierte en código. Suena perfecto —graba una vez, repite mil veces—, pero hay un pero.
Las macros grabadas sirven para tareas muy mecánicas —dar formato, aplicar filtros—, pero el código que generan es rígido: si la grabaste en las filas 2 a 50, siempre trabajará ahí, aunque mañana tengas 200. No se adapta, no decide, no envía correos.
Mi recomendación: usa la macro grabada para aprender vocabulario (grábala, abre el editor, lee lo que generó). Pero para automatizaciones que se adapten a datos nuevos y corran solas a las 7 a.m., escribe el código tú. Con los ejemplos de este artículo ya tienes plantillas.
Activadores: que todo corra solo
Un script que ejecutas a mano es una fórmula complicada. Lo que lo vuelve automatización de verdad es el activador: la instrucción que le dice a Google cuándo correrlo sin que intervengas.
Tres cubren el 90% de los casos:
- Al editar (
onEdit): corre cada vez que alguien cambia una celda. Ya lo usaste en el primer ejemplo. Ideal para marcas de tiempo, validaciones extra o actualizar un campo derivado. - Al abrir (
onOpen): corre cuando alguien abre la hoja. Perfecto para dejar todo ordenado y filtrado antes de que el usuario toque nada. - Por tiempo: corre cada hora, cada día, cada lunes a las 8 a.m… Se configura en el editor, en el icono de reloj (Activadores) a la izquierda. Ideal para reportes automáticos: el script de Claudia, el de los lunes a las 8, usaría este.
Para crear uno por tiempo: en el editor, clic en el reloj → Añadir activador → elige tu función y la frecuencia. Google te pedirá autorización la primera vez (no te saltes la sección de permisos al final).
Dos recetas listas para copiar y pegar
1. Reporte automático por correo cada semana
El caso de Claudia, resuelto: lee el total de una hoja “Resumen” y lo envía por correo.
function enviarReporteSemanal() {
var hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Resumen");
var total = hoja.getRange("B2").getValue();
var asunto = "Reporte semanal de ventas";
var cuerpo = "Hola,\n\nEl total de ventas de la semana fue: $" + total + "."
+ "\n\nSaludos automáticos de tu hoja de cálculo.";
MailApp.sendEmail("jefe@empresa.com", asunto, cuerpo);
}
Cambia “Resumen”, “B2” y el correo por los tuyos, crea un activador por tiempo (cada lunes, 8:00 a.m.) y olvídate: el reporte sale solo, estés de vacaciones o no.
2. Ordenar la hoja automáticamente al abrirla
¿Tu equipo desordena la hoja? Este script la ordena por la primera columna cada vez que alguien la abre:
function onOpen() {
var hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Ventas");
var ultimaFila = hoja.getLastRow();
var rango = hoja.getRange(2, 1, ultimaFila - 1, 6);
rango.sort({column: 1, ascending: true});
}
El truco: en vez de fijar “A2:F500”, getLastRow() detecta hasta dónde hay datos. El script se adapta cuando la hoja crece y no se rompe como una macro grabada.
Si tus datos llegan sucios, límpialos y transfórmalos primero antes de automatizar. Automatizar sobre datos sucios es como ponerle turbo a un carro sin frenos.
Depurar sin sufrir: lo básico
Tu primer script probablemente no funcione a la primera. A nadie le funciona a la primera: depurar —encontrar qué salió mal— es parte normal del proceso, no una señal de que esto no es para ti.
La herramienta más simple es el registro: agrega líneas así en puntos clave:
console.log("El total leído fue: " + total);
Ejecuta con Ejecutar y abre Registros de ejecución: verás tus mensajes y los errores con su número de línea.
Los tres errores que verás una y otra vez:
- “Cannot read properties of null” (o “no se puede leer la propiedad de null”): casi siempre significa que
getSheetByName("Ventas")no encontró la hoja. Revisa el nombre: una tilde, un espacio de más, una mayúscula distinta, y ya no coincide. - El script no hace nada y no da error: revisa tus condiciones
if. En el ejemplo de la marca de tiempo, si la hoja se llama “Pedidos ” con un espacio al final, la comparación falla en silencio. - “Authorization is required”: es normal la primera vez que un script toca Gmail o se ejecuta por tiempo. Te lleva al siguiente punto.
Un consejo que me hubiera ahorrado horas: cuando algo falla, comenta la mitad del código con // y ejecuta solo la otra mitad, hasta aislar la línea culpable. Los programadores profesionales hacen esto a diario.
Los permisos: por qué Google te pregunta tanto
La primera vez que un script envíe correos o corra por tiempo, Google mostrará una pantalla de autorización, a veces con un aviso de “aplicación no verificada”. Es normal, no entres en pánico.
Le estás dando a tu propio script permiso para actuar en tu nombre (enviar correos como tú, leer tus hojas), y Google te advierte porque un script malicioso podría abusar de eso. Como el código lo escribiste tú —o lo copiaste de una fuente confiable y lo leíste—, avanza tranquilo: en “aplicación no verificada”, clic en Configuración avanzada → Ir a tu proyecto y autoriza.
La regla de oro, de todos modos: nunca autorices un script que no entiendes o que viene de un desconocido. Un script puede leer tus correos y tus archivos; dale ese poder solo a código que hayas revisado. Los tres ejemplos de este artículo son seguros porque hacen exactamente lo que dicen, línea por línea, sin nada escondido. Si quieres verificarlo por tu cuenta, la documentación oficial de Google explica cada servicio disponible.
Empieza con una sola automatización
No intentes automatizar tu trabajo entero esta semana. Elige esa tarea que haces en piloto automático y conviértela en un script con activador por tiempo. Una sola.
Cuando llegue ese primer correo automático un lunes a las 8 a.m. sin que movieras un dedo, entenderás por qué la gente se engancha. Desde ahí, cada tarea repetitiva será un candidato: “¿esto lo podría hacer un script?”. Casi siempre, sí. (Y si tus fechas se descuadran en los reportes automáticos, revisa cómo manejar bien las fechas en hojas de cálculo.)
