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.