Inicio > Programing > Abriendo archivos xlsx con python

Abriendo archivos xlsx con python

python-xlsx-1
Ya con anterioridad escribí acerca de como como leer archivos xls, ahora toca hacer lo mismo, pero con archivos xlsx.

Al buscar en san google me he encontrado con una librería llamada OpenPyXL, así que veamos si funciona.

Tengo un archivo xls creando en Excel 2007 o 2010 no estoy seguro, pero veamos si logro abrirlo.

Lo primero es instalar el módulo openpyxl, incluso estándo en win7 estoy instalando el modulo via pip de la siguiente forma

C:\Python27\Scripts>pip install openpyxl
Downloading/unpacking openpyxl
  Downloading openpyxl-1.6.1.tar.gz (188kB): 188kB downloaded
  Running setup.py egg_info for package openpyxl

Installing collected packages: openpyxl
  Running setup.py install for openpyxl

Successfully installed openpyxl
Cleaning up...

En gnu/linux desde una terminal se tiene

$ sudo pip install openpyxl
[sudo] password for user:
Downloading/unpacking openpyxl
Downloading openpyxl-1.6.1.tar.gz (188Kb): 188Kb downloaded
Running setup.py egg_info for package openpyxl

Installing collected packages: openpyxl
Running setup.py install for openpyxl

Successfully installed openpyxl
Cleaning up...
$

Todos los ejemplos los voy a realizar desde ipython aprovechando que estoy en mi querido Linuxmint 14, así que manos
a las teclas…

Cargando el módulo openpyxl

Se realiza de la siguiente forma:

$ ipython
...
In [1]: from openpyxl import load_workbook
In [2]:

Abriendo el archivo xlsx y a las hojas de trabajo

Para realizar pruebas cuento con un archivo llamado test.xlsx que tiene varias hojas y datos y para tener acceso a el lo realizo con:

In [2]: wb = load_workbook('test.xlsx')
In [4]: print wb.get_sheet_names()
['INDEX', 'Data Dock', 'CANSAC', 'MX', 'BRA', 'APU-CH', ' ', 'TOP PSE', 'LATAM', 'TABLE', 'GRAPHICS', 'Sheet2 (2)',
 'Sheet4', 'Sheet5', 'Enablement Spiderweb', 'Sheet1 (2)', 'Sheet1 (3)', 'Sheet2', 'Sheet1']
In [5]:

De aquí en adelante, con la variable wb hará referencia al libro completo y como muestra se hace uso del método get_sheet_names() que regresa una lista de todas las hojas de trabajo.

Para acceder a una hoja de trabajo, lo más sencillo es acceder por nombre usando el metodo get_sheet_by_name()

In [8]: ws = wb.get_sheet_by_name('Data Stock')
In [9]: ws
Out[9]: <Worksheet "Data Dock">
In [10]:

Accediendo a una celda y a rango de celdas

Hay dos formas de acceder a una celda, usando la notación convencional de una hoja de cálculo, por ejemplo B5 o por medio de coordenadas (renglón, columna) ejemplo (2,5) para el caso de la celda B5.

Ahora con un caso práctico

In [1]: c1 = ws.cell('C5')
In [2]: c1.value
Out[2]: u'Ecuador'

In [3]: c1 = ws.cell(row=4, column=2)
In [4]: c1.value
Out[4]: u'Ecuador'

In [5]: 

Para acceder a un rango se usa el método range() que regresa una tupla de tuplas, donde cada tupla corresponde a un renglón, así que para tener acceso al valor de cada celda se requiere de dos ciclos, veamos

In [1]: for row in ws.range(‘A5:C10’):
for cell in row:
print cell.value,
print
….:
1 C2 Ecuador
1 C1 Peru
1 C1 Peru
1 C2 Peru
1 C1 Brasil
1 C1 Brasil

In [2]:

Maravilloso, se obtienen los datos de las columnas A, B, C desde la línea 5 a la 10.

Modificando valores

Como se vió en los ciclos for, la forma de obtener el valor de una celda es con la propiedad value, que también puede ser usada para asignar un nuevo valor, por ejemplo

In [1]: c1.value
Out[1]: u'Ecuador'

In [2]: c1.value = c1.value + '/Sur America'

In [3]: c1.value
Out[3]: u'Ecuador/Sur America'

In [4]: 

Guardando los cambios

Finalmente para guardar los cambios se usa el método save() de la siguiente forma

In [1]: wb.save('test2.xlsx')
In [2]: 

Y eso es todo, así de simple se puede tener acceso a archivo xlsx desde python, ya sea para leer su contenido o crear nuevos archivos, así qye ya no hay pretexto para entregar esos resultados en un formato que es mucho más sencillo de leer por mucha gente más y seguramente su contador o contadora se los agradeceran.

Salu2+

  1. julian
    2 abril, 2013 a las 16:47

    excelente, gracias por el aporte

    • 2 abril, 2013 a las 16:58

      Hola Julian

      Gracias por el comentario y si tienes algo que compartir, le hacemos referencia!

      Salu2+

  2. julian
    3 abril, 2013 a las 09:16

    rctorr, sabe dónde puedo conseguir un buen manual sobre esa librería, necesito agregar estilos a las fuentes y combinar celdas
    gracias de antemano

    • 4 abril, 2013 a las 01:19

      Hola Julian

      Parece ser que los formatos apenas están soportado, no lo he intentado bien, tampoco encontré como combinar celdas, si logras encontrar algo y lo puedes compartir me agradaría mucho.

      Salu2+

      • julian
        5 abril, 2013 a las 08:01

        Ya encontré cómo hacerlo, pero no he tenido tiempo para escribirlo, pienso hacer algún post sobre este tema, de lo poco que he aprendido. Colaboro en un blog, lo postearé allí
        gnumbrella.org cuando lo escriba se lo haré saber.

      • 5 abril, 2013 a las 12:33

        Fantástico y ha sido usando la misma librería?

        Esperaré con gusto tu post😉

        Podrías mencionar en donde lo has encontrado?

        Salu2+

  3. julian
    6 abril, 2013 a las 18:37

    si, la misma librería, openpyxl.
    la verdad no se cuando pueda hacer el post, jajajaja
    no he encontrado documentación al respecto, lo pude hacer fue estudiando el código fuente, el archivo style.py. Así supe los métodos y que parámetros reciben para poder aplicarlos

    • 6 abril, 2013 a las 21:05

      Bueno, con eso basta pata mi, al igual q tu, voy a ver sie doy un tiempo para escribirlo.

      Es teora no debe haber nada q no se pueda hacer ya q los xlsx son xml.

      Gracias por el dato!

      Salu2+

  4. julian
    9 abril, 2013 a las 10:10

    rctorr, por casualidad sabe cómo fijar el ancho y de una celda, no he encontrado cómo hacerlo.

    • 9 abril, 2013 a las 13:47

      Hola Julian

      Te quedo un poco mal, como verás no me he metido con formatos, creo que urge escribir ese post😉

      Suerte

  5. Aalvarez
    13 febrero, 2015 a las 09:16

    Combinar celdas:

    ws1.write_merge(0, 10, 0, 1,)

    • 13 febrero, 2015 a las 12:14

      Hola Aalvarez!

      gracias por tu aporte para unir celdas!

      Salu2+

  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: