El mundo de los negocios usa Microsoft Office, específicamente las hojas de cálculo, pues es usado para tabular información, crear reportes, gráficos estadísticos y mucho más. Y es de lo que trata este articulo, en el que tocaremos lo siguiente:
Pero antes tenemos que definir algunos conceptos que nos acompañaran de ahora en adelante:
- Spreadsheet / Workbook, es el archivo de Excel.
- Worksheet / Sheet, es una hoja de cálculo dentro de un archivo de excel. Un Workbook puede tener muchos Worksheets.
- Column, es la línea vertical dentro de una hoja de cálculo y esta etiquetada por letras como: A, B, C, etc.
- Row, es la línea horizontal dentro de una hoja de cálculo y esta etiquetada por números empezando desde el 1.
- Cell, es la combinación entre una Column y un Row, por ejemplo A1.
Librerías Python
Puedes usar Python para crear, leer y escribir hojas de cálculo. Sin embargo Python no posee soporte nativo para trabajar con Excel; es por ello que debemos instalar librerías adicionales, en este caso usaremos OpenPyXL, te dejo aquí la documentación:
Adicional puedes usar otras librerias como:
- xlrd, para leer archivos *.xls
- xlwt, para escribir archivos *.xls
- xlwings, para trabajar con archivos *.xlsx y macros.
Así pues, el primer paso es instalar la librería usando pip:
$ pip install openpyxl
Estas empezando en el mundillo de la programación con Python? Aquí te dejo un enlace de: Como programar en python? Preguntas y respuestas – 2018
Obteniendo hojas de cálculo de un archivo Excel
A partir de haber instalado la librería podemos trastear con una hoja de cálculo existente, por ejemplo descarga el archivo que te dejo en el enlace: https://bit.ly/39ME8Uh
Ya que usaremos el siguiente código Python para leer el nombre de la hoja de cálculo que posee nuestro archivo:
# abrir_excel.py from openpyxl import load_workbook def abri_archivo(path): workbook = load_workbook(filename=path) print(f'Hojas de calculo: {workbook.sheetnames}') sheet = workbook.active print(sheet) print(f'El titulo de la hoja de calculo es: {sheet.title}') if __name__ == '__main__': abrir_archivo('hojacalculo.xlsx')
En el ejemplo de arriba, importamos la función load_workbook para leer un archivo de Excel existente. Así mismo, esta función nos retornará una instancia que nos permite leer las hojas que posee el archivo.
Aqui el resultado del codigo anterior:
Hojas de calculo: ['Sheet 1 - Books']
<Worksheet "Sheet 1 - Books">
El titulo de la hoja de calculo es: Sheet 1 - Books
Leyendo datos de las celdas
En el paso anterior obtuvimos la instancia para acceder a las hojas de cálculo. Y consigo a sus celdas.
Así es que puedes tomar como ejemplo, el siguiente código para leer el valor que almacenan las celdas A2, A3 y B3
# leer_celdas.py from openpyxl import load_workbook def leer_celdas(path): workbook = load_workbook(filename=path) sheet = workbook.active print(sheet) print(f'El titulo de la hoja de calculo es: {sheet.title}') print(f'El valor de {sheet["A2"].value=}') print(f'El valor de {sheet["A3"].value=}') cell = sheet['B3'] print(f'{cell.value=}') if __name__ == '__main__': leer_celdas('hojacalculo.xlsx')
Ojo, que para la impresión de cadenas estamos usando una característica de Python 3.8. Es decir si ejecutas este ejemplo en una versión menor, es posible que arroje error.
El resultado seria como el siguiente:
<Worksheet "Sheet 1 - Books">
El titulo de la hoja de calculo es: Sheet 1 - Books
El valor de sheet["A2"].value='Title'
El valor de sheet["A3"].value='Python 101'
cell.value='Mike Driscoll'
Adicional al valor que contiene una celda puedes obtener el numero de registro y columna, con el siguiente código:
from openpyxl import load_workbook def leer_info_extra(path): workbook = load_workbook(filename=path) sheet = workbook.active cell = sheet['A2'] print(f'Registro {cell.row}, Columna {cell.column} = {cell.value}') print(f'{cell.value=} se encuentra en {cell.coordinate=}') if __name__ == '__main__': leer_info_extra('hojacalculo.xlsx')
Como el ejemplo anterior señala, tu puedes usar el numero de registro y columna a partir de una celda especifica.
Es así como el resultado de ejecutar el código es el siguiente:
Registro 2, Columna 1 = Title
cell.value='Title' esta en cell.coordinate='A2'
Bien amigos, hasta este punto ya podríamos leer datos de una hoja de Excel. Y el siguiente paso es poder escribir datos en este, que lo dejaré para un siguiente articulo.
Espero haber contribuido con un granito de arena en sus desarrollos de software. Gracias.