Trabajar con hojas excel desde python es bastante sencillo si hacemos uso de unas cuantos modulos que nos
facilitan esta labor, estos son:
– xlwt: utilizada para escribir excel
– xlrd: utilizada para modificar excel
– xlutils: require de las anteriores y son una serie de utilidades que nos permiten entre otras cosas,
copiar o modificar una excel previa.
Puedes descargarlas desde el siguiente enlace: http://www.python-excel.org/
La instalacion es tan simple como descomprimir el .tar.gz del modulo y ejecutar:
$ sudo python setup.py install
desde el directorio donde se descomprimen. Tambien puedes usar otras utilidades como easy_install o pip
para instalar mas facilmente modulos en Python:
Ejemplo:
$ sudo apt-get install python-setuptools
$ sudo easy_install xlwt
En Ubuntu tambien podemos instalar esos modulos directamente desde repositorio:
$ sudo apt-get install python-xlwt ptthon-xlrd
Nota: Antes de seguir con los ejemplos deberas tener instalados los 3 modulos: xlwt, xlrd y xlutils.
Primer ejemplo: Crear una hoja Excel
# Ejemplo de creacion de hoja Excel import xlwt from datetime import datetime style0 = xlwt.easyxf('font: name Times New Roman, colour red, bold on') style1 = xlwt.easyxf('',num_format_str='DD-MMM-YY') wb = xlwt.Workbook() ws = wb.add_sheet('A Test Sheet',cell_overwrite_ok=True) ws.write(0, 0, 'Test', style0) ws.write(1, 0, datetime.now(), style1) ws.write(2, 0, 4) ws.write(2, 1, 1) ws.write(2, 2, xlwt.Formula("A3+B3")) wb.save('example.xls')
En el codigo, importamos el modulo xlwt (import xwlt) que nos permite acceder a la libreria correspondiente
para escribir la hoja excel.
y basicamente definimos 2 estilos para la hoja. Uno con fuente de texto Times New Roman, negrita y color rojo
y otro para formatear una fecha.
Despues creamos el fichero excel:
wb = xlwt.Workbook()
Le añadimos una pestaña llamada «A teest sheet»:
ws = wb.add_sheet('A Test Sheet',cell_overwrite_ok=True)
nota: la opcion «cell_overwrite_ok=True» es para que permita sobreescribir celdas.
Y ya estamos listos para ir escribiendo valores en la excel. Por ejemplo:
ws.write(1, 0, datetime.now(), style1)
escribe en la posicion columna 0, fila 1 la fecha actual y aplicandole el estilo style1 definido anteriormente.
Tambien podemos escribir formulas:
ws.write(2, 2, xlwt.Formula("A3+B3"))
Y por ultimo cuando nos cansemos de añadir valores, guardamos finalmente la excel en la ruta deseada:
wb.save('example.xls')
Segundo Ejemplo: Leer una hoja Excel
Esta vez partimos del caso inverso. Creada ya una excel, queremos leer sus valores.
# Ejemplo de lectura de hoja Excel import xlrd book = xlrd.open_workbook("example.xls") print "The number of worksheets is", book.nsheets print "Worksheet name(s):", book.sheet_names() sh = book.sheet_by_index(0) print sh.name, sh.nrows, sh.ncols print "Cell (2,0) is: ", sh.cell_value(rowx=2, colx=0) for rx in range(sh.nrows): print sh.row(rx)
Primero importamos el modulo «xlrd» con:
import xlrd
Eso nos permitira acceder a las funciones que nos permiten leer desde una excel.
Despues abrimos la excel:
book = xlrd.open_workbook("example.xls")
Con eso ya por ejemplo podemos imprimir el numero de pestañas (hojas de trabajo) que tiene o sus nombres:
print "The number of worksheets is", book.nsheets
print "Worksheet name(s):", book.sheet_names()
Si queremos leer los valores de alguna pestaña, primero la referenciamos, por ejemplo para
acceder a la primera:
sh = book.sheet_by_index(0)
Imprimimos su nombre y el numero de filas y columnas que la componen:
print sh.name, sh.nrows, sh.ncols
Si por ejemplo queremos acceder a la fila=2, columna=0 para recuperar su valor:
print "Cell (2,0) is: ", sh.cell_value(rowx=2, colx=0)
Y por ultimo, podemos recorrer la hoja entera para imprimir todos los valores de sus celdas:
for rx in range(sh.nrows):
print sh.row(rx)
Tercer Ejemplo: Modificar una hoja Excel
El problema de xlrd y xlwt es que no podemos por ejemplo abrir una excel ya creada, editarla y volver a guardarla,
si no que debemos abrir una copia de la excel original, modificarla y entonces ya guardarla con un nuevo nombre,
para todo esto, nos ayuda el ultimo modulo (xlutils).
Ejemplo:
# Ejemplo de modificacion de hoja Excel from xlrd import open_workbook from xlutils.copy import copy rb = open_workbook('example.xls',formatting_info=True) wb = copy(rb) ws = wb.get_sheet(0) ws.write(0,0,"I'm only changing cell A1") wb.save('example2.xls')
En el ejemplo: hemos abierto una copia de la excel llamada «example.xls»
rb = open_workbook('example.xls',formatting_info=True)
wb = copy(rb)
Accedemos a la primera pestaña de la excel:
ws = wb.get_sheet(0)
Modificamos el valor de una celda:
ws.write(0,0,"I'm only changing cell A1")
Y ya la guardamos con otro nombre.
wb.save('example2.xls')
El efecto es el mismo, es como si hubieramos editado sobre la excel original.
Evidentemente este es un pequeño articulo introductorio y existen muchas mas funciones que nos pueden ser
de mucha utilidad, consultando la documentacion de las librerias podemos obtener mas informacion.
Aun asi dejo un par de enlaces adicionales, para completar la informacion proporcionada:
Enlace | Write Excel files with Python | Excel SpreadSheets and Python | Using python to write to an Excel | xlwt CheatSheet | Python and Excel
Bueno, soy usuario estandar de excel, pero me llama mucho la atencion el saber, que funcion me pueden traer estas herramientas.
Me ha caído del cielo, llevaba mucho tiempo buscando algo así
Y para una hoja de calculo de libreoffice como se puede hacer??
Cambia por completo. Aqui puedes encontrar algo mas de informacion:
http://stefaanlippens.net/opendocumentpython
http://www.linuxjournal.com/article/9347
Intenta tambien con:
http://ooolib.sourceforge.net/
Oks muchas gracias le hechare un vistazo en cuanto tenga un huequito!!
Por cierto enorabuena por el blog! lo sigo hace bastante tiempo y siempre encuentro cosas curiosas y de utilidad
«…xlwt is a library for generating spreadsheet files that are compatible with (…) OpenOffice.org Calc, and Gnumeric…»
http://pypi.python.org/pypi/xlwt
Ufff, me has abierto todo un mundo
Gracias!
jeje, es que python es todo un mundo ^^
Sabes estuve probando y la verdad es fantástico. Solo un detalle, al intentar modificar un xls que contenía imagenes insertadas en el, al guardar omitio las imagenes. Como puedo hacer para que las conserve?
Alguna Idea?
Saludos.
Muy interesante este sitio. Lo unico que falta es como leer una columna o una fila en particular (con intenciones de manipularlas y despues graficar).
Hola, muy interesante artículo. En el caso que me ocupa, con una versión de Windows XP y Office 2007 no consigo leer el valor de la celda obtenida de la fórmula. Al abrir y cerrar después el fichero excell aparece el mensaje: ¿Desea guardar los cambios? Excel actualiza las fórmulas al abrir archivos guardados con una versión anterior. Solo aceptando, xlrd puede leer el valor de la celda.
Un saludo,
ayuda, no e puede instalar cuando le doy al setup me sale: no commands supplied
a mi me sale un error, (el modulo xlrd no existe), como podria solucionarlo?
o donde se mete xlrd, porque cuando lo descargué lo descomprimí en una carpeta, meto esa carpeta en lib/site-packages, y me sigue saliendo el mismo error (el modulo xlrd no existe)
Una pregunta, este código para que Excel es??? para el 2007, 2010 o 2003???
gracias por el aporte!! solo cabe mencionar que los paquetes al igual que la mayoría, solo funciona para versiones de python 2.7 o anteriores.
excelente, muchas gracias muy buen tutorial
Muy sencillo, muy práctico y muy útil. Y lo bueno, si es sencillo, es doblemente bueno.
Muchas gracias. Buen tutorial.
Agradeceré me aclaren lo siguiente: Al leer de la Excel, si tengo en una celda la fecha 29/08/2017, obtengo el número 42977. ¿Hay alguna manera de obtener el mismo formato de fecha que el de la Excel?. Si no es posible, cómo puedo convertir el 42977 nuevamente a fecha en Python?.
Saludos cordiales
Buenos días, muy interesante. Existe algún lugar donde sacar todas las propiedades de esta biblioteca y como utilizarla?