Google+ Seguidores

martes, 29 de abril de 2014

Crear archivos excel (xls) con python y xlwt

    1

Python Excel
Python y Excel
Hay varias maneras de crear hojas de cálculo de Microsoft Excel en Python. Una de las formas puede ser utilizar PyWin32′s con el método win32com.client (que veremos más adelante en otra entrada), o utilizar el paquete xlwt.
Aprenderemos a crear una hoja de cálculos excel y la forma de crear celdas con estilo en python.

Conseguir xlwt
La primer tarea será conseguir el paquete xlwt para empezar a trabajar. Se  puede conseguir desde PyPI. En caso de tener pip instalado podemos instalarlo de esa manera también. Una ves instalado el módulo ya podemos empezar a trabajar.

Puedes ver: Como instalar pip en Linux y Windows

Instalación del paquete xlwt

Lo que hice para instalarlo en windows fue copiar la carpeta xlwt-0.7.5 en la carpeta C:\Python27. Luego entre por consola a la direccíon C:\Python27\xlwt-0.7.5 y ejecute el siguiente código:

C:\Python27\xlwt-0.7.5> python setup.py install

Usando xlwt

Archivo Excel en python
Archivo Excel en python

El módulo xlwt es bastante sencillo de usar, aunque la documentación es bastante escasa. En el repositorio de Github hay un montón de ejemplos para revisar. Ahora vamos a crear una simple hoja de calculo:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import xlwt

#----------------------------------------------------------------------
def main():

----libro = xlwt.Workbook()
----libro1 = libro.add_sheet("Prueba")

----cols = ["A", "B", "C", "D", "E"]
----txt = "Fila %s, Columna %s"

----for num in range(5):
--------row = libro1.row(num)
--------for index, col in enumerate(cols):
------------value = txt % (num+1, col)
------------row.write(index, value)

----libro.save("prueba.xls")

#----------------------------------------------------------------------
if __name__ == "__main__":
    main()

En el ejemplo anterior, lo primero que hacemos es exportar el módulo xlwt y creamos una función llamada main. En la función main, creamos una instancia de xlwt.Workbook y añadimos una hoja de trabajo con el método add_sheet (la etiqueta de nuestra hoja se llamara prueba). Luego creamos un bucle anidado para crear 5 filas y 5 columnas con un valor de contenido. Se escribe la información de la fila/columna en cada celda. Y por último guardamos el archivo con el nombre prueba.xls .

Creación de una celda con estilo

Hoja Excel con estilo en Python
Hoja Excel con estilo en Python

Ahora vamos a modificar el código de tal manera que podamos añadir hojas de trabajo mediante el uso de una función. También crearemos una función que pueda crear una hoja de calculo y en ella: celdas con estilo:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import xlwt

#----------------------------------------------------------------------
def agregar_hoja(libro, nombre):
----"""
----Agregar hoja con una linea de datos
----"""
----valor = "La hoja se llama: %s" % nombre
----hoja = libro.add_sheet(nombre)
----hoja.write(0,0, valor)

#----------------------------------------------------------------------
def agregar_estilo_hoja(libro, nombre):
----"""
----Agregar hoja con estilo
----"""
----valor = "Este es el estilo de hoja!"
----hoja = libro.add_sheet(nombre)
----style = 'pattern: pattern solid, fore_colour blue;'
----hoja.row(0).write(0, valor, xlwt.Style.easyxf(style))

#----------------------------------------------------------------------
def main():
----""""""
----libro = xlwt.Workbook()
----hoja1 = libro.add_sheet("Hoja1")

----cols = ["A", "B", "C", "D", "E"]
----txt = "Fila %s, Columna %s"

----for num in range(5):
--------Fila = hoja1.row(num)
--------for index, col in enumerate(cols):
------------valor = txt % (num+1, col)
------------Fila.write(index, valor)

----agregar_hoja(libro, "Hoja2")
----agregar_estilo_hoja(libro, "EstiloHoja")

----libro.save("Prueba2.xls")

#----------------------------------------------------------------------
if __name__ == "__main__":
    main()

Aquí creamos un método add_sheet que acepta una instancia de libro y el nombre de la hoja. Se añade una hoja de trabajo con una celda que nos dice el nombre de la hoja de trabajo. La función agregar_estilo_hoja funciona de la misma manera, lo único es que crea una celda con un estilo y mensaje.

Creación de una fila con estilo más compleja

Fila con estilo más compleja
Fila con estilo más compleja
En este ejemplo vamos a crear el mismo ejemplo original para crear el mismo 5 x 5. También vamos a crear una celda de fondo rojo, borde y una fecha específica:

#!/usr/bin/env python
# -*- coding: utf-8 -*-


from datetime import date
import xlwt

#----------------------------------------------------------------------
def main():

    libro = xlwt.Workbook()
    hoja1 = libro.add_sheet("Hoja1")

    cols = ["A", "B", "C", "D", "E"]
    txt = "Filas %s, Columnas %s"

    for num in range(5):
        fila = hoja1.row(num)
        for index, col in enumerate(cols):
            valor = txt % (num+1, col)
            fila.write(index, valor)

    valor = date(1984,1,17)
    fmt = xlwt.Style.easyxf("""
    font: name Arial;
    borders: left thick, right thick, top thick, bottom thick;
    pattern: pattern solid, fore_colour red;
    """, num_format_str='YYYY-MM-DD')
    hoja1.write(6,1,valor, fmt)

    libro.save("prueba3.xls")

#----------------------------------------------------------------------
if __name__ == "__main__":
    main()

Aquí se utiliza una cadena grande para especificar a xlwt que queremos aplicar un estilo que utiliza la fuente Arial, tiene fronteras en los cuatro lados de la celda y el fore_colour es rojo.

Hay un montón de ejemplos en este PDF para seguir practicando.

Ahora sabemos como crear simples hojas de cálculo de microsoft excel con el paquete xlwt. Actualmente el modulo xlwt no admite formatos xslx por lo tanto tendremos que usar PyWin32.

1 comentario:
Write comentarios
  1. Xlsxwriter es más potente: https://xlsxwriter.readthedocs.org/en/latest/

    ResponderEliminar

Tu comentario es importante y nos motiva a seguir escribiendo...

Entradas más recientes

© 2014 Mi diario Python. Designed by Bloggertheme9 | Distributed By Gooyaabi Templates
Powered by Blogger.