Cómo trabajar con archivos Excel utilizando Python

Supongo que has utilizado Microsoft Excel alguna vez. Es muy potente a la hora de trabajar con hojas de cálculo, tablas, gráficos... Pero, ¿qué tiene que ver Python en todo esto?

Python es un factor diferencial cuando se trata de archivos Excel, ya que es capaz de automatizar tareas de enormes proporciones que serían muy tediosas si lo tuviéramos que hacer mediante el uso de la aplicación. Por ejemplo, imagina que tienes que buscar cierta información en cientos y cientos de hojas de cálculo que pertenecen a presupuestos de la empresa. Una tarea muy desalentadora, ¿verdad? En este tutorial, te mostraré cómo Python puede utilizarse para trabajar con archivos Excel de forma sencilla.

No te preocupes si no tienes Microsoft Excel instalado en tu equipo. Puedes usar otras herramientas alternativas para seguir este tutorial como LibreOffice Calc u OpenOffice Calc.

¿Todo listo? ¡Pues empezamos!

OpenPyXL

OpenPyXL es una librería que se utiliza para leer y excribir archivos Excel 2010 (xlsx/xlsm/xltx/xltm). Esta es la librería que vamos a utilizar en este tutorial para trabajar con archivos Excel.

Lo primero que tenemos que hacer para poder utilizar esta librería es instalar OpenPyXL.

Instalando OpenPyXL

Para poder instalar OpenPyXL, tendremos que utilizar pip. Si no sabes que es pip, según la wikipedia es:

Es un sistema de gestión de paquetes utilizado para instalar y administrar paquetes de software escritos en Python. Muchos paquetes pueden ser encontrados en el Índice de Paquete de la Python (PyPI).

Podemos seguir los pasos mencionados en la Python Packaging User Guide para instalar pip, pero si tienes Python 2.7.9 o superior, o Python 3.4 o superior, ¡ya tienes pip!

Ahora para instalar OpenPyXL, escribe el siguiente comando en el terminal:

pip install openpixl

Abriendo un fichero excel

Una vez hayamos instalado OpenPyXL, estamos listos para empezar a trabajar con archivos Excel. La primera tarea normal que podemos realizar en un documento de Excel es abrir dicho documento. Descárgate el archivo de Excel sample.xlsx para que puedas seguir el hilo de este tutorial, o puedes utilizar cualquier archivo de Excel que desees.

Antes de poder utilizar OpenPyXL, tenemos que importarlo, de la siguiente manera:

import openpyxl

El método que necesitaremos para abrir el archivo Excel es load_workbook(). Si te estás preguntando que es un workbook, es simplemente el documento de hoja de cálculo de Excel. El script para abrir un documento de Excel es el siguiente:

import openpyxl
excel_document = openpyxl.load_workbook('sample.xlsx')

Ahora vamos a ver el tipo devuelto del método load_workbook(). Esto puede hacerse de la siguiente manera:

print type(excel_document)

Devolverá lo siguiente:

<class 'openpyxl.workbook.workbook.Workbook'>

Como podemos ver, el objeto devuelto es Workbook, del tipo de datos workbook. El objeto Workbook representa el fichero excel.

Nombres de hojas

Las hojas de Excel consisten en columnas (con letras que empiezan por A, B, C, etc.) y filas (empezando por 1, 2, 3, etc). Para ver qué hojas tenemos en nuestro documento Excel, tenemos que utilizar el método get_sheet_names() tal que así:

excel_document.get_sheet_names()

Si hacemos un print en el código anterior, obtenemos lo siguiente:

[u'Sheet1']

Por lo tanto, esto refleja que tenemos una hoja, llamada Sheet1.

Si tienes varias hojas, puedes acceder a una hoja específica por su nombre, utilizando este método: get_sheet_by_name().

Accediendo a las celdas

Ahora que hemos aprendido cómo abrir un archivo Excel y obtener la hoja, vamos a ver lo fácil que es acceder a una celda de esa hoja. Todo lo que tienes que hacer es recuperar esa hoja, y luego determinar la ubicación (coordenadas) de la celda. Digamos que queremos acceder a la columna A, fila 2 en el documento de Excel que tenemos, es decir, a A2. Esto puede implementarse de la siguiente manera:

sheet = excel_document.get_sheet_by_name('Sheet1')
print sheet['A2'].value

En este caso, obtendrás el siguiente valor: Abder.

También podemos utilizar una notación columna-fila. Por ejemplo, si queremos acceder a la celda de la fila 5 y la columna 2, escribimos lo siguiente:

sheet.cell(row = 5, column = 2).value

Este devuelve el valor: programmer.

Si quieres ver el tipo de una celda específica, puedes escribir:

print type(sheet['A2'])

o:

print sheet.cell(row = 5, column = 2)

En este caso, obtendrás la siguiente salida:

<class 'openpyxl.cell.cell.Cell'>

que significa que el objeto es del tipo Cell.

Accediendo a un rango de celdas

¿Estás interesado en acceder a un rango de celdas en lugar de a una sola celda? Digamos que queremos acceder a las celdas de A1 a B3, ¿qué tenemos que hacer? Pues simplemente, implementar el siguiente script:

multiple_cells = sheet['A1':'B3']
for row in multiple_cells:
    for cell in row:
        print cell.value

En este caso, obtendremos la siguiente salida:

Name
Profession
Abder
Student
Bob
Engineer

Accediendo a todas las filas y columnas

OpenPyXL te permite acceder a todas las filas y columnas de tu fichero Excel, utilizando los métodos rows() y columns() respectivamente.

Para acceder a todas las filas, podemos hacer lo siguiente:

all_rows = sheet.rows
print all_rows[:]

Date cuenta que hemos utilizado la notación [:] para acceder a todas las filas. Esto es porque el tipo de objeto devuelto de todo el documento es un tuple.

La salida del anterior script debería ser lo siguiente:

((<Cell Sheet1.A1>, <Cell Sheet1.B1>), (<Cell Sheet1.A2>, <Cell Sheet1.B2>), (<Cell Sheet1.A3>, <Cell Sheet1.B3>), (<Cell Sheet1.A4>, <Cell Sheet1.B4>), (<Cell Sheet1.A5>, <Cell Sheet1.B5>), (<Cell Sheet1.A6>, <Cell Sheet1.B6>), (<Cell Sheet1.A7>, <Cell Sheet1.B7>))

Por otro lado, si quieres acceder a todas las columnas, simplemente haz lo siguiente:

all_columns = sheet.columns
print all_columns[:]

En cuyo caso, obtendremos lo siguiente:

((<Cell Sheet1.A1>, <Cell Sheet1.A2>, <Cell Sheet1.A3>, <Cell Sheet1.A4>, <Cell Sheet1.A5>, <Cell Sheet1.A6>, <Cell Sheet1.A7>), (<Cell Sheet1.B1>, <Cell Sheet1.B2>, <Cell Sheet1.B3>, <Cell Sheet1.B4>, <Cell Sheet1.B5>, <Cell Sheet1.B6>, <Cell Sheet1.B7>))

Puedes hacer un montón de cosas con los archivos Excel, si así lo deseas echa un vistazo a la documentación oficial de OpenPyXL.

Fuente: Abder-Rahman Ali

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP