Inicio > Programing > Creando archivos xls en Python y Avanzado

Creando archivos xls en Python y Avanzado

Y siguiendo con lo retos, ahora el primero es como adicionar estilos y formatos a un celda de un archivo xls desde Python por su puesto, hee que si fuera desde Calc o Excel sería pan comido o talves no! …

Los obtejtivos que me interesa poder lograr son:

  1. Asignar tipo de fuente
  2. Asignar tipo de letra
  3. Asignar tamaño de letra
  4. Asignar alineación
  5. Asignar borde
  6. Asignar formato
  7. Asignar ancho y alto

Sigo trabajando con la la clase xls_writer.py que hasta el momento me ha resultado genial y que invita incluso a extenderla para incluir nuevos métodos, sin embargo la documentación viene de la mano de xlwt.

Hay una clase llamada xlwt.easyxf que formatea una cadena del tipo ‘font: bold on; align: wrap on, vert centre, horiz center’ y regresa una instancia que puede ser usando en el método sheet.write, un ejemplo sería como el sigue:

from xlwt import *
from xls_writer import XLSWriter

ezxf = easyxf

writer = XLSWriter()

data = ["Negrilla", "Centrada", u"Centrada y con corte de línea"]
format = [ezxf('font: bold on'), ezxf('align: horiz center'), ezxf('align: wrap on, horiz center')]
writer.append(data, format)

writer.save("test.xls")

el resultado es el siguiente:
en la centrada con corte de línea he tenido que expandir la altura del renglón manualmente y en automático se ajusto el texto, pero como el espacio del ancho de la celda no daba espacio para mostrar todo el texto, éste se mostraba incompleto, así que también he modificado el ancho a mano, por lo tanto he agregado otro objetivo más 😉

También comentar que he tenido que modificar el método writer.append() para que acepte la opción del formato en xls_writer.py

Con el anterior ejemplo se cumplen los puntos 2 y 4… seguimos con un ejemplo que muestra como darle formato a un celda de tipo moneda, a otra celda de tipo fecha y la última celda es sin formato:


data = [12345.67890, datetime.today(), u"Centrada y con corte de línea"]
format = [ezxf('font: bold on', num_format_str='$#,##0.00'), ezxf(num_format_str='yyyy-mm-dd'), ezxf()]
writer.append(data, format)

y el resultado es:

con esto tenemos el punto 6…

Ahora para colocar un tipo de fuente en particular y definir su tamaño se realiza de la siguiente manera:

data = ['Bold, 15, Times New Roman', datetime.today(), u"Centrada y con corte de línea"]
format = [ezxf('font: bold on, height 300, name Times New Roman', num_format_str='$#,##0.00'), ezxf('font: italic on', num_format_str='yyyy-mm-dd'), ezxf()]
writer.append(data, format)

para obtener:

con esto se tienen ya los puntos 1, 2, 3, 4 y 6 faltan 5 y 7

Para el borde también hay una opción veamos como utilizarla

data = ['','Bordes','']
format = [ezxf(),ezxf('font: bold on, height 300, name Times New Roman; borders: left thin, right medium, top dashed, bottom double', num_format_str='$#,##0.00'), ezxf()]
writer.append(data, format)

y el resultado es

sin embargo el ancho y alto de cada fila y columna lo tengo que definir manualmente, así que vamos a eso, que Python se encargue de ello!!!

width = [0x0d00*3, 0x0d00*2, 0x0dFF]
height = 0x00FF * 2
writer.append(data, format, width, height)

con las anteriores líneas y unas modificaciones nuevamente al archivo xls_writer.py se logra obtener lo siguiente

en este caso la anchura y altura de cada renglón y columna es definida por el script en Python, genial!!

De esta forma se puede crear prácticamente cualquier archivo que se necesite en formato xls desde Python e incluso desde sistemas Linux sin la necesidad de librerías extras… así o más sencillo!

Comentarios, comentarios!

Salud!!

Anuncios
Categorías:Programing Etiquetas: , , ,
  1. santos
    25 julio, 2011 en 20:12

    hola, esta muy bueno es tuturial, pero no sabes como se hace para combinar celdas ?? gracias saludos

    • 20 octubre, 2011 en 04:11

      Hola Santos, de antemando una disculpa por tan tardia respuesta, me imagino que ya has logrado resolver tu duda, si no porfavor comentarte para publicar algo!!

      Salud+

      • Edwin
        8 noviembre, 2012 en 17:24

        si tuvieras la forma, porfa publicala. saludos

  2. 8 noviembre, 2012 en 17:44

    Edwin :

    si tuvieras la forma, porfa publicala. saludos

    Hola Edwin

    gracias por darte una vuelta x aquí y me gustaría saber que te gustaría que publique?

    Salu2+

    • Edwin
      12 noviembre, 2012 en 14:57

      Hola sobre la aprte de combinar las celdas por medio de ptyhon. saludos y gracias de antemano.

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

PiKon

3D Printing + Raspberry Pi Camera = PiKon Telescope

gvSIG blog

gvSIG project blog

Python Adventures

Welcome to the Jungle!

A %d blogueros les gusta esto: