Hojas de cálculo en el trabajo
¿Qué es GAS (Google Apps Script)?
Guía para automatizar Hojas de cálculo de Google
Dejar cada semana una tabla con la misma forma. Borrar las filas vacías de los datos pegados. Marcar las filas que cumplen una condición. Las hojas de cálculo están llenas de tareas con pasos fijos.
GAS (Google Apps Script) es lo que hace estas tareas de forma automática. Este artículo explica qué puede hacer GAS, por dónde empezar y cómo pasar las pantallas de «autorización» en las que se atasca mucha gente la primera vez.
¿Qué es GAS?
GAS es la forma que ofrece Google de ejecutar programas. Usa la misma sintaxis que JavaScript y maneja Hojas de cálculo de Google y también Gmail, Google Calendar, Google Drive y Formularios de Google.
Solo necesitas una cuenta de Google. Es gratis y no hay que instalar nada: abre una hoja en el navegador y empieza a escribir. El programa se ejecuta en los servidores de Google, no en tu ordenador.
Macros grabadas y GAS
Hojas de cálculo de Google tiene «macros» que graban lo que haces para repetirlo cuantas veces quieras. Empieza a grabar con «Extensiones» → «Macros» → «Grabar macro», selecciona y escribe en celdas, y tus acciones se guardan como código GAS.
/** @OnlyCurrentDoc */
function myFunction() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('B2').activate();
spreadsheet.getCurrentCell().setValue('test');
spreadsheet.getActiveRangeList().setFontWeight('bold');
};Es decir, una macro es GAS por dentro. Aunque le pongas un nombre como «Prueba negrita», la función del código se llama myFunction. El nombre del menú y el de la función se guardan por separado.
Al grabar, eliges en la barra inferior «Usar referencias absolutas» o «Usar referencias relativas». Las absolutas se guardan como direcciones (B2), así que la macro escribe siempre en el mismo sitio, sea cual sea la celda seleccionada. Las relativas se guardan como «una fila debajo de la celda actual» y parten de la celda seleccionada.
Solo con grabar no se pueden manejar tablas de longitud variable ni pasos con condiciones. A partir de ahí, se lee el código grabado y se completa.
Qué se puede hacer con GAS
- Borrar las filas vacías de datos pegados y dar formato a los encabezados
- Revisar importes o fechas y escribir «Grande» o «Vencido» en una columna
- Añadir un menú propio a la hoja y lanzar procesos como con un botón
- Crear funciones propias para usar en celdas (funciones personalizadas)
- Enviar correos con Gmail a partir de una tabla
- Ejecutar una tarea a una hora fija, por ejemplo cada mañana a las 8 (activadores)
- Copiar a otra hoja las respuestas de Formularios de Google en cuanto llegan
A mano, cada una de estas tareas lleva de unos minutos a decenas de minutos. Escrita una vez, después basta con pulsar un menú, o se ejecuta sola.
Cómo empezar con GAS
- Abrir la hoja y elegir «Extensiones» → «Apps Script»
- El editor se abre en una pestaña nueva: «Código.gs» a la izquierda y
function myFunction() { }a la derecha - Escribir el código dentro de
{ }y guardar (Ctrl+S, en Mac ⌘+S) - Pulsar «▷ Ejecutar» arriba. El resultado aparece abajo, en el «Registro de ejecución»
function myFunction() {
const sheet = SpreadsheetApp.getActiveSheet();
const value = sheet.getRange('A1').getValue();
Logger.log(value);
sheet.getRange('B1').setValue('Comprobado');
}Logger.log escribe un valor en el registro de ejecución. Los números aparecen con punto decimal, por ejemplo 120.0 (console.log muestra 120). Si algo no funciona como esperas, revisa primero los valores en el registro.
Las pantallas de autorización en la primera ejecución
La primera vez que ejecutas tu código aparece una pantalla que pregunta si el script puede leer y editar tu hoja. Mucha gente se queda aquí, así que vamos paso a paso.
- «Se necesita autorización» → Revisar permisos / Aceptar
- Elegir una cuenta
- «Google no ha verificado esta aplicación» → «Configuración avanzada» abajo a la izquierda
- «Ir a (nombre del proyecto) (no seguro)»
- Revisar lo que permites y pulsar «Permitir» (si hay elementos que marcar, márcalos y pulsa «Continuar»)
«Google no ha verificado esta aplicación» es un aviso para scripts que Google no ha revisado. Tus propios scripts y las macros que grabas no están revisados, así que esta pantalla aparece siempre. Si lo has hecho tú, puedes continuar sin problema.
En cambio, si aparece en una hoja que te pasó alguien que no conoces, elige «Volver a seguridad». Una vez permitido, el script puede actuar sobre tus hojas y tu correo con tu cuenta.
Si pones /** @OnlyCurrentDoc */ al principio del código, el script solo puede tocar «esta hoja» y los permisos que se piden son más limitados. Las macros grabadas lo llevan desde el principio.
Puedes seguir los mismos pasos en la misión 1 de la práctica.
Código habitual
Esto es lo que más se usa al trabajar con una hoja. Los números de fila y columna empiezan en 1, y los índices de una matriz leída con getValues, en 0.
| Código | Significado |
|---|---|
| const sheet = SpreadsheetApp.getActiveSheet(); | La hoja abierta ahora |
| sheet.getRange('A1').getValue() | Leer el valor de A1 |
| sheet.getRange('A1').setValue('Completado') | Escribir en A1 |
| sheet.getRange(2, 3) | Fila 2, columna 3 (C2). Las columnas se pueden indicar con números |
| sheet.getRange('A2:C10').getValues() | Leer un rango de una vez (matriz bidimensional) |
| sheet.getRange(2, 1, 9, 3).setValues(values) | Escribir de una vez (filas y columnas iguales a la matriz) |
| sheet.getLastRow() | Número de la última fila con valor |
| sheet.appendRow(['10/31', 'sato', 5000]) | Añadir una fila debajo de la última |
| sheet.deleteRow(5) | Borrar la fila 5 (las de debajo suben) |
| sheet.getRange('A1:D1').setFontWeight('bold') | Poner en negrita |
| sheet.getRange('A1:D1').setBackground('#fff2cc') | Poner color de fondo |
| Logger.log(value) | Escribir en el registro de ejecución (para revisar valores) |
function judgeTargets() {
const sheet = SpreadsheetApp.getActiveSheet();
for (let row = 2; row <= sheet.getLastRow(); row++) {
const sales = sheet.getRange(row, 2).getValue();
const target = sheet.getRange(row, 3).getValue();
if (sales >= target) {
sheet.getRange(row, 4).setValue('Logrado');
} else {
sheet.getRange(row, 4).setValue('No logrado');
}
}
}function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Cierre mensual')
.addItem('Marcar ventas grandes', 'markLarge')
.addToUi();
}Una función llamada onOpen se ejecuta automáticamente al abrir la hoja. Si la ejecutas con «▷ Ejecutar» en el editor aparece el error Cannot call SpreadsheetApp.getUi() from this context., así que guarda y vuelve a abrir la hoja para comprobarlo.
Enviar correos y programar con activadores
Lo que más se busca sobre GAS es el envío de correos y los activadores.
function sendReminders() {
const sheet = SpreadsheetApp.getActiveSheet();
const rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, 2).getValues();
rows.forEach(([name, email]) => {
MailApp.sendEmail(email, 'Aviso de fecha límite', name + ',\n\nLa fecha límite es este viernes.');
});
}Hay un límite de envíos: una cuenta gratuita de Google puede enviar hasta 100 correos al día (las cuentas de Google Workspace, más). Cada ejecución dura como máximo 6 minutos; si se pasa, se detiene con «Exceeded maximum execution time».
Para programarlo, pulsa a la izquierda del editor «Activadores» (icono de reloj) → «Añadir activador» y elige la función y «Según tiempo». Puedes fijar una franja horaria cada día, semana o mes.
Los correos se envían de verdad aunque solo estés probando. Prueba primero con una tabla que solo tenga tu propia dirección.
Diferencias con VBA de Excel
| GAS | VBA de Excel | |
|---|---|---|
| Código | JavaScript | VBA(Visual Basic) |
| Dónde se ejecuta | Servidores de Google | Excel en tu propio ordenador |
| Qué necesitas | Un navegador y una cuenta de Google | La versión de escritorio de Excel (sobre todo en Windows) |
| Se conecta con | Gmail, Calendar, Drive, Formularios | Word, Outlook, archivos del ordenador |
| Ejecutar a una hora fija | Con activadores (funciona aunque el ordenador esté apagado) | Combinado con el Programador de tareas de Windows u otro similar |
Las ideas son las mismas en ambos: leer celdas, escribir, repetir y distinguir según condiciones. Si sabes uno, puedes leer el otro. Las macros de Excel están en nuestra introducción a las macros de Excel.
Practicar en el navegador
En la simulación de macros y GAS de este sitio practicas ejecutando código real en una hoja y un editor de Apps Script virtuales. Rellenas huecos en el código y, en el móvil, eliges cada hueco entre cuatro opciones.
- Capítulo 1 Grabar y ejecutar macros
Ejecutar una macro grabada y grabar una propia. Referencias absolutas y relativas, cómo leer y corregir el código grabado.
- Capítulo 2 Leer, repetir, distinguir
Leer celdas con getValue, escribir con setValue y revisar valores en el registro de ejecución. Recorrer todas las filas con for y distinguir con if.
- Capítulo 3 Caso práctico: ordenar la tabla de ventas mensual
Borrar filas vacías, marcar de una vez las ventas grandes y lanzarlo desde un menú propio. Por último, una función propia para las celdas.
Cómo aprender GAS
Un buen comienzo es «Grabar macro» en una de tus hojas y leer el código que sale. Así se ve mejor qué hace cada instrucción.
La IA generativa también escribe código. Pero para saber si está bien y dónde corregirlo, tienes que poder leer al menos el «código habitual» de este artículo.
* Los nombres de pantalla y los límites son de octubre de 2026 y pueden cambiar con las novedades de Google.
* Hojas de cálculo de Google es una marca de Google LLC. Este sitio no está afiliado a Google.