Crear archivos excel (xls) con python y xlwt

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:Python27xlwt-0.7.5 y ejecute el siguiente código:

C:Python27xlwt-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. Anónimo dice:

    hola gracias a su explicación pude hacer esto. https://drive.google.com/open?id=0B1scOInPo1MISmRGZGxqckZ6VkU
    quisiera saber como llamar un rango de celdas y los resultados guardarlos en el excel

    gracias

  2. Unknown dice:

    como puedo colocar la codificacion UTF-8 ????

  3. Anónimo dice:

    hay alguna forma de crear un excel desde un pdf, ya sea enviandolo desde la vista o de manera interna (Backend) pero con el mismo diseño del pdf sin tener que crear una estructura para el excel????

  4. Anónimo dice:

    Hola
    Al ejecutar solo me pide ingresar datos, cual es el sieguiente paso?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir
White Monkey