pyExcelerator es un módulo Python creado por Roman V. Kiseliov para escribir y leer datos en formato excel. Se necesita una versión superior a la 2.4 de python. La ventaja (opinión) de usar este módulo frente a otros como CSV, es que permite formatos unicode, se lee/escribe bien tanto en OpenOffice como en Microsoft Office y tiene una API muy sencilla.
Instalar módulo en Ubuntu
| $ sudo apt-get install python-excelerator |
Lo básico
Una vez instalado, vamos a lo básico. Comenzaremos por escribir algo. Decir que, si nos descargamos el módulo en http://sourceforge.net/projects/pyexcelerator/ , en él hay muchísimos ejemplos que nos pueden servir de guía para lo que queramos hacer.
____________________________________________
from pyExcelerator import *
# Instance the objects
workbook = Workbook()
worksheet = workbook.add_sheet("my first sheet")
# Write a row
worksheet.write(1, 1, "Example")
# Save the content
workbook.save('file.xls')
______________________________________
Lo que se hace es, instanciar un libro de trabajo y una hoja. Podemos crear tantas hojas de trabajo como queramos. A continuación escribimos en la posición (1,1) la palabra Example y guardamos con el nombre file.xls.
Dar formato
También podemos escribir con distintos tipos de letra, colores, cursiva, etc. Esto lo podemos hacer mediante la clase Font del módulo. Con el font, le indicamos todas las propiedades necesarias.
______________________________________
from pyExcelerator import *
# Instance the objects
workbook = Workbook()
worksheet = workbook.add_sheet("my first sheet")
# Style
font = Font()
font.name = "Arial"
font.colour_index = 1
font.bold = True
style = XFStyle()
style.font = font
# Write
worksheet.write(1, 1, "Example", style)
# Save the content
workbook.save('file.xls')
______________________________________
Esto también se puede hacer sobre el objeto style, puesto que internamente usa Font.
Leer a formato CSV
Para leer y poder procesar los datos, usamos la función parse_xls, a la que le pasamos un fichero y la codificación, que puede ser utf-8. Esta función, retorna todas las hojas worksheet y sus valores, por lo que tenemos que recorrerlas y por ejemplo, insertarlas en una matriz. A continuación se lista un ejemplo completo de como hacer esto. El siguiente código es una adaptación del código del autor del directorio examples.
Ejemplo completo
______________________________________# -*- coding: utf-8 -*-
# This example was adapted from Roman V. Kiseliov
# in examples section project
from pyExcelerator import *
class Excel(object):
def __init__(self, name_space='0'):
self.column = 0
self.row = 0
self.workbook = Workbook()
self.worksheet = self.workbook.add_sheet(name_space)
def write_row(self, content):
self.column = 0
for i in content:
self.worksheet.write(self.row, self.column, i)
self.column += 1
self.row += 1
def write_with_format(self, content, bold=False, name='Arial', colour_index=4):
font = Font()
font.name = name
font.colour_index = colour_index
font.bold = bold
style = XFStyle()
style.font = font
self.column = 0
for i in content:
self.worksheet.write(self.row, self.column, i, style)
self.column += 1
self.row += 1
def save(self, filename='file.xls'):
self.workbook.save(filename)
@classmethod
def read(self, filename, coding='utf-8', verbose=False):
for sheet_name, values in parse_xls(filename, coding):
matrix = [[]]
if verbose:
print 'Sheet = "%s"' % sheet_name.encode(coding, 'backslashreplace')
print '----------------'
for row_idx, col_idx in sorted(values.keys()):
v = values[(row_idx, col_idx)]
if isinstance(v, unicode):
v = v.encode(coding, 'backslashreplace')
else:
v = `v`
v = '%s' % v.strip()
last_row, last_col = len(matrix), len(matrix[-1])
while last_row <= row_idx:
matrix.extend([[]])
last_row = len(matrix)
while last_col < col_idx:
matrix[-1].extend([''])
last_col = len(matrix[-1])
matrix[-1].extend([v]
if verbose:
for row in matrix:
csv_row = ', '.join(row)
print csv_row
return matrix
if __name__ == '__main__':
print 'Generando xls ........... ',
header = ['Nombre', 'Apellidos', 'DNI']
excel = Excel()
excel.write_with_format(header, bold=True)
datos = [u'Tutú', u'Tiñi', '1239812H']
excel.write_row(datos)
datos = [u'Kaká', u'Asd', '8712382H']
excel.write_row(datos)
excel.save()
print 'ok'
print 'Leyendo datos ........... '
Excel.read('file.xls', verbose=True)
print '................... ok '
______________________________________
Este módulo contiene muchísimas más cosas. Escritura de fórmulas, imágenes, estilos, conversión a html, etc. En la sección de ejemplos del proyecto se puede ver en detalle todo esto.
Referencias

0 comentarios:
Publicar un comentario en la entrada
Por favor, no escriba al estilo SMS y use signos de puntuación en caso necesario