Saltar al contenido principal
InicioTutorialesPython

Tutorial de Excel en Python: La guía definitiva

Aprende a leer e importar archivos Excel en Python, a escribir datos en estas hojas de cálculo y a encontrar los mejores paquetes para hacerlo.
feb 2024  · 30 min leer

Introducción a Excel en Python

Tanto si eres estudiante como si trabajas, lo más probable es que hayas utilizado Excel para trabajar con datos y hacer números. 

De hecho, una investigación realizada en 2019 descubrió que aproximadamente el 54 % de las empresas utilizan Excel para realizar operaciones aritméticas, analizar datos, crear visualizaciones y generar informes. También puedes realizar tareas de modelado predictivo como la regresión y la agrupación mediante Excel.

Sin embargo, a pesar de los indiscutibles puntos fuertes de Excel, la herramienta presenta su propio conjunto de inconvenientes, que la hacen, en ocasiones, ineficaz a la hora de realizar tareas específicas que implican enormes conjuntos de datos. 

Una limitación de Excel es su incapacidad para manejar grandes cantidades de datos. Puedes encontrarte con graves problemas de rendimiento al intentar realizar operaciones complejas con muchas entradas de datos en Excel, sobre todo si tus fórmulas y macros no están optimizadas para el rendimiento.

Excel también puede consumir mucho tiempo si necesitas realizar tareas repetitivas. Por ejemplo, si necesitas repetir un análisis en varios archivos de Excel cada semana, tendrías que abrirlos manualmente y copiar y pegar las mismas fórmulas una y otra vez. 

Las encuestas muestran que al 93 % de los usuarios de Excel les lleva mucho tiempo consolidar hojas de cálculo y que los empleados dedican aproximadamente 12 horas al mes sólo a combinar distintos archivos de Excel.

Estos inconvenientes pueden resolverse automatizando los flujos de trabajo de Excel con Python. Tareas como la consolidación de hojas de cálculo, la limpieza de datos y el modelado predictivo pueden hacerse en minutos utilizando un sencillo script de Python que escribe en un archivo de Excel.

Los usuarios de Excel también pueden crear un programador en Python que ejecute el script automáticamente a diferentes intervalos de tiempo, reduciendo drásticamente la cantidad de intervención humana necesaria para realizar la misma tarea una y otra vez.

En este artículo, te mostraremos cómo hacerlo:

  • Utiliza una biblioteca llamada Openpyxl para leer y escribir archivos Excel utilizando Python
  • Crea operaciones aritméticas y fórmulas de Excel en Python
  • Manipula hojas de cálculo de Excel con Python
  • Construye visualizaciones en Python y guárdalas en un archivo Excel
  • Modifica colores y estilos de las celdas de Excel con Python

Introducción a Openpyxl

Openpyxl es una biblioteca Python que permite leer archivos Excel y escribir en ellos. 

Este marco puede ayudarte a escribir funciones, dar formato a hojas de cálculo, crear informes y construir gráficos directamente en Python sin ni siquiera tener que abrir una aplicación Excel.

Además, Openpyxl permite a los usuarios iterar a través de hojas de cálculo y realizar el mismo análisis en varios conjuntos de datos al mismo tiempo. 

Esto mejora la eficacia y permite automatizar los flujos de trabajo de Excel, ya que los usuarios sólo tienen que realizar el análisis en una hoja de cálculo y pueden repetirlo tantas veces como sea necesario.

Cómo instalar Openpyxl

Para instalar Openpyxl, simplemente abre tu símbolo del sistema o Powershell y escribe el siguiente comando:

$pip install Openpyxl

Deberías ver aparecer el siguiente mensaje indicando que el paquete se ha instalado correctamente:

Éxito de la instalación de Openpyxl

Lectura de archivos Excel en Python con Openpyxl

En este tutorial utilizaremos el conjunto de datos de Ventas de Videojuegos de Kaggle. Este conjunto de datos ha sido preprocesado por nuestro equipo a efectos de este tutorial, y puedes descargar la versión modificada desde este enlace. Puedes importar Excel a Python siguiendo el proceso que se indica a continuación:

  1. Cargar el libro de trabajo

    Tras descargar el conjunto de datos, importa la biblioteca Openpyxl y carga el libro de trabajo en Python:

    import openpyxl 
    
    wb = openpyxl.load_workbook('videogamesales.xlsx')

    Ahora que el archivo Excel está cargado como objeto Python, tienes que decirle a la biblioteca a qué hoja de cálculo debe acceder. Hay dos formas de hacerlo:

    El primer método consiste simplemente en llamar a la hoja de cálculo activa, que es la primera hoja del libro de trabajo, utilizando la siguiente línea de código:

    ws = wb.active

    Alternativamente, si conoces el nombre de la hoja de cálculo, también puedes acceder a ella por su nombre. Utilizaremos la hoja "vgsales" en esta sección del tutorial:

    ws = wb['vgsales']

    Vamos a contar ahora el número de filas y columnas de esta hoja de cálculo:

    print('Total number of rows: '+str(ws.max_row)+'. And total number of columns: '+str(ws.max_column))

    El código anterior debería dar el siguiente resultado:

    Total number of rows: 16328. And total number of columns: 10

    Ahora que conocemos las dimensiones de la hoja, vamos a aprender a leer datos del libro de trabajo. 

  2. Leer datos de una celda

    Aquí tienes una captura de pantalla de la hoja activa con la que trabajaremos en esta sección:

    Datos de ventas de videojuegos

    Para recuperar datos de una celda concreta con Openpyxl, puedes escribir el valor de la celda de la siguiente manera:

    print('The value in cell A1 is: '+ws['A1'].value)

    Deberías obtener la siguiente salida:

    The value in cell A1 is: Rank
  3. Leer datos de varias celdas

    Ahora que sabemos cómo leer datos de una celda concreta, ¿qué pasaría si quisiéramos imprimir todos los valores de las celdas de una fila determinada de la hoja de cálculo?

    Para ello, puedes escribir un simple `for loop` que recorra todos los valores de una fila concreta:

    values = [ws.cell(row=1,column=i).value for i in range(1,ws.max_column+1)]
    print(values)

    El código anterior imprimirá todos los valores de la primera fila:

    ['Rank', 'Name', 'Platform', 'Year', 'Genre', 'Publisher', 'NA_Sales', 'EU_Sales', 'JP_Sales', 'Other_Sales']

    A continuación, vamos a intentar imprimir varias filas de una columna concreta.

    Crearemos un `for loop` para representar las diez primeras filas de la columna "Name" como una lista. Deberíamos obtener los nombres resaltados en el recuadro rojo de abajo:

    Columna de nombres de videojuegos

    data=[ws.cell(row=i,column=2).value for i in range(2,12)]
    print(data)

    El código anterior generará el siguiente resultado:

    ['Wii Sports', 'Super Mario Bros.', 'Mario Kart Wii', 'Wii Sports Resort', 'Pokemon Red/Pokemon Blue', 'Tetris', 'New Super Mario Bros.', 'Wii Play', 'New Super Mario Bros. Wii', 'Duck Hunt']

    Por último, vamos a imprimir las diez primeras filas de un rango de columnas de la hoja de cálculo:

    # reading data from a range of cells (from column 1 to 6)
    
    my_list = list()
    
    for value in ws.iter_rows(
        min_row=1, max_row=11, min_col=1, max_col=6, 
        values_only=True):
        my_list.append(value)
        
    for ele1,ele2,ele3,ele4,ele5,ele6 in my_list:
        (print ("{:<8}{:<35}{:<10}
                 {:<10}{:<15}{:<15}".format(ele1,ele2,ele3,ele4,ele5,ele6)))

    Después de ejecutar el código anterior, deberían aparecer las diez primeras filas de datos en las seis primeras columnas:

    clasificación de videojuegos

Escribir en archivos Excel con Openpyxl

Ahora que sabemos cómo acceder a los datos de los archivos de Excel y leerlos, vamos a aprender a escribir en ellos utilizando Openpyxl.

  1. Escribir a una celda

    Hay dos formas de escribir en un archivo con Openpyxl.

    En primer lugar, puedes acceder directamente a la celda utilizando su tecla:

    ws['K1'] = 'Sum of Sales'

    Una alternativa es especificar la posición de fila y columna de la celda en la que quieres escribir:

    ws.cell(row=1, column=11, value = 'Sum of Sales')

    Cada vez que escribas en un archivo Excel con Openpyxl, tienes que guardar los cambios con la siguiente línea de código o no se reflejarán en la hoja de cálculo:

    wb.save('videogamesales.xlsx')

    Si tu libro de trabajo está abierto cuando intentas guardarlo, te encontrarás con el siguiente error de permiso:

    Error de permiso

    Asegúrate de cerrar el archivo Excel antes de guardar los cambios. Luego puedes abrirla de nuevo para asegurarte de que el cambio se refleja en tu hoja de cálculo:

    Datos de videojuegos con nueva columna

    Observa que se ha creado una nueva columna llamada "Suma de ventas" en la celda K1.

  2. Crear una nueva columna

    Sumemos ahora la suma de las ventas en cada región y escribámosla en la columna K.

    Lo haremos para los datos de ventas de la primera fila:

    row_position = 2
    col_position = 7
    
    total_sales = ((ws.cell(row=row_position, column=col_position).value)+
                   (ws.cell(row=row_position, column=col_position+1).value)+
                   (ws.cell(row=row_position, column=col_position+2).value)+
                   (ws.cell(row=row_position, column=col_position+3).value))
    
    ws.cell(row=2,column=11).value=total_sales
    wb.save('videogamesales.xlsx')

    Observa que las ventas totales se han calculado en la celda K2 para el primer juego de la hoja de cálculo:

    Suma de las ventas en la celda K2

    Del mismo modo, vamos a crear un `for loop` para sumar los valores de ventas de cada fila:

    row_position = 1
    
    for i in range(1, ws.max_row):
    
        row_position += 1
        NA_Sales = ws.cell(row=row_position, column=7).value
        EU_Sales = ws.cell(row=row_position, column=8).value
        JP_Sales = ws.cell(row=row_position, column=9).value
        Other_Sales = ws.cell(row=row_position, column=10).value
    
        total_sales = (NA_Sales + EU_Sales + JP_Sales + Other_Sales)
        ws.cell(row=row_position, column=11).value = total_sales
    
    wb.save("videogamesales.xlsx")

    Tu fichero Excel debería tener ahora una nueva columna que refleje las ventas totales de videojuegos en todas las regiones:

    Suma de las ventas calculadas

  3. Añadir nuevas filas

    Para añadir una nueva fila al libro de trabajo, simplemente crea una tupla con los valores que quieras incluir y escríbela en la hoja:

    new_row = (1,'The Legend of Zelda',1986,'Action','Nintendo',3.74,0.93,1.69,0.14,6.51,6.5)
    
    ws.append(new_row)
        
    wb.save('videogamesales.xlsx')

    Puedes confirmar que estos datos se han añadido imprimiendo la última fila del libro:

    values = [ws.cell(row=ws.max_row,column=i).value for i in range(1,ws.max_column+1)]
    print(values)

    Se generará la siguiente salida:

    [1, 'The Legend of Zelda', 1986, 'Action', 'Nintendo', 3.74, 0.93, 1.69, 0.14, 6.51, 6.5]
  4. Borrar filas

    Para eliminar la nueva fila que acabamos de crear, puedes ejecutar la siguiente línea de código:

    ws.delete_rows(ws.max_row, 1) # row number, number of rows to delete
    
    wb.save('videogamesales.xlsx')

    El primer argumento de la función eliminar_filas() es el número de fila que quieres eliminar. El segundo argumento indica el número de filas que deben borrarse.

Crear fórmulas de Excel con Openpyxl

Puedes utilizar Openpyxl para escribir fórmulas exactamente igual que lo harías en Excel. Aquí tienes algunos ejemplos de funciones básicas que puedes crear con Openpyxl:

  1. AVERAGE

    Vamos a crear una nueva columna llamada "Ventas medias" para calcular la media de ventas totales de videojuegos en todos los mercados:

    ws['P1'] = 'Average Sales'
    ws['P2'] = '= AVERAGE(K2:K16220)'
    
    wb.save('videogamesales.xlsx')

    La media de ventas en todos los mercados es de aproximadamente 0,19. Se imprimirá en la celda P2 de tu hoja de cálculo.

  2. COUNTA

    La función "COUNTA" de Excel cuenta las celdas que se rellenan dentro de un rango determinado. Utilicémoslo para encontrar el número de registros entre E2 y E16220:

    ws['Q1'] = "Number of Populated Cells" 
    ws['Q2'] = '=COUNTA(E2:E16220)'
    
    wb.save('videogamesales.xlsx')

    En este rango hay 16 219 registros que contienen información.

  3. COUNTIF

    COUNTIF es una función de Excel muy utilizada que cuenta el número de celdas que cumplen una condición específica. Utilicémoslo para contar el número de juegos de este conjunto de datos con el género "Sports":

    ws['R1'] = 'Number of Rows with Sports Genre'
    ws['R2'] = '=COUNTIF(E2:E16220, "Sports")'
    
    wb.save('videogamesales.xlsx')

    Hay 2296 juegos deportivos en el conjunto de datos.

  4. SUMIF

    Ahora, vamos a hallar la "Sum of Sales" total generada por los juegos deportivos utilizando la función SUMIF:

    ws['S1'] = 'Total Sports Sales'
    ws['S2'] = '=SUMIF(E2:E16220, "Sports",K2:K16220)'
     
    wb.save('videogamesales.xlsx')

    El número total de ventas generadas por los juegos deportivos es de 454.

  5. CEILING

    La función CEILING de Excel redondea un número al múltiplo especificado más próximo. Redondeemos la cantidad total de ventas generadas por los juegos deportivos utilizando esta función:

    ws['T1'] = 'Rounded Sum of Sports Sales'
    ws['T2'] = '=CEILING(S2,25)'
    
    wb.save('videogamesales.xlsx')

    Hemos redondeado las ventas totales generadas por los juegos deportivos al múltiplo de 25 más próximo, lo que arroja un resultado de 475.

    Los fragmentos de código anteriores deberían generar el siguiente resultado en tu hoja Excel (de las celdas P1 a T2):

    Fila de promedio de ventas

    Puedes consultar nuestra Hoja de trucos de conceptos básicos de Excel para saber más sobre fórmulas, operadores, funciones matemáticas y cálculo condicional de Excel.

Trabajar con hojas en Openpyxl

Ahora que sabemos cómo acceder a las hojas de cálculo y escribir en ellas, vamos a aprender cómo podemos manipularlas, eliminarlas y duplicarlas utilizando Openpyxl.

  1. Cambiar los nombres de las hojas

    En primer lugar, vamos a imprimir el nombre de la hoja activa con la que estamos trabajando actualmente utilizando el atributo title de Openpyxl:

    print(ws.title)

    Se mostrará el siguiente resultado:

    vgsales

    Ahora, vamos a cambiar el nombre de esta hoja de cálculo utilizando las siguientes líneas de código:

    ws.title ='Video Game Sales Data'
    
    wb.save('videogamesales.xlsx')

    El nombre de tu hoja activa debería cambiar ahora a "Video Game Sales Data".

  2. Crear una nueva hoja de cálculo

    Ejecuta la siguiente línea de código para listar todas las hojas de cálculo del libro:

    print(wb.sheetnames)

    Verás una matriz con los nombres de todas las hojas de cálculo del archivo:

    ['Video Game Sales Data', 'Total Sales by Genre', 'Breakdown of Sales by Genre', 'Breakdown of Sales by Year']

    Vamos a crear ahora una nueva hoja de cálculo vacía:

    wb.create_sheet('Empty Sheet') # create an empty sheet
    print(wb.sheetnames) # print sheet names again
    
    wb.save('videogamesales.xlsx')

    Observa que ahora se ha creado una nueva hoja llamada "Empty Sheet":

    ['Video Game Sales Data', 'Total Sales by Genre', 'Breakdown of Sales by Genre', 'Breakdown of Sales by Year', ‘Empty Sheet’]
  3. Eliminar una hoja de cálculo

    Para eliminar una hoja de cálculo con Openpyxl, basta con utilizar el atributo eliminar e imprimir de nuevo todos los nombres de las hojas para confirmar que la hoja se ha eliminado:

    wb.remove(wb['Empty Sheet'])
    print(wb.sheetnames)
    
    wb.save('videogamesales.xlsx')

    Observa que la hoja de cálculo "Empty Sheet" ya no está disponible:

    ['Video Game Sales Data', 'Total Sales by Genre', 'Breakdown of Sales by Genre', 'Breakdown of Sales by Year']
  4. Duplicar una hoja de cálculo

    Por último, ejecuta esta línea de código para crear una copia de una hoja de cálculo existente:

    wb.copy_worksheet(wb['Video Game Sales Data'])
    wb.save('vgsales_2.xlsx')

    Imprimiendo de nuevo todos los nombres de las hojas, obtenemos el siguiente resultado:

    ['Video Game Sales Data', 'Total Sales by Genre', 'Breakdown of Sales by Genre', 'Breakdown of Sales by Year', 'Video Game Sales Data Copy']

Añadir gráficos a un archivo Excel con Openpyxl

A menudo se considera que Excel es la herramienta a la que acudir para crear visualizaciones y resumir conjuntos de datos. En esta sección, aprenderemos a construir gráficos en Excel directamente desde Python utilizando Openpyxl.

  1. Gráfico de barras

    Creemos primero un sencillo gráfico de barras que muestre las ventas totales de videojuegos por género. Para ello utilizaremos la hoja de cálculo "Total Sales by Genre":

    Hoja de trabajo para el diagrama de barras

    Esta hoja de cálculo contiene una tabla dinámica en la que la suma de las ventas se ha agregado por género, como se ve en la captura de pantalla anterior.

    Vamos a acceder a esta hoja de cálculo antes de empezar a crear el gráfico de barras:

    ws = wb['Total Sales by Genre'] # access the required worksheet

    Ahora tenemos que indicar a Openpyxl los valores y categorías que queremos representar gráficamente.

    Valores:

    Los valores incluyen los datos de "Sum of Sales" que queremos representar gráficamente. Tenemos que decirle a Openpyxl dónde encontrar estos datos en el archivo de Excel, incluyendo el rango en el que empiezan y acaban sus valores.

    Cuatro parámetros de Openpyxl te permiten especificar dónde se encuentran tus valores:

    • Min_column: columna mínima que contiene datos
    • Max_column: columna máxima que contiene datos
    • Min_row: fila mínima que contiene datos
    • Max_row: fila máxima que contiene datos

    Aquí tienes una imagen que muestra cómo puedes definir estos parámetros:

    Cuatro parámetros para definir valores

    Observa que la fila mínima es la primera y no la segunda. Esto se debe a que Openpyxl empieza a contar a partir de la fila que tiene un valor numérico.

    # Values for plotting
    
    from openpyxl.chart import Reference
    
    values = Reference(ws,         # worksheet object   
                       min_col=2,  # minimum column where your values begin
                       max_col=2,  # maximum column where your values end
                       min_row=1,  # minimum row you’d like to plot from
                       max_row=13) # maximum row you’d like to plot from

    Categorías

    Ahora tenemos que definir los mismos parámetros para las categorías de nuestro gráfico de barras:

    Parámetros para las categorías del gráfico de barras

    Aquí tienes el código que puedes utilizar para establecer los parámetros de las categorías del gráfico:

    cats = Reference(ws, 
                     min_col=1, 
                     max_col=1, 
                     min_row=2, 
                     max_row=13)

    Crear el diagrama de barras

    Ahora, podemos crear el objeto gráfico de barras e incluir nuestros valores y categorías utilizando las siguientes líneas de código:

    from openpyxl.chart import BarChart
    
    chart = BarChart()
    chart.add_data(values, titles_from_data=True)
    chart.set_categories(cats)

    Establecer títulos de gráficos

    Por último, puedes establecer los títulos del gráfico e indicar a Openpyxl dónde quieres crearlo en la hoja de Excel:

    # set the title of the chart
    chart.title = "Total Sales"
    
    # set the title of the x-axis
    chart.x_axis.title = "Genre"
    
    # set the title of the y-axis
    chart.y_axis.title = "Total Sales by Genre"
    
    # the top-left corner of the chart
    # is anchored to cell F2 .
    ws.add_chart(chart,"D2")
    
    # save the file 
    wb.save("videogamesales.xlsx")

    A continuación, puedes abrir el archivo de Excel y navegar hasta la hoja de cálculo "Total Sales by Genre". Deberías observar que aparece un gráfico parecido a éste:

    Ventas totales por género

  2. Gráfico de barras agrupadas

    Ahora, vamos a crear un gráfico de barras agrupadas que muestre las ventas totales por género y región. Puedes encontrar los datos de este gráfico en la hoja de cálculo "Breakdown of Sales by Genre":

    Tabla para gráfico de barras agrupadas

    De forma similar a como creamos el gráfico de barras, tenemos que definir el rango para los valores y las categorías:

    Definición de escalas y categorías para el gráfico de barras agrupadas

    Ahora podemos acceder a la hoja de cálculo y escribir esto en código:

    ### Creating a Grouped Bar Chart with Openpyxl
    
    ws = wb['Breakdown of Sales by Genre'] # access worksheet
    
    # Data for plotting
    
    values = Reference(ws,
                       min_col=2,
                       max_col=5,
                       min_row=1,
                       max_row=13)
    
    cats = Reference(ws, min_col=1, 
                         max_col=1, 
                         min_row=2, 
                         max_row=13)

    Ahora podemos crear el objeto gráfico de barras, incluir en él los valores y las categorías, y establecer los parámetros del título exactamente igual que hicimos anteriormente:

    # Create object of BarChart class
    
    chart = BarChart()
    chart.add_data(values, titles_from_data=True)
    chart.set_categories(cats)
    
    # set the title of the chart
    chart.title = "Sales Breakdown"
    
    # set the title of the x-axis
    chart.x_axis.title = "Genre"
    
    # set the title of the y-axis
    chart.y_axis.title = "Breakdown of Sales by Genre"
    
    # the top-left corner of the chart is anchored to cell H2.
    ws.add_chart(chart,"H2")
    
    # save the file 
    wb.save("videogamesales.xlsx")

    Una vez abierta la hoja de cálculo, debería aparecer un gráfico de barras agrupadas con este aspecto:

    Salida de gráfico de barras agrupadas

  3. Gráfico de líneas apiladas

    Por último, crearemos un gráfico de líneas apiladas utilizando los datos de la pestaña "Breakdown of Sales by Year". Esta hoja de cálculo contiene datos de ventas de videojuegos desglosados por año y región:

    Suma de los datos de ventas

    Vamos a definir el rango para los valores y categorías de este gráfico:

    Valores y categorías para el gráfico de líneas apiladas

    Ahora podemos escribir estos valores mínimo y máximo en código:

    # Data for plotting
    
    values = Reference(ws,
                       min_col=2,
                       max_col=6,
                       min_row=1,
                       max_row=40)
    
    cats = Reference(ws, min_col=1, max_col=1, min_row=2, max_row=40)

    Por último, vamos a crear el objeto gráfico de líneas y a establecer el título, el eje x y el eje y del gráfico:

    # Create object of LineChart class
    
    from openpyxl.chart import LineChart
    
    chart = LineChart()
    chart.add_data(values, titles_from_data=True)
    chart.set_categories(cats)
    
    # set the title of the chart
    chart.title = "Total Sales"
    
    # set the title of the x-axis
    chart.x_axis.title = "Year"
    
    # set the title of the y-axis
    chart.y_axis.title = "Total Sales by Year"
    
    # the top-left corner of the chart is anchored to cell H2 
    ws.add_chart(chart,"H2")
    
    # save the file 
    wb.save("videogamesales.xlsx")

    En tu hoja de cálculo debería aparecer un gráfico de líneas apiladas con este aspecto:

    Gráfico de líneas apiladas

Formatear celdas con Openpyxl

Openpyxl permite a los usuarios aplicar estilos a las celdas de los libros de Excel. Puedes hacer que tu hoja de cálculo tenga un aspecto más bonito cambiando el tamaño de las fuentes, los colores de fondo y los bordes de las celdas directamente en Python.

Aquí tienes algunas formas de personalizar tu hoja de cálculo Python Excel utilizando Openpyxl:

  1. Cambiar el tamaño y el estilo de las fuentes

    Aumentemos el tamaño de la fuente en la celda A1 y pongamos el texto en negrita utilizando las siguientes líneas de código:

    from openpyxl.styles import Font
    
    ws = wb['Video Game Sales Data']
    ws['A1'].font = Font(bold=True, size=12)
    
    wb.save('videogamesales.xlsx')

    Observa que el texto de la celda A1 es ahora ligeramente más grande y está en negrita:

    datos de fuentes grandes

    Ahora bien, ¿y si quisiéramos cambiar el tamaño y estilo de letra de todos los encabezados de columna de la primera fila?

    Para ello, podemos utilizar el mismo código y crear simplemente un `for loop` para iterar por todas las columnas de la primera fila:

    for cell in ws["1:1"]: 
        cell.font = Font(bold=True, size=12)
    
    wb.save('videogamesales.xlsx')

    Cuando iteramos a través de ["1:1"], estamos indicando a Openpyxl las filas inicial y final por las que debe pasar el bucle. Si quisiéramos recorrer las diez primeras filas, por ejemplo, especificaríamos ["1:10"].

    Puedes abrir la hoja de Excel para comprobar si se han reflejado los cambios:

    datos de fuentes más pequeñas

  2. Cambiar el color de la fuente

    Puedes cambiar los colores de las fuentes en Openpyxl utilizando códigos hexadecimales:

    from openpyxl.styles import colors
    
    ws['A1'].font = Font(color = 'FF0000',bold=True, size=12) ## red
    ws['A2'].font = Font(color = '0000FF') ## blue
    
    wb.save('videogamesales.xlsx')

    Después de guardar el libro y abrirlo de nuevo, los colores de las fuentes de las celdas A1 y A2 deberían haber cambiado:

    cambiar color fuente

  3. Cambiar el color de fondo de las celdas

    Para cambiar el color de fondo de una celda, puedes utilizar el módulo PatternFill de Openpyxl:

    ## changing background color of a cell
    
    from openpyxl.styles import PatternFill
    
    ws["A1"].fill = PatternFill('solid', start_color="38e3ff") # light blue background color
    
    wb.save('videogamesales.xlsx')

    El siguiente cambio debe reflejarse en tu hoja de cálculo:

    cambio de color de la celda

  4. Añadir bordes de celda

    Para añadir un borde de celda utilizando Openpyxl, ejecuta las siguientes líneas de código:

    ## cell borders
    
    from openpyxl.styles import Border, Side
    
    my_border = Side(border_style="thin", color="000000")
    
    ws["A1"].border = Border(
        top=my_border, left=my_border, right=my_border, bottom=my_border
    )
    
    wb.save("videogamesales.xlsx")

    Deberías ver que aparece un borde parecido a éste en toda la celda A1:

    cambiar el color de la celda

  5. Formato condicional

    El formato condicional es el proceso de resaltar valores específicos en un archivo de Excel basándose en una serie de condiciones. Permite a los usuarios visualizar los datos más fácilmente y comprender mejor los valores de sus hojas de cálculo.

    Utilicemos Openpyxl para resaltar en verde todos los valores de ventas de videojuegos que sean mayores o iguales que 8:

    from openpyxl.formatting.rule import CellIsRule
    
    
    fill = PatternFill(
        start_color='90EE90',
        end_color='90EE90',fill_type='solid') # specify background color
    
    ws.conditional_formatting.add(
        'G2:K16594', CellIsRule(operator='greaterThan', formula=[8], fill=fill)) # include formatting rule
    
    wb.save('videogamesales.xlsx')

    En el primer bloque de código, especificamos el color de fondo de las celdas que queremos formatear. En este caso, el color es verde claro.

    A continuación, creamos una regla de formato condicional que establece que cualquier valor superior a 8 debe resaltarse con el color de relleno que hemos especificado. También indicamos el rango de celdas en el que queremos aplicar esta condición.

    Después de ejecutar el código anterior, todos los valores de ventas superiores a 8 deberían resaltarse así:

    formateado condicional

Trabajar con Excel en Python: Próximos pasos

Hemos cubierto mucho terreno en este tutorial, empezando por los aspectos básicos del uso de la biblioteca Openpyxl hasta la realización de operaciones más avanzadas como la creación de gráficos y el formateo de hojas de cálculo en Python.

Por sí solos, Python y Excel son potentes herramientas de manipulación de datos que se utilizan para construir modelos predictivos, elaborar informes analíticos y realizar cálculos matemáticos.

La mayor ventaja de Excel es que lo utiliza casi todo el mundo. Desde las partes interesadas no técnicas hasta las personas de nivel básico, los empleados de todos los niveles entienden los informes presentados en una hoja de cálculo Excel. 

Python, por su parte, se utiliza para analizar y construir modelos sobre grandes cantidades de datos. Puede ayudar a los equipos a automatizar tareas laboriosas y mejorar la eficacia organizativa.

Cuando Excel y Python se utilizan juntos, se pueden recortar horas a los flujos de trabajo de una empresa, al tiempo que se mantiene una interfaz con la que todos los miembros de la organización están familiarizados.

Ahora que ya sabes cómo se puede utilizar Openpyxl para trabajar con hojas de Excel, aquí tienes algunas formas de llevar este nuevo conocimiento más allá y utilizarlo para añadir valor a tus flujos de trabajo existentes:

  1. Practica con conjuntos de datos más grandes

    El conjunto de datos que hemos utilizado anteriormente sólo tiene unas 16 000 filas, mientras que Openpyxl puede manejar cantidades mucho mayores utilizando los modos optimizados de la biblioteca. Si tu objetivo es realizar operaciones en grandes libros de Excel con rapidez, puedes practicar utilizando Openpyxl en sus modos optimizados de lectura y escritura.
  2. Haz un curso online

    Aunque hemos cubierto los fundamentos del trabajo con Excel en Python, hay muchos conceptos que estaban fuera del alcance de este curso, como el trabajo con varias hojas de Excel, la creación de tablas dinámicas y el resumen de grandes cantidades de datos.

    Te sugerimos que sigas el curso Python para usuarios de hojas de cálculo de DataCamp para cubrir algunas de estas lagunas en tus conocimientos.
  3. Aprende a automatizar flujos de trabajo de Excel en Python

     Como se ha mencionado anteriormente en esta sección, la mayor ventaja de utilizar bibliotecas como Openpyxl es la posibilidad de trabajar con varios libros de trabajo a la vez y programar flujos de trabajo para que no tengan que repetirse muchas veces.

    Puedes intentar crear una función sencilla que itere a través de varios libros de trabajo a la vez y realice algunas de las operaciones tratadas en este tutorial.
  4. Conoce las diferentes bibliotecas

    Aunque Openpyxl es una opción para manipular archivos de Excel con Python, existen alternativas como la biblioteca Pandas, que pueden ayudarte a procesar el contenido de Excel más rápidamente.

    Si el formateo de celdas o trabajar directamente con fórmulas de Excel no es un requisito para ti, Pandas puede ser realmente más fácil de aprender porque tiene mejor documentación y apoyo de la comunidad.

    Puedes seguir nuestro curso Manipulación de datos con Pandas para empezar a aprender sobre la biblioteca hoy mismo. 
Temas

Más información sobre Python y las hojas de cálculo

Course

Python for Spreadsheet Users

4 hr
26.6K
Use your knowledge of common spreadsheet functions and techniques to explore Python!
See DetailsRight Arrow
Start Course
Ver másRight Arrow
Relacionado

tutorial

Tutorial de funciones de Python

Un tutorial sobre funciones en Python que cubre cómo escribir funciones, cómo invocarlas y mucho más.
Karlijn Willems's photo

Karlijn Willems

14 min

tutorial

Tutorial de pandas en Python: la guía definitiva para principiantes

¿Todo preparado para comenzar tu viaje de pandas? Aquí tienes una guía paso a paso sobre cómo empezar.
Vidhi Chugh's photo

Vidhi Chugh

15 min

tutorial

Tutorial de visualización de datos con Python y Tableau

Aprende a utilizar Python para ampliar las funciones de visualización de datos de Tableau.
Abid Ali Awan's photo

Abid Ali Awan

15 min

tutorial

Tutorial sobre la ejecución de scripts de Python en Power BI

Descubre las distintas formas de utilizar Python para optimizar el análisis, la visualización y el modelado de datos en Power BI.
Joleen Bothma's photo

Joleen Bothma

9 min

tutorial

Tutorial de Pandas: DataFrames en Python

Explora el análisis de datos con Python. Los DataFrames de Pandas facilitan la manipulación de tus datos, desde la selección o sustitución de columnas e índices hasta la remodelación de tus datos.
Karlijn Willems's photo

Karlijn Willems

20 min

tutorial

Tutorial sobre cómo trabajar con módulos en Python

Los módulos te permiten dividir partes de tu programa en archivos diferentes para facilitar el mantenimiento y mejorar el rendimiento.

Nishant Kumar

8 min

See MoreSee More