Cómo crear y escribir un archivo Excel en Django
Índice de contenido
- Introducción: generar archivos Excel desde Django con Python
- ⚙️ Instalación y configuración del entorno
- Crear y escribir un archivo Excel en Django
- Descargar el archivo Excel desde el navegador
- Ejemplo completo: exportar un reporte Excel en Django
- Alternativas a XlsxWriter
- ✅ Conclusión
- ❓ Preguntas frecuentes
Exportar datos a Excel es una necesidad común cuando trabajamos con aplicaciones Django que manejan información dinámica: reportes, listados de usuarios o resultados de consultas; generar un Excel de forma automática desde una vista en Django es muy fácil y el paquete de XlsxWriter, aunque no es específico de Django, funciona perfectamente dentro de cualquier proyecto.
Introducción: generar archivos Excel desde Django con Python
Django no incluye soporte nativo para Excel, pero gracias a Python tenemos librerías potentes como XlsxWriter, OpenPyXL o Pandas.
La ventaja de XlsxWriter es su sencillez: permite crear y escribir archivos Excel (.xlsx) en pocos pasos.
En esta guía te mostraré cómo integrarla paso a paso para crear, escribir y descargar archivos Excel desde tu aplicación.
⚙️ Instalación y configuración del entorno
Para escribir en un excel, vamos a instalar el siguiente paquete:
$ pip install XlsxWriterEs importante notar que, este paquete es de Python y no específico a Django.
Crea una carpeta dentro de tu proyecto donde se guardarán los archivos generados, por ejemplo:
myproject/
├─ excel/
│ ├─ views.py
├─ documents/
│ └─ (aquí se guardarán los .xlsx)
Crear y escribir un archivo Excel en Django
Para crear el archivo, basta con generar una vista (views.py) que construya el libro y escriba los datos.
Usaremos la siguiente función para generar un documento excel:
excel\views.py
from django.shortcuts import render
import xlsxwriter
def excel_writer(request):
filename="documents/LibroExcel.xlsx"
data=[
["Nombre","Apellido","Edad"],
["Jon","Snow",33],
["Daenerys","Targaryen",25],
["Tyrion","Lannister",40],
["Jaime","Lannister",35],
["Cersei","Lannister",36]
]
workbook = xlsxwriter.Workbook(filename)
worksheet = workbook.add_worksheet("Hoja 1")
for row in range(len(data)):
for col in range(len(data[row])):
worksheet.write(row, col, data[row][col])
workbook.close()
return render(request, 'csv.html')Explicación del código anterior
Para generar un excel, es necesario indicar la ubicación (filename) y los datos (data); en esta oportunidad, los datos están representados en una matriz, ya que, la función de write() que permite escribir en el excel, recibe la posición de la fila, columna y datos; y es más fácil representarlos de esta manera. Escribimos los datos con write(fila, columna, valor). y cerramos el libro para guardar los cambios con workbook.close().
Para trabajar con excel lo primero que tenemos que hacer es generar el archivo o workbook:
workbook = xlsxwriter.Workbook(filename)Y una hoja de trabajo:
worksheet = workbook.add_worksheet("Hoja 1")Esta función, recibe de manera opcional el nombre que quieras colocarle a la hoja, en este caso “Hoja 1”.
Por lo demás, lo único que hacemos es recorrer la matriz, escribir en el excel y cerrar el mismo.
Descargar el archivo Excel desde el navegador
Hasta ahora, el archivo se genera en el servidor.
Si lo que quieres es que el usuario lo descargue directamente, puedes modificar la vista así:
from django.http import HttpResponse
import io
import xlsxwriter
def download_excel(request):
output = io.BytesIO()
workbook = xlsxwriter.Workbook(output)
worksheet = workbook.add_worksheet("Usuarios")
data = [
["Nombre", "Apellido", "Edad"],
["Arya", "Stark", 19],
["Bran", "Stark", 18],
]
for row in range(len(data)):
for col in range(len(data[row])):
worksheet.write(row, col, data[row][col])
workbook.close()
output.seek(0)
response = HttpResponse(
output.read(),
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
)
response['Content-Disposition'] = 'attachment; filename=Usuarios.xlsx'
return responseConsejo práctico: si el archivo no se descarga o aparece vacío, revisa el output.seek(0) antes de leer el buffer; en una de mis pruebas olvidé esa línea y el archivo resultaba corrupto.
Ejemplo completo: exportar un reporte Excel en Django
Combina ambos enfoques (guardar + descargar) según tus necesidades.
En mi caso, terminé usando la versión con descarga automática porque mejoraba la experiencia del usuario, especialmente para reportes administrativos.
Puedes usar este patrón para exportar querysets directamente:
usuarios = User.objects.values_list('first_name', 'last_name', 'age')
for i, row in enumerate(usuarios, start=1):
for j, value in enumerate(row):
worksheet.write(i, j, value)Así generarás reportes actualizados con los datos reales de tu base.
Alternativas a XlsxWriter
Aunque XlsxWriter es ideal para escribir desde cero, existen otras opciones:
Librería Ventaja Caso ideal
openpyxl Permite leer y modificar archivos Excel existentes Cuando ya tienes plantillas .xlsx
pandas Exporta directamente DataFrames a Excel Reportes analíticos o grandes volúmenes de datos
django-excel Integra Excel como plugin Django Casos donde se requiere import/export desde panel de administración
Yo suelo mantener XlsxWriter para scripts ligeros y openpyxl cuando necesito modificar formatos o fórmulas.
✅ Conclusión
Generar y escribir un archivo Excel en Django es más sencillo de lo que parece.
Con solo unas líneas de código puedes crear reportes personalizados, listados de usuarios o cualquier información en formato .xlsx.
En mi experiencia, integrar XlsxWriter dentro de las vistas fue una solución rápida y fiable, ideal para proyectos pequeños y medianos.
❓ Preguntas frecuentes
¿Qué librería usar para crear Excel en Django?
XlsxWriter es la más simple para escribir archivos nuevos; si necesitas editar existentes, usa openpyxl.
¿Cómo generar un Excel desde un queryset?
Recorre el queryset y escribe los valores con worksheet.write() o convierte el queryset a lista de listas.
¿Cómo descargar automáticamente el archivo Excel?
Devuelve una respuesta HttpResponse con Content-Disposition: attachment.
¿Puedo usar varias hojas en un mismo archivo Excel?
Sí, puedes crear tantas como necesites con workbook.add_worksheet("nombre").
Acepto recibir anuncios de interes sobre este Blog.
Vamos a aprender a escribir y leer un archivo Excel con Django usando el paquete de XlsxWriter.