Herramientas de usuario

Herramientas del sitio


python:excel

¡Esta es una revisión vieja del documento!


Trabajar en Excel con Python

Para trabajar en Excel con Python se instala la biblioteca de terceros OpenPyXL, estas notas versan sobre la versión 2.6.2: pip install –user -U openpyxl==2.6.2.

se puede encontrar la documentación completa en la web del proyecto.
Una vez instalado, para trabajar conla biblioteca:

 import openpyxl

Lectura de documentos EXCEL

Para trabajar con un documento Excel (denominado “libro”), hay que abrirlo y asignarlo a una variable, como se hacía con los archivos, con el método load_workbook():

wb = openpyxl.load_workbook('libro.xlsx')


Cada libro de Excel está compuesto por “hojas” o sheets, que a su vez están divididas en cuadrículas numeradas alfabéticamente en columnas y numéricamente en filas.

Obtener hojas de libros

Los libros pueden tratarse como diccionarios, cuyas claves son los títulos de las hojas. La hoja en la que trabajemos debe obtenerse de este modo.

hoja = wb['Hoja1']
hoja.title    # 'Hoja1'

Con el método title() obtenemos el nombre de la hoja.
Podemos saber qué hoja está activa con el atributo libro.active.

Obtener celdas de hojas

Del mismo modo, las hojas pueden ser tratadas como diccionarios, en los que las claves son las coordenadas de las celdas.

import openpyxl
wb = openpyxl.load_workbook('ejemplo.xlsx')
sheet = wb['Hoja1']
sheet['A1']         # <Cell 'Hoja1'.A1>
sheet['A1'].value   # Devuelve el contenido de la Celda
c = sheet['A1']     # Se asigna la celda a una variable
c.value             # Con la que también se puede trabajar sin tener que estar indicando constantemente sus coordenadas
f'La celda con coordenadas: Fila {c.row}, Columna {c.column}, tiene el valor: {c.value}'
f'La celda con coordenadas: Fila {c.coordinate}, tiene el valor: {c.value}'

Se pueden ver los siguientes atributos de una celda: value, row, column y coordinate.

También podemos referirnos a una celda a través de sus coordenadas con la función cell():

hoja.cell(row=1, column=2)
hoja.cell(row=1, column=2).value

Con la función anterior y un bucle for con range() podemos recorrer un conjunto de celdas:

for i in range(1, 8, 2):
    print(i, hoja.cell(row=i, column=2).value)

atributos de la hoja sheet que pueden ser interesantes:

  • sheet.max_row
  • sheet.max_column

Conversión entre letras de columnas y números

Para ello hay que importar las bibliotecas get_column_letter y column_index_from_string de openpyxl.utils.

from openpyxl.utils import get_column_letter, column_index_from_string


  • get_column_letter(Número de columna) Devuelve la letra de la columna.
  • column_index_from_string(letra_de_la_columna) Devuelve el número de la columna.

Extraer filas y columnas de la hoja

Es posible extraer (split) filas, columnas, o áreas de una hoja, por ejemplo a una tupla, con otras tuplas como elementos, para despues recorrerlas con un bucle for:

import openpyxl
hc = openpyxl.load_workbook('ejemplo.xlsx')
hoja = hc['Hoja1']
tuple(hoja['A1':'C3']) # Devuelve todas las celdas en el área de A1 a C3.
'''((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>), (<Cell
   'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>), (<Cell 'Sheet1'.A3>,
   <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>))'''
 
for fila_de_celdas in sheet['A1':'C3']:  # Recorrerá el área indicada fila a fila (devuelve una fila en cada iteración)
    for celda in fila_de_celdas:         # Recorre la fila (tupla), elemento a elemento (celdas) en cada iteración
        print(celda.coordinate, celda.value)  # Muestra coordenada y calor de cada celda
    print('--- END OF ROW ---')               # Muestra que se ha llegado al fin de una fila

Del mismo modo, podemos extraer una fila o columna, por ejemplo, en una lista:

import openpyxl
hc = openpyxl.load_workbook('ejemplo.xlsx')
hoja = hc.active
list(hoja.columns)[1]    # Extraemos en una lista las celdas de la 2ª columna
'''(<Cell 'Sheet1'.B1>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.
B4>, <Cell 'Sheet1'.B5>, <Cell 'Sheet1'.B6>, <Cell 'Sheet1'.B7>)'''
 
for celda in list(hoja.columns)[1]:  # Recorremos las celdas de la 2ª columna 
    print(celda.value)               # e imprimimos sus valores

Escribiendo en Hojas de cálculo

python/excel.1649418430.txt.gz · Última modificación: por alberto

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki