Manuel Rosa Ramos 20 de febrero de 2015 a las 12.48
   Imprimir artículo
elWebmaster.com

Creando archivos de Excel con Django Framework. Parte 1


logoooooUna funcionalidad importante que puede tener cualquier aplicación web es la de descargar archivos con información de interés que es manipulada dentro de nuestro sitio web. En este artículo te servimos una guía para crear y descargar archivos Excel XLSX, en entorno Python con Framework Django.

 Para ello utilizaremos xlsxwriter, que es un módulo de Python para escribir archivos de formato Excel XLSX, con el que podemos incluir datos, formatos, filtros, gráficos, tablas, imágenes, además de validar datos, escribir comentarios, y otras cosas más. Para instalar el módulo, ejecutamos el siguiente comando en la consola:

pip install xlsxwriter

Una vez instalado, procederemos a crear la vista correspondiente en el archivo views.py de nuestra aplicación. En este caso lo haremos con uso de Class-based View (CBV), por lo que importaremos los siguientes paquetes:

fig1

Luego, definimos nuestra clase ExcelExport, y asignamos el nombre para el archivo de Excel

fig2

Lo siguiente a codificar es el método GET para la vista que hemos creado, donde realizaremos todas las acciones para añadir la información al archivo:

fig3

Dentro del método, primero crearemos una lista de ejemplo con los datos que vamos a utilizar

fig4

Y empezamos a trabajar, creando el libro de Excel y la hoja en la que colocaremos los datos

fig5

Definimos algunos formatos para representar la información. En este caso hemos definido un formato para el encabezado o título (section_header_format), un formato general (general_format), y un formato para celdas con números (num_format).

fig6

Podemos de igual manera, establecer el ancho de las columnas que utilizaremos en el archivo de excel. Esto se hace indicando el rango de columnas a las que definiremos el ancho y el ancho respectivo. 

fig7

Si se desea establecer un formato para el conjunto de columnas, se puede indicar el formato como último parámetro del método set_column, pero esto afectaría a todas las celdas de esas columnas.

fig8

Si queremos, añadir una imagen a la hoja de trabajo, sólo debemos especificar la celda sobre la cual queremos añadirla, haciendo referencia bien por medio del nombre de la celda (ejemplo: ‘A2’) o utilizando la hoja de Excel como un array (la celda A2 sería row=1, col=0).

fig9

Luego añadimos un título para el contenido de la hoja, y lo haremos combinando las dos columnas utilizadas por medio de merge_range. Colocamos primero dos pares de números que refieren a las celdas donde comienza y termina nuestro rango, luego el contenido y al final el formato que queremos asignar.En este caso la imagen que deseamos agregar se encuentra en el mismo directorio que el archivo de Excel.

fig10

Para copiar los datos, escribimos primero un encabezado para cada de las dos columnas (Frutas y Cantidad), con uso del método write de la hoja sheet.

fig11

Esto es equivalente a utilizar las instrucciones siguientes:

fig12

Finalmente, para colocar los datos de la lista que creamos al inicio del método get, la recorremos y copiamos cada uno de los objetos o tuplas, pero en este caso se puede hacer de una manera más simple con uso del método write_row, que permite copiar una lista de valores de manera horizontal a partir de la celda indicada (a través del nombre de la celda, o del par de valores row-col)

fig13

Solo queda cerrar el archivo de Excel que estamos utilizando y emitir la respuesta correspondiente del método get de la clase que hemos realizado.

fig14

Para completar el trabajo, añadimos el ítem correspondiente a nuestro archivo urls.py y ya podremos descargar el archivo de Excel haciendo un llamado a la url establecida para la vista que hemos codificado.

fig15

Tendremos ahora un Excel como este:

Captura de pantalla 2015-02-20 a las 12.47.55


Enviar a Del.icio.us Enviar a Meneame Enviar a Digg Enviar a Fresqui Enviar a Enchilame

Deja tu opinión

© 2007 - 2008 elWebmaster.com | Powered by Wordpress | Diseño CSS y XHTML válido. | Algunos íconos basados en FamFamFam Mini
Acceder