Crear, Leer y Modificar una Hoja Excel con Python

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

27 Respuestas to “Crear, Leer y Modificar una Hoja Excel con Python”


  1. 1 khourt septiembre 26, 2011 a las 5:05 am

    Bueno, soy usuario estandar de excel, pero me llama mucho la atencion el saber, que funcion me pueden traer estas herramientas.

  2. 2 cambiadeso septiembre 26, 2011 a las 3:39 pm

    Me ha caído del cielo, llevaba mucho tiempo buscando algo así

  3. 3 kalvo septiembre 26, 2011 a las 6:40 pm

    Y para una hoja de calculo de libreoffice como se puede hacer??

  4. 8 Lorenzo Carbonell (@atareao) septiembre 26, 2011 a las 8:33 pm

    Ufff, me has abierto todo un mundo

    Gracias!

  5. 10 rodilinux noviembre 22, 2011 a las 10:14 pm

    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?

  6. 12 Mireles julio 31, 2012 a las 1:50 am

    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).

  7. 13 Alvaro Garcia May 6, 2013 a las 10:14 am

    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,

  8. 14 miguel junio 28, 2013 a las 8:30 pm

    ayuda, no e puede instalar cuando le doy al setup me sale: no commands supplied

  9. 15 Carlos julio 3, 2013 a las 4:29 pm

    a mi me sale un error, (el modulo xlrd no existe), como podria solucionarlo?

  10. 16 Carlos julio 3, 2013 a las 11:37 pm

    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)

  11. 17 Luis Ricardo de León julio 19, 2013 a las 5:52 am

    Una pregunta, este código para que Excel es??? para el 2007, 2010 o 2003???

  12. 18 Pablo silva julio 29, 2014 a las 1:41 pm

    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.

  13. 19 alejandro agosto 14, 2014 a las 10:36 pm

    excelente, muchas gracias muy buen tutorial

  14. 20 Alberto Uribe octubre 11, 2015 a las 11:22 pm

    Muy sencillo, muy práctico y muy útil. Y lo bueno, si es sencillo, es doblemente bueno.

  15. 21 efueyo septiembre 9, 2017 a las 7:39 pm

    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

  16. 22 Facundo abril 1, 2018 a las 10:56 pm

    Buenos días, muy interesante. Existe algún lugar donde sacar todas las propiedades de esta biblioteca y como utilizarla?


  1. 1 Lo mejor de mi RSS del 26 de septiembre al 2 de octubre | Linux Hispano Trackback en octubre 2, 2011 a las 6:06 am
  2. 2 Excel | TagHall Trackback en febrero 18, 2012 a las 8:59 pm
  3. 3 Internet data Plans Trackback en julio 31, 2014 a las 11:17 am
  4. 4 http://friendinwar.com Trackback en enero 30, 2017 a las 9:22 am
  5. 5 best bitcoin exchange websites Trackback en octubre 11, 2018 a las 6:47 am

Deja un comentario







¿Es compatible tu equipo con Ubuntu?


( Muchos fondos de pantalla, aqui )

DESCARGATE SCIFI LIFE

365 Dias de Soledad
Me debes los sueños, las promesas y las noches rotas. Me debes la paz, la sonrisa y la esperanza robadas. Me debes la sangre, las lágrimas y el sudor vertido. Me debes las noches vacías, los abrazos anhelados. Me debes un beso de ajenjo de tu amarga boca.

The Ubuntu Counter Project - user number # 11961
Geo Visitors Map

Archivos

septiembre 2011
L M X J V S D
 1234
567891011
12131415161718
19202122232425
2627282930  

Blog Stats

  • 31.401.199 hits