openpyxl - Trabajando con Hojas de Calculo en Python

En el articulo de hoy, tenemos un tutorial sobre openpyxl muy interesante, y de mucha utilidad. Hoy aprenderemos a trabajar con hojas de calculo, todo desde Python utilizando la librería openpyxl.
Así que sin más preámbulos, comencemos.
openpyxl
Antes de utilizar openpyxl, necesitamos tener openpyxl. La instalación es muy simple. Solo debemos escribir el siguiente comando en nuestra terminal o consola:
python -m pip install openpyxl
De esta manera la instalación comenzara. No tardara más de un minuto.
Ahora sí, es momento de la acción.

Creación de una Hoja Excel con openpyxl

Muy bien, una vez que tengamos instalado openpyxl ya podremos utilizar sus métodos y funcionalidades.
Comenzaremos creando nuestra primera hoja de calculo. Puedes abrir el editor de texto de tu preferencia y empezar a escribir el script.
openpyxl nos proporciona el submodulo Workbook con el cual trabajaremos.
# importamos el submodulo "Workbook"
from openpyxl import Workbook

# creamos el objeto Workbook
wb = Workbook()

# especificamos el nombre y la ruta del archivo
filesheet = "./demosheet.xlsx"

# guardamos el archivo
wb.save(filesheet)
Crear la hoja de calculo es muy fácil. Lo primero que hacemos es importar Workbook. Luego creamos el objeto Workbook. En la variable filesheet ingresamos el nombre y la ruta de nuestro nuevo archivo. En mi caso he especificado que el archivo se guarde en el directorio en el que estoy trabajando y cuyo nombre sera demosheet.xlsx. ¿Por que xlsx? recordemos que esa es la extensión de los archivo execel.
Luego de ejecutar este código, el archivo deberá estar listo en la ruta que especificamos:

Excel

Excelente, se ve muy bien.

Ingresando datos en nuestra hoja de calculo con openpyxl

Muy bien, ya tenemos nuestro archivo. Es momento de ingresar algunos datos en el.
Para ingresar datos en nuestra hoja, utilizaremos el submodulo load_workbook. Veamos como:
# importamos load_workbook
from openpyxl import load_workbook

# ruta de nuestro archivo
filesheet = "./demosheet.xlsx"

# creamos el objeto load_workbook
wb = load_workbook(filesheet)

# Seleccionamos el archivo
sheet = wb.active

# Ingresamos el valor 56 en la celda 'A1'
sheet['A1'] = 56

# Ingresamos el valor 1845 en la celda 'B3'
sheet['B3'] = 1845

# Guardamos el archivo con los cambios
wb.save(filesheet)
Para poder introducir datos en nuestra hoja de calculo, debemos utilizar load_workbook. Creamos una variable que contendrá la ruta de nuestro archivo creado anteriormente. Creamos el objeto load_workbook y le pasamos como argumento la ruta del archivo en el cual queremos escribir. Aplicamos active sobre el objeto load_workbook, guardándolo en una variable (sheet). La variable sheet ahora es un diccionario cuyas llaves son las celdas de la hoja de calculo. Así que para escribir en una celda utilizamos: sheet[CELDA] y asignamos los valores que contendrá esa celda. Por ultimo guardamos los cambiamos.
Veamos como quedo:

Excel 2

Muy bien, como podemos los datos se han escrito en las celdas correspondientes.
Existe un inconveniente con esta manera de ingresar datos. Y es que es muy tedioso y muy ineficiente ingresar datos celda por celda. Pero no te preocupes, existe una forma de ingresar grupos de datos. Vemos como:
# importamos load_workbook
from openpyxl import load_workbook

# ruta de nuestro archivo
filesheet = "./demosheet.xlsx"

# creamos el objeto load_workbook
wb = load_workbook(filesheet)

# seleccionaos el archivo
sheet = wb.active

# escribirmos los datos con sus respectivas filas y columnas
datos = [('id', 'nombre', 'edad'),
   (0, "Jose", 35),
   (1, "Carlos", 27),
   (2, "Sofia", 24)]

# recorremos las columnas y escribimos los datos
for row in datos:
 sheet.append(row)

# guardamos los cambios
wb.save(filesheet)
Solo escribimos el grupo de datos y los recorremos con un bucle para luego ingresarlos en la hoja de calculo. Resultado:

Excel 3 - openpyxl

Bueno, creo que debimos borrar los datos anteriormente creados.

Leyendo datos con openpyxl

Si sabemos escribir, deberíamos saber leer ¿no es cierto?. Veamos como:
# importamos load_workbook
from openpyxl import load_workbook

# ruta de nuestro archivo
filesheet = "./demosheet.xlsx"

# creamos ell obejeto load_workbook
wb = load_workbook(filesheet)

# seleccionamos el archivo
sheet = wb.active

# Obtenemos el valor de la celda A1
A1 = sheet['A1'].value

# Obtenemos el valor de la celda B5
B5 = sheet['B5'].value

# Obtenemos el valor de la celda C5
C5 = sheet['C5'].value

# Mostramos los valores 
celdas = [A1, B5, C5]
for valor in celdas:
 print(valor)
56
jose
35
Muy bien, ahora puedes tus software para manipular hojas de calculo.
¿Alguna duda? ¿Alguna sugerencia? Puedes dejar tu comentario, con mucho gusto te responderemos.
Puedes ver también la documentación oficial aqui
Quizá también te interese ver el artículo: https://pythondiario.com/2017/05/como-escribir-datos-csv-en-una-base-de.html


Si eres de los que les guste ver vídeo, aquí lo tienes:

Sin más nada que decir, mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes :D.
  1. Unknown dice:

    Genial! Gracias !!!!!

    1. Luis Salcedo dice:

      Muchas gracias Julian. Es bueno saber que las personas disfrutan de nuestro contenido. Saludos :D.

  2. Unknown dice:

    Un pregunta podemos utilizar hojas hechas con excel

    saludos y enhorabuena

    1. Luis Salcedo dice:

      Sí, por supuesto. Openpyxl tiene soporte para trabajar con archivos xlsx/xlsm/xltx/xltm.

  3. lalo dice:

    Hola,
    Tengo que extraer de un excel 3 columnas, filtrando filas por el codigo de marca que debo ingresar, una de esas columnas es un importe que tengo que aplicarle un porcentaje que debo ingresar, con el resultado debo generar otro excel, podran darme una idea de como hacerlo.
    Gracias

  4. Unknown dice:

    Hola! Cómo siempre execelente material el que compartes... Me servirá para enseñar programación a chicos del secundario y a sus profesores también, después comento la experiencia aquí en el Norte de Argentina...

    Tenemos un Grupo de Telegram sobre Python y allí se publica bastante lo que compartes.

    El Grupo es Python Norte:

    Coordinar actividades presenciales en el Norte de Argentina sobre el Lenguaje de Programación Python y su Comunidad.

    @pythonnorte

    Saludos y siempre agradecidos aquí en el Norte de Argentina...!!! 1500km de BsAs.

    1. Luis Salcedo dice:

      Hola Ariel. De verdad, muchas gracias. Es un orgullo para mi saber que todo lo escribo les sirva para enseñar. Saludos.

  5. SerUnoMismo dice:

    Un genio Luis y un solidario, muchas gracias !!

    1. Luis Salcedo dice:

      Muchas gracias por tu comentario. Saludos.

  6. Unknown dice:

    Excelente. funciona bien con Glade tambien. Gracias

  7. Arturo Morales dice:

    Hola, gracias por el contenido.
    Tengo una pregunta, quiero exportar una informacion que ya tengo leida con el python, solo que no se como hacer para ponerla en una tabla que ya tengo hecha en otro archivo excel, como ejemplo: De un archivo, celdas "M7:M20" extraer de un archivo excel y esos datos los quiero pasar a otro archivo excel en las celdas "C7:C20" tan solo valores, no se como poder hacerlo, espero una respuesta, gracias...

  8. Lorena dice:

    Hola. Hay forma de saber cuántas filas usadas tiene el archivo de excel?

  9. Julio dice:

    Hola, una pregunta, tengo un archivo excel guardado en una tabla en binario, quiero trabajar con ese archivo, que podría hacer? si mando el nombre del archivo excel al guardar me sale error not found

  10. Ale dice:

    Hola, no es más eficiente vba? Python es superior en algún punto? Gracias.

  11. gabriel araya dice:

    ¿Como crear un "corte de control" usando OPENXL. Necesito sumar un campo de valores el cual tiene como condicion el campo codigo = '001'
    Te agradeceria la ayuda.
    gabrielaraya2011@gmail.com
    Chile

  12. redmaytals dice:

    Gracias por tus artículos, son de gran utilidad además de estar bien explicados para los que nos adentramos en este mundo.

    Saludos

  13. Unknown dice:

    Hola!, me pareció muy útil esta guia, pero tengo una duda, como podría hacer que Python escriba automáticamente (al modificar un Excel) en la siguiente linea?, lo que quiero hacer es un programa que organize las ganancias diarias en un archivo Excel, pero ¿cómo puedo hacer que por cada valor (ganancia diaria) que se ingrese en mi programa, automáticamente Python modifique el Excel inicial y en la siguiente linea escriba el valor ingresado?, espero su respuesta y muchas gracias por esta guia.

  14. Juan Luis Saenz dice:

    Hola que tal!, como puedo cerrar mi archivo, existe alguna funcion para ello con esta libreria?

    1. dcaraballo dice:

      Hola, gracias por comentar y visitar el blog.
      Puedes hacerlo con .close()
      Saludos

  15. Juan dice:

    Es posible decidir a partir de que celda comience a escribir una base en la hoja de cálculo? ejemplo quiero que la base aparezca a partir de la fila 2 columna 3

  16. Edward Lugo dice:

    Hola, tu manera de explicar es muy directa y muy buena, yo en lo personal tengo una duda haber si me podrías ayudar, estoy utilizando DJANGO hago la consulta pero a la hora de enviar a excel una formula con (DATEDIF) lo guarda sin problema pero a la hora de abrirlo de da un mensaje que el libro tiene errores. Que puedo Hacer? y en que librería consigo esa función? de antemano te doy las gracias si me puedes guiar

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir
White Monkey