Ir al contenido principal
Javadex

Cómo Automatizar Excel con IA: ChatGPT + Python [Guía 2026]

14 min

Aprende a automatizar Excel con inteligencia artificial usando ChatGPT para fórmulas y Python con openpyxl para procesos masivos.

Índice del artículo9 secciones

Excel es el software más usado en negocios, pero también es una fuente inagotable de tareas repetitivas y propensas a errores. En 2026, combinar Excel con IA (ChatGPT, Claude, modelos locales) transforma cómo trabajas.

En esta guía, te mostraré cómo usar ChatGPT para generar fórmulas complejas, automatizar tareas con Python, conectar Excel directamente a APIs de IA, y construir sistemas que hacen el trabajo por ti.

Por qué automatizar Excel con IA#

Estudio realizado en 2025: El empleado típico gasta 8-10 horas semanales en tareas manuales en Excel. Copiar-pegar, formatear, crear reportes, limpiar datos.

Con IA, reduces este tiempo a menos de 1 hora de configuración inicial, y luego tienes automatización completa.

Casos de uso reales:

  • Reportes de ventas: Generar automáticamente cada mañana con datos del día anterior
  • Limpieza de datos: IA identifica duplicados, inconsistencias, formatos incorrectos
  • Análisis de datos: Crear tablas dinámicas y gráficos automáticamente
  • Extracción de información: IA lee emails/documentos, extrae datos, llena Excel
  • Generación de fórmulas: ChatGPT escribe fórmulas complejas (VLOOKUP, INDEX/MATCH, array formulas)
  • Validación de datos: Verificar consistencia automáticamente

Opción 1: ChatGPT para generar fórmulas Excel#

La forma más rápida: pide a ChatGPT que escriba tus fórmulas.

Ejemplos prácticos#

Pregunta a ChatGPT:

code
1Tengo una tabla en Excel:
2- Columna A: Nombres (John, Jane, Bob)
3- Columna B: Ventas (1000, 2500, 1200)
4- Columna C: Comisión (5%)
5 
6¿Qué fórmula calcula la comisión de cada persona?

Respuesta ChatGPT:

code
1=B2*C$2
2 
3En la celda D2, escribe: =B2*$C$2
4Luego copia hacia abajo.
5 
6O si quieres una sola fórmula array:
7=B2:B4*C$2

Fórmulas avanzadas con ChatGPT#

code
1Tengo ventas por producto (columna A) y cantidades (columna B).
2Quiero un VLOOKUP que busque en una tabla "producto" : "precio"
3en el rango E2:F100, y calcule el total.
4 
5La tabla lookup es:
6Producto | Precio
7iPhone | 800
8Samsung | 600
9Pixel | 500

ChatGPT genera:

excel
1=VLOOKUP(A2,$E$2:$F$100,2,FALSE)*B2

Fórmulas INDEX/MATCH (más flexible que VLOOKUP)#

code
1Quiero buscar el nombre en A2 en la tabla E:G
2(Nombre, Edad, Salario) y retornar el Salario.

ChatGPT genera:

excel
1=INDEX($G$2:$G$100,MATCH(A2,$E$2:$E$100,0))

Consejos para prompts efectivos a ChatGPT#

  1. Sé específico: "Suma si la fecha es mayor que hoy" es mejor que "suma condicional"
  2. Incluye ejemplos: "Tengo estos datos..." hace la respuesta más precisa
  3. Menciona versión Excel: Excel 365 tiene XLOOKUP (mejor); Excel 2019 no
  4. Pide explicación: "Explica paso a paso qué hace esta fórmula"

Opción 2: Python para automatización completa#

Para tareas complejas, Python + librerías es superior.

Setup inicial#

bash
1pip install openpyxl pandas openpyxl requests python-dotenv

Lectura y escritura básica#

python
1from openpyxl import load_workbook
2 
3# Cargar archivo existente
4wb = load_workbook('ventas.xlsx')
5ws = wb.active
6 
7# Leer datos
8for row in ws.iter_rows(min_row=2, max_row=10, min_col=1, max_col=3):
9 nombre, ventas, comisión = row[0].value, row[1].value, row[2].value
10 print(f"{nombre}: {ventas} (comisión: {comisión})")
11 
12# Escribir datos
13ws['D2'] = 'Nueva columna'
14wb.save('ventas_actualizado.xlsx')

Generación automática de reportes#

python
1from openpyxl import Workbook
2from openpyxl.styles import Font, PatternFill, Alignment
3from openpyxl.utils import get_column_letter
4import pandas as pd
5from datetime import datetime
6 
7class ReporteVentas:
8 def __init__(self, datos: list):
9 self.datos = datos
10 self.wb = Workbook()
11 self.ws = self.wb.active
12 self.ws.title = "Ventas"
13 
14 def crear_encabezados(self):
15 """Crea encabezados con estilo."""
16 headers = ["Fecha", "Producto", "Cantidad", "Precio Unitario", "Total"]
17 
18 for col_num, header in enumerate(headers, 1):
19 cell = self.ws.cell(row=1, column=col_num)
20 cell.value = header
21 cell.font = Font(bold=True, size=12, color="FFFFFF")
22 cell.fill = PatternFill(start_color="366092", end_color="366092", fill_type="solid")
23 cell.alignment = Alignment(horizontal="center")
24 
25 # Ancho de columnas
26 self.ws.column_dimensions['A'].width = 12
27 self.ws.column_dimensions['B'].width = 20
28 self.ws.column_dimensions['C'].width = 10
29 self.ws.column_dimensions['D'].width = 15
30 self.ws.column_dimensions['E'].width = 12
31 
32 def agregar_datos(self):
33 """Agrega datos y fórmulas."""
34 for idx, row_data in enumerate(self.datos, start=2):
35 fecha, producto, cantidad, precio = row_data
36 
37 self.ws[f'A{idx}'] = fecha
38 self.ws[f'B{idx}'] = producto
39 self.ws[f'C{idx}'] = cantidad
40 self.ws[f'D{idx}'] = precio
41 
42 # Fórmula para Total (cantidad × precio)
43 self.ws[f'E{idx}'] = f'=C{idx}*D{idx}'
44 
45 # Formato moneda
46 self.ws[f'E{idx}'].number_format = '$#,##0.00'
47 self.ws[f'D{idx}'].number_format = '$#,##0.00'
48 
49 def agregar_totales(self):
50 """Agrega fila de totales al final."""
51 last_row = len(self.datos) + 2
52 
53 self.ws[f'B{last_row}'] = 'TOTAL'
54 self.ws[f'B{last_row}'].font = Font(bold=True)
55 
56 # Suma del total
57 self.ws[f'E{last_row}'] = f'=SUM(E2:E{last_row-1})'
58 self.ws[f'E{last_row}'].font = Font(bold=True)
59 self.ws[f'E{last_row}'].number_format = '$#,##0.00'
60 
61 def exportar(self, filename: str = None):
62 """Guarda el reporte."""
63 if filename is None:
64 filename = f"reporte_ventas_{datetime.now().strftime('%Y%m%d')}.xlsx"
65 
66 self.wb.save(filename)
67 print(f"✓ Reporte guardado: {filename}")
68 
69# Uso
70datos_ventas = [
71 (datetime(2026, 2, 8), "iPhone 15", 5, 999),
72 (datetime(2026, 2, 8), "Samsung Galaxy", 3, 799),
73 (datetime(2026, 2, 8), "Pixel 9", 2, 599),
74]
75 
76reporte = ReporteVentas(datos_ventas)
77reporte.crear_encabezados()
78reporte.agregar_datos()
79reporte.agregar_totales()
80reporte.exportar()

Limpieza de datos con Pandas#

python
1import pandas as pd
2import numpy as np
3 
4# Cargar Excel
5df = pd.read_excel('datos_sucios.xlsx')
6 
7# Eliminar duplicados
8df = df.drop_duplicates()
9 
10# Eliminar espacios en blanco
11df['nombre'] = df['nombre'].str.strip()
12 
13# Rellenar valores faltantes
14df['comisión'] = df['comisión'].fillna(0)
15 
16# Conversión de tipos
17df['fecha'] = pd.to_datetime(df['fecha'])
18df['ventas'] = pd.to_numeric(df['ventas'], errors='coerce')
19 
20# Filtrado
21df_filtrado = df[df['ventas'] > 1000]
22 
23# Agregaciones
24resumen = df.groupby('producto')['ventas'].sum()
25 
26# Guardar
27df.to_excel('datos_limpios.xlsx', index=False)

Opción 3: Conectar Excel a ChatGPT via API#

La verdadera potencia: Excel consulta ChatGPT automáticamente.

Setup con Python + API OpenAI#

python
1import openpyxl
2from openai import OpenAI
3import os
4from dotenv import load_dotenv
5 
6load_dotenv()
7client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
8 
9def consulta_chatgpt(prompt: str) -> str:
10 """Consulta ChatGPT y retorna respuesta."""
11 response = client.chat.completions.create(
12 model="gpt-4o",
13 messages=[
14 {
15 "role": "system",
16 "content": "Eres un asistente de análisis de datos Excel experto. Responde brevemente."
17 },
18 {"role": "user", "content": prompt}
19 ],
20 temperature=0.7
21 )
22 return response.choices[0].message.content
23 
24class ExcelConChatGPT:
25 def __init__(self, filepath: str):
26 self.wb = openpyxl.load_workbook(filepath)
27 self.ws = self.wb.active
28 
29 def generar_insight(self, fila_inicio: int, fila_fin: int):
30 """Usa ChatGPT para generar insights sobre datos."""
31 datos = []
32 for row in self.ws.iter_rows(
33 min_row=fila_inicio,
34 max_row=fila_fin,
35 min_col=1,
36 max_col=3,
37 values_only=True
38 ):
39 datos.append(row)
40 
41 prompt = f"""Analiza estos datos de ventas: {datos}
42 Proporciona 2-3 insights clave en una oración cada uno."""
43 
44 insight = consulta_chatgpt(prompt)
45 
46 # Inserta insight en Excel
47 self.ws['D2'] = "Insights de IA:"
48 self.ws['D3'] = insight
49 
50 self.wb.save('resultado.xlsx')
51 return insight
52 
53# Uso
54excel_ai = ExcelConChatGPT('ventas.xlsx')
55excel_ai.generar_insight(2, 10)

Extracción automática de información con IA#

python
1import re
2 
3def extraer_datos_inteligentes(texto: str) -> dict:
4 """
5 Usa ChatGPT para extraer datos estructurados de texto no estructurado.
6 Ej: email, factura, contrato
7 """
8 prompt = f"""Extrae los siguientes datos del texto y responde en JSON:
9 - nombre
10 - email
11 - monto
12 - fecha
13 - producto
14 
15 Texto: {texto}
16 
17 Responde SOLO con JSON, sin explicación."""
18 
19 respuesta = consulta_chatgpt(prompt)
20 
21 # Parsear JSON
22 import json
23 try:
24 return json.loads(respuesta)
25 except:
26 print("Error parseando JSON")
27 return {}
28 
29# Uso
30email = """
31Hola, soy Juan Pérez (juan@empresa.com).
32Quiero una licencia de Software Pro.
33El monto es $99.99
34La fecha de activación es 2026-02-10
35"""
36 
37datos_extraidos = extraer_datos_inteligentes(email)
38print(datos_extraidos)
39# Output: {'nombre': 'Juan Pérez', 'email': 'juan@empresa.com', ...}

Opción 4: Microsoft Copilot para Excel (2026)#

Microsoft ha integrado Copilot directamente en Excel. Funciona sin código.

Cómo usar Copilot en Excel#

  1. Abre Excel Online (Office 365)
  2. Click "Copilot" (esquina superior derecha)
  3. Pide en lenguaje natural:

code
1"Analiza los datos de ventas y créame una tabla con totales por producto"
2 
3"Encuentra valores atípicos en la columna de precios"
4 
5"Crea una fórmula que calcule la comisión del 5% si ventas > 1000"

Copilot:

  • ✓ Entiende el contexto de tu hoja
  • ✓ Crea fórmulas automáticamente
  • ✓ Sugiere visualizaciones
  • ✗ Menos poderoso que Python para casos complejos

Casos de uso completos#

Caso 1: Sistema de Facturación Automático#

python
1import openpyxl
2from openpyxl.utils import get_column_letter
3import json
4 
5class FacturaAutomatica:
6 def __init__(self):
7 self.wb = openpyxl.Workbook()
8 self.ws = self.wb.active
9 self.setup_template()
10 
11 def setup_template(self):
12 """Crea template de factura."""
13 # Header
14 self.ws['A1'] = 'FACTURA'
15 self.ws['A1'].font = openpyxl.styles.Font(size=16, bold=True)
16 
17 # Datos cliente
18 self.ws['A3'] = 'Cliente:'
19 self.ws['B3'] = '' # Rellenar con input
20 
21 # Tabla de items
22 headers = ['Item', 'Descripción', 'Cantidad', 'Precio Unitario', 'Total']
23 for col, header in enumerate(headers, 1):
24 self.ws.cell(row=6, column=col).value = header
25 self.ws.cell(row=6, column=col).font = openpyxl.styles.Font(bold=True)
26 
27 # Rows de items (pre-formateados)
28 for row in range(7, 17):
29 # Fórmula para Total (col D * col E)
30 self.ws[f'E{row}'] = f'=C{row}*D{row}'
31 self.ws[f'E{row}'].number_format = '$#,##0.00'
32 
33 # Totales
34 self.ws['D18'] = 'SUBTOTAL:'
35 self.ws['E18'] = '=SUM(E7:E17)'
36 
37 self.ws['D19'] = 'IVA (21%):'
38 self.ws['E19'] = '=E18*0.21'
39 
40 self.ws['D20'] = 'TOTAL:'
41 self.ws['E20'] = '=E18+E19'
42 self.ws['E20'].font = openpyxl.styles.Font(bold=True, size=12)
43 
44 def generar_factura(self, cliente: str, items: list):
45 """
46 items: [
47 {'descripcion': 'Servicio A', 'cantidad': 2, 'precio': 100},
48 {'descripcion': 'Servicio B', 'cantidad': 1, 'precio': 250},
49 ]
50 """
51 self.ws['B3'] = cliente
52 
53 for idx, item in enumerate(items, start=7):
54 self.ws[f'B{idx}'] = item['descripcion']
55 self.ws[f'C{idx}'] = item['cantidad']
56 self.ws[f'D{idx}'] = item['precio']
57 self.ws[f'D{idx}'].number_format = '$#,##0.00'
58 
59 filename = f"factura_{cliente}_{len(items)}_items.xlsx"
60 self.wb.save(filename)
61 print(f"✓ Factura generada: {filename}")
62 
63# Uso
64factura = FacturaAutomatica()
65factura.generar_factura(
66 cliente="Empresa XYZ",
67 items=[
68 {'descripcion': 'Consultoría IA', 'cantidad': 10, 'precio': 150},
69 {'descripcion': 'Desarrollo Python', 'cantidad': 40, 'precio': 100},
70 ]
71)

Caso 2: Monitor de precios con IA#

python
1import pandas as pd
2from datetime import datetime
3import requests
4 
5def monitor_precios_amazon(urls: list):
6 """
7 Monitorea precios de productos Amazon.
8 En producción, usa BeautifulSoup + Selenium.
9 Este es pseudo-código.
10 """
11 datos = []
12 
13 for url in urls:
14 # En realidad, harías scraping con Selenium
15 # Aquí es simulado
16 nombre_producto = "iPhone 15 Pro"
17 precio_actual = 999
18 fecha = datetime.now().strftime('%Y-%m-%d')
19 
20 # Consulta a ChatGPT si el precio es "bueno"
21 prompt = f"El {nombre_producto} cuesta ${precio_actual}. ¿Es buen precio en 2026?"
22 recomendacion = consulta_chatgpt(prompt)
23 
24 datos.append({
25 'Producto': nombre_producto,
26 'Precio': precio_actual,
27 'Fecha': fecha,
28 'Recomendación IA': recomendacion[:50] # Primeros 50 caracteres
29 })
30 
31 # Guarda en Excel
32 df = pd.DataFrame(datos)
33 df.to_excel('monitoreo_precios.xlsx', index=False)
34 print("✓ Monitoreo completado")
35 
36# Uso
37monitor_precios_amazon([
38 "https://amazon.es/iPhone-15-Pro",
39 "https://amazon.es/Samsung-Galaxy-S24",
40])

Mejores prácticas#

Versiona tu archivo: Guarda backups con timestamp.

python
1import shutil
2from datetime import datetime
3 
4filename = 'datos.xlsx'
5backup = f"backup_{datetime.now().strftime('%Y%m%d_%H%M%S')}.xlsx"
6shutil.copy(filename, backup)

Manejo de errores:

python
1try:
2 df = pd.read_excel('datos.xlsx')
3except FileNotFoundError:
4 print("Archivo no encontrado")
5except Exception as e:
6 print(f"Error: {e}")

Automatización con scheduler:

bash
1# Ejecutar script cada día a las 8am (Linux/Mac)
20 8 * * * /usr/bin/python3 /path/to/script.py
3 
4# Windows: Usa Task Scheduler

En Python:

python
1from apscheduler.schedulers.background import BackgroundScheduler
2 
3scheduler = BackgroundScheduler()
4scheduler.add_job(mi_funcion_automatizacion, 'cron', hour=8)
5scheduler.start()
6 
7# Mantén el programa corriendo
8import time
9while True:
10 time.sleep(1)

Comparativa: Métodos de automatización#

MétodoFacilidadPoderVelocidadCoste
ChatGPT PromptsMuy fácilLimitadoRápido$20/mes
VBA MacrosMedioAltoInstantGratis
Python + openpyxlMedioMuy altoDependeGratis
Copilot ExcelMuy fácilMedioRápidoIncluido Office 365
Microsoft FlowFácilMedioAutomáticoGratis/pago
Power AutomateMedioAltoAutomático$15/mes

Preguntas frecuentes#

¿Cuánto cuesta automatizar Excel con ChatGPT?#

ChatGPT Plus es $20/mes. Por API, pagas por token (~$0.01 por 1000 tokens). Para automatización, típicamente $1-10/mes.

¿Es seguro usar mi clave API en un script?#

No directamente. Usa variables de entorno:

python
1from dotenv import load_dotenv
2import os
3 
4load_dotenv() # Lee .env
5api_key = os.getenv("OPENAI_API_KEY")

Añade .env a .gitignore para que no se pushee a GitHub.

¿Puedo usar Ollama (local) en lugar de ChatGPT?#

, pero menos precisión para tareas complejas:

python
1import requests
2 
3def consulta_ollama(prompt: str):
4 response = requests.post(
5 "http://localhost:11434/api/generate",
6 json={"model": "mistral", "prompt": prompt, "stream": False}
7 )
8 return response.json()["response"]

¿Qué pasa con archivos muy grandes (millones de filas)?#

Usa pandas.read_excel(chunksize=10000) para procesar en lotes:

python
1for chunk in pd.read_excel('huge_file.xlsx', chunksize=10000):
2 # Procesa chunk
3 procesar(chunk)

¿Cómo garantizo que las fórmulas sigan siendo correctas?#

Documenta en comentarios:

python
1# Fórmula: Suma de ventas si fecha > 2026-01-01
2self.ws[f'E{row}'] = f'=SUMIF(A:A,">="&DATE(2026,1,1),E:E)'

Excel con IA no es el futuro, es el presente. Reduce horas de trabajo manual, aumenta precisión, y te permite enfocarte en análisis de verdad. ¡Comienza hoy!

¿Te ha resultado útil este artículo?

Cada semana publico análisis prácticos sobre IA, modelos y herramientas. Si quieres seguir leyendo, en el blog tienes más de 400 artículos como este.

Ver más artículosjavi@javadex.es
Javier Santos - Especialista en IA & Machine Learning

Javier Santos

Consultor de IA para empresas. Comparto contenido sobre inteligencia artificial, automatización y desarrollo cada semana.