¿Cómo generar archivos excel en Django con openpyxl?

Para generar archivos en excel con openpyxl, basta con realizar una serie de pequeños pasos para configurar desde nuestra aplicación de Django. Inicialmente, debemos agregar el paquete:

pip install openpyxl

Luego de instalar el paquete apropiadamente, es necesario importar los paquetes necesarios dentro del view a utilizar:

from openpyxl import Workbook
from openpyxl.styles import Alignment, Border, Font, PatternFill, Side

En este caso se debe importar el Workbook que será el libro de trabajo y adicionalmente se agregan los estilos para personalizar el reporte de Excel antes de ser generado. Luego de esto puedes definir el método por el cual generaras el reporte, en este caso será realizado a través de un GET:

def get(self, request, *args, **kwargs):
        objeto_a_trabajar = Objeto.objects.all()
        wb = Workbook()
        ws = wb.active

En el código anterior, se trae de base de datos la tabla Objeto y se define a wb como el workbook para generar el archivo Excel. Después de esto se define ws como la hoja de calculo activa y en la cual se guardaran los datos. Posterior a esto podemos agregar los datos de la tabla Objeto en el archivo Excel que estamos generando:

for q in objeto_a_trabajar:
     column = str(contador) 
     ws['A' + column] = q.residing_num
     ws['B'+ column] = q.get_status_display()
     ws['C'+ column] = q.get_solicitante_type_display()
     contador += 1


nombre_archivo = "ListadoObjeto.xlsx"
response = HttpResponse(content_type="application/ms-excel")
contenido = "attachment; filename = {0}".format(nombre_archivo)
response["Content-Disposition"] = contenido
wb.save(response)
return response

Finalmente, agregamos el nombre del archivo, el tipo de response y devolvemos el objeto. Se puede agregar adicionalmente opciones para que usuarios logeados puedan descargar el archivo o decoración adicional para la personalización del archivo Excel.