HOWTO · Python

Escribir en una hoja de cálculo de Excel con Python

Aprende a escribir datos tabulares y celdas con pandas y openpyxl en un libro .xlsx y a verificar el archivo exportado.

En esta página

Python puede crear libros de Excel desde un DataFrame de pandas o asignar celdas con openpyxl. Usa pandas para tablas, openpyxl para controlar el libro y XlsxWriter para formatos en libros nuevos.

Escribir un DataFrame en un archivo .xlsx con pandas

El método DataFrame.to_excel() de pandas crea un archivo .xlsx, escribe filas y columnas y permite elegir la hoja.

El ejemplo escribe una tabla y la lee de nuevo para verificarla. Instala pandas y openpyxl antes de ejecutarlo.

import pandas as pd

sales = pd.DataFrame({"Product": ["Notebook", "Pen"], "Units": [3, 8]})
sales.to_excel("sales.xlsx", sheet_name="Sales", index=False)

saved = pd.read_excel("sales.xlsx", sheet_name="Sales")
print(saved.to_dict(orient="records"))

La salida contiene Notebook y Pen. Usa index=False si el índice no es una columna; las listas separadas deben tener la misma longitud.

Escribir varias hojas con ExcelWriter

pd.ExcelWriter permite escribir varios DataFrame en un libro. Usa un sheet_name distinto para cada tabla y deja que el gestor de contexto cierre el writer.

import pandas as pd

sales = pd.DataFrame({"Product": ["Notebook", "Pen"], "Units": [3, 8]})
returns = pd.DataFrame({"Product": ["Pen"], "Units": [1]})

with pd.ExcelWriter("report.xlsx", engine="openpyxl") as writer:
    sales.to_excel(writer, sheet_name="Sales", index=False)
    returns.to_excel(writer, sheet_name="Returns", index=False)

print(pd.ExcelFile("report.xlsx").sheet_names)

La salida contiene Sales y Returns. El gestor de contexto evita dejar un writer abierto.

Escribir celdas con openpyxl

openpyxl es útil cuando la entrada no es un DataFrame o necesitas editar directamente hojas y celdas. Puedes asignar valores, añadir filas y guardar el archivo.

from openpyxl import Workbook, load_workbook

workbook = Workbook()
sheet = workbook.active
sheet.title = "Summary"
sheet["A1"] = "Product"
sheet["B1"] = "Units"
sheet.append(["Notebook", 3])
workbook.save("summary.xlsx")

saved = load_workbook("summary.xlsx", data_only=True)
print(saved["Summary"]["A2"].value, saved["Summary"]["B2"].value)

La salida es Notebook 3. También puedes usar cell(row, column) con posiciones numéricas.

Elegir pandas, openpyxl o XlsxWriter

Elige pandas para tablas y exportaciones breves. Usa openpyxl para libros existentes, celdas, fórmulas y hojas; ambos producen el formato .xlsx moderno.

XlsxWriter sirve para libros nuevos con formato. xlwt solo debe usarse cuando un sistema exige archivos .xls antiguos.

Mantén coherentes la extensión, la biblioteca y el motor; un writer cerrado no se puede editar después.

Verificar el libro y tratar fallos comunes

Después de escribir, comprueba la ruta y que el libro pueda abrirse. Un archivo ausente suele indicar que la exportación no se ejecutó, falló antes de guardar o usó otro directorio.

from pathlib import Path

output = Path("missing.xlsx")
if not output.exists():
    raise FileNotFoundError(f"Expected export was not created: {output}")

print(output.suffix, output.stat().st_size > 0)

La comprobación de límite lanza FileNotFoundError hasta que exista missing.xlsx. En procesos automáticos verifica también hojas y celdas.