CodeForge

Python de Cero a Experto / Ruta scripting

Excel con openpyxl

Teoría20 min20 XP

Excel domina las oficinas del mundo, y automatizar hojas de cálculo es una de las habilidades de scripting más valiosas en lo laboral: generar reportes, consolidar datos de muchos archivos, rellenar plantillas —sin horas de trabajo manual—. La librería openpyxl lee y escribe archivos .xlsx desde Python. Hoy aprendes a automatizar Excel: leer datos de una hoja, escribir resultados, y darles formato.

El asistente que llena planillas

Leer y escribir Excel

Como openpyxl maneja archivos binarios .xlsx con una librería externa, esta lección va con bloques —pruébalo tras pip install openpyxl—:

excel.py
from openpyxl import Workbook, load_workbook

# --- CREAR y ESCRIBIR un archivo Excel ---
wb = Workbook()               # un libro nuevo
hoja = wb.active              # la hoja activa
hoja.title = "Gastos"         # nombrarla

# escribir encabezados y datos por celdas
hoja["A1"] = "Nombre"
hoja["B1"] = "Valor"

gastos = [("Mercado", 87500), ("Taxi", 12000), ("Café", 4200)]
for i, (nombre, valor) in enumerate(gastos, start=2):   # desde la fila 2
  hoja[f"A{i}"] = nombre
  hoja[f"B{i}"] = valor

# o agregar filas con append
hoja.append(["Cine", 18000])

# una fórmula de Excel (se calcula al abrir el archivo)
hoja["B6"] = "=SUM(B2:B5)"

wb.save("reporte.xlsx")       # guardar el archivo

# --- LEER un archivo Excel existente ---
wb2 = load_workbook("reporte.xlsx")
hoja2 = wb2["Gastos"]

print(hoja2["A1"].value)      # 'Nombre'
# recorrer las filas con datos
for fila in hoja2.iter_rows(min_row=2, values_only=True):
  nombre, valor = fila[0], fila[1]
  if nombre:
      print(f"{nombre}: {valor}")

Para ESCRIBIR: Workbook() crea un libro, wb.active da la hoja, y escribes por celda (hoja["A1"] = ...) o agregas filas (hoja.append([...])); wb.save("archivo.xlsx") lo guarda. Puedes incluso poner FÓRMULAS de Excel ("=SUM(B2:B5)") que Excel calcula al abrir. Para LEER: load_workbook abre un archivo, hoja.iter_rows(values_only=True) recorre las filas, y .value da el contenido de una celda. Las celdas se direccionan como en Excel ("A1", "B2") o por fila/columna. Con esto automatizas la lectura y generación de reportes en el formato que las oficinas usan a diario.

¿Qué permite openpyxl y cuándo usarías pandas en su lugar?

Mini-reto

Diseña (en tu Python instalado) un generador de reportes Excel: 1) crea un Workbook, nombra la hoja "Reporte", y escribe encabezados Nombre, Valor, Categoría; 2) recorre una lista de gastos (diccionarios) y agrégalos con append; 3) al final, agrega una fila con una fórmula =SUM(...) del total; 4) guárdalo con wb.save. Bonus: vuelve a abrirlo con load_workbook y verifica que los datos están, recorriendo con iter_rows.

Qué sigue

Ya automatizas Excel. La última lección del módulo eleva tus scripts a herramientas profesionales con TYPER —crear interfaces de línea de comandos elegantes y modernas (mejor que argparse)—, para que tus automatizaciones sean fáciles de usar y compartir. El acabado profesional de un script.