¿Cómo obtener la librería openpyxl?

Openpyxl: Domina Excel con Python sin Esfuerzo

10/02/2025

Valoración: 4.12 (3606 votos)

En el vasto universo de la programación, Python se erige como un lenguaje de propósito general que rara vez necesita presentación. Concebido por Guido Van Rossum y lanzado por primera vez en 1991, ha evolucionado hasta convertirse en una herramienta indispensable para desarrolladores de todos los niveles. Una de sus mayores fortalezas radica en su ecosistema de librerías, y cuando se trata de interactuar con hojas de cálculo de Excel, Openpyxl brilla con luz propia. Esta potente biblioteca te permite crear, leer y modificar archivos Excel (.xlsx) de manera programática, abriendo un sinfín de posibilidades para la automatización de datos y la generación de informes.

¿Qué es openpyxl en Python?
Python es un lenguaje de programación versátil que ofrece muchas herramientas para trabajar con hojas de cálculo. En este tutorial, exploraremos cómo llevar a cabo la manipulación avanzada de hojas de cálculo utilizando la biblioteca Openpyxl en Python.
Índice de Contenido

Cómo Obtener la Librería Openpyxl en Tu Sistema

Para comenzar a trabajar con Openpyxl, el primer paso es instalarla en tu entorno de Python. Afortunadamente, existen varios métodos sencillos para lograrlo, adaptándose a diferentes sistemas operativos y preferencias de usuario.

Instalación a Través del Gestor de Paquetes del Sistema

Si eres usuario de Linux, es posible que Openpyxl esté disponible directamente en los repositorios de tu distribución. Esta es una forma conveniente de instalar la librería, ya que se integra con el sistema de paquetes de tu OS.

  • Debian y derivados (Ubuntu, Mint):
    sudo apt install python3-openpyxl
  • Fedora:
    sudo dnf install python3-openpyxl
  • Archlinux:
    sudo pacman -S python-openpyxl

Estos comandos son específicos para cada distribución. Sin embargo, existe un método más universal y recomendado para instalar librerías de Python.

Instalación con Pip: El Gestor de Paquetes de Python

La forma más común y versátil de instalar Openpyxl (o cualquier otra biblioteca de Python) es utilizando pip, el gestor de paquetes de Python. Asegúrate de tener pip instalado en tu sistema; generalmente viene con las versiones modernas de Python.

Para instalar Openpyxl utilizando pip, simplemente ejecuta el siguiente comando en tu terminal:

pip install openpyxl --user

El uso de la opción --user es una buena práctica, ya que instala el paquete solo para tu usuario, evitando conflictos con las instalaciones del sistema y sin requerir privilegios administrativos. Una vez completada la instalación, estarás listo para sumergirte en el mundo de la manipulación de hojas de cálculo con Python.

Configuración en Entornos de Desarrollo (IDE)

Si utilizas un IDE como PyCharm o entornos interactivos como Jupyter Notebook, la instalación es igualmente sencilla:

  • En PyCharm: Puedes configurar las librerías para tu proyecto yendo a Archivo > Configuración > Proyecto > Intérprete de proyectos. Allí, puedes hacer clic en el botón '+' para buscar y añadir 'openpyxl' desde los paquetes disponibles, o seleccionar 'Heredar paquetes de sitios globales' si ya lo instalaste con pip globalmente.
  • En Jupyter Notebook: Para instalar Openpyxl directamente en una celda de Jupyter, simplemente antepón el comando pip install con un signo de exclamación:
!pip install openpyxl

Esto instalará la librería automáticamente la primera vez que ejecutes la celda.

Creando y Manipulando Hojas de Cálculo Básicas

Una vez que Openpyxl está instalado, podemos empezar a explorar sus funcionalidades. El primer paso lógico es aprender a crear un nuevo libro de trabajo en memoria.

¿Cómo instalar openpyxl en Jupyter?
¿Cómo instalar openpyxl en un cuaderno Jupyter? Para instalar cualquier paquete en un cuaderno Jupyter, puede anteponer el !pip install my_package declaración con el signo de exclamación "!" . Esto también funciona para la biblioteca openpyxl: Esto instala automáticamente la biblioteca openpyxl cuando la celda se ejecuta por primera vez.

Creación de un Libro de Trabajo en Memoria

Para crear un libro de trabajo, todo lo que necesitas es importar la clase Workbook de Openpyxl. Al instanciar esta clase, se crea automáticamente una nueva hoja de cálculo por defecto, a la cual puedes acceder a través de la propiedad active:

from openpyxl import Workbook # Crear un nuevo libro de trabajo workbook = Workbook() # Acceder a la hoja de cálculo activa (la primera por defecto) spreadsheet = workbook.active

Cuando se crea una hoja de cálculo nueva, inicialmente no contiene celdas. Estas se generan sobre la marcha a medida que las accedes o les asignas valores, optimizando el uso de memoria.

Acceso y Asignación de Valores a Celdas

Puedes referenciar una celda de la hoja de cálculo de manera similar a una clave de diccionario, o usando el método cell(). Por ejemplo, para obtener o asignar un valor a la celda 'A1':

# Asignar un valor a la celda 'A1' spreadsheet['A1'] = 'Hola Mundo' # Obtener el valor de la celda 'A1' a1_value = spreadsheet['A1'].value print(f'El valor en A1 es: {a1_value}') # Alternativa usando el método cell() spreadsheet.cell(row=1, column=2, value='Python es genial') b1_value = spreadsheet.cell(row=1, column=2).value print(f'El valor en B1 es: {b1_value}')

Es importante recordar usar .value al final para obtener el contenido real de la celda, no el objeto celda en sí.

Guardar el Libro de Trabajo

Para guardar la hoja de cálculo que has creado o modificado, simplemente utiliza el método save() del objeto Workbook, pasando el nombre del archivo de destino como argumento:

# Guardar el libro de trabajo como 'mi_hoja.xlsx' workbook.save('mi_hoja.xlsx')

Este comando creará un archivo con el nombre especificado en tu sistema de archivos, conteniendo todos los cambios que hayas realizado.

Gestión de Hojas Dentro de un Libro de Trabajo

Un libro de trabajo de Excel puede contener múltiples hojas, y Openpyxl ofrece métodos para gestionarlas eficientemente.

Añadir Nuevas Hojas

Para añadir una nueva hoja a tu libro de trabajo, usa el método create_sheet() del objeto Workbook. Puedes especificar un título y una posición (índice) opcionales:

# Crear una nueva hoja con título 'Datos' new_sheet = workbook.create_sheet('Datos') # Crear otra hoja en la primera posición (índice 0) con título 'Resumen' summary_sheet = workbook.create_sheet('Resumen', 0)

Puedes acceder a las hojas por su título o por su índice (usando workbook.worksheets[index]).

Copiar y Mover Hojas

Openpyxl te permite duplicar hojas existentes y reorganizarlas dentro del libro de trabajo:

  • Copiar una hoja: Utiliza copy_worksheet(), pasando el objeto de la hoja a copiar:
# Copiar la hoja activa sheet_copy = workbook.copy_worksheet(workbook.active)
  • Mover una hoja: Usa move_sheet(), especificando la hoja y el desplazamiento (posición):
# Mover la hoja 'Datos' a la segunda posición (índice 1) workbook.move_sheet(workbook['Datos'], 1)

Puedes obtener una lista de todas las hojas de un libro de trabajo a través de la propiedad workbook.worksheets.

Eliminar una Hoja

Para eliminar una hoja, usa el método remove() del objeto Workbook. Este método acepta el objeto de la hoja que deseas eliminar:

# Eliminar la hoja 'Datos' workbook.remove(workbook['Datos'])

Ten precaución, ya que la eliminación es permanente y no recuperable.

¿Cómo usar fórmulas en openpyxl?
Usar fórmulas con openpyxl es tan simple como editar el valor de una celda. Puede ver la lista de fórmulas admitidas por openpyxl: >>> from openpyxl.utils import FORMULAE >>> FORMULAE frozenset ( {'ABS', 'ACCRINT', 'ACCRINTM', 'ACOS', 'ACOSH', 'AMORDEGRC', 'AMORLINC', 'AND', ...

Trabajando con Archivos de Excel Existentes

Además de crear nuevos libros, Openpyxl es excelente para leer y modificar archivos Excel ya existentes.

Cargar un Libro de Trabajo desde un Archivo

Para abrir un archivo de Excel existente, utiliza la función load_workbook(), pasando la ruta del archivo como argumento:

from openpyxl import load_workbook # Cargar un libro de trabajo existente workbook = load_workbook('mi_hoja.xlsx')

La función load_workbook() también acepta parámetros opcionales que son útiles para controlar cómo se carga el archivo:

ParámetroExplicaciónValor por Defecto
read_onlyAbre el archivo en modo optimizado para lectura. No permite edición.False
keep_vbaDetermina si se conserva el contenido de VBA (macros).False
data_onlySi es True, las celdas con fórmulas solo devolverán su valor calculado, no la fórmula.False
keep_linksSi se deben conservar los vínculos a libros externos.True

Acceso a Rangos de Celdas

Para obtener los valores de un rango de celdas, puedes especificar el rango utilizando la sintaxis de Excel (ej. 'A1:D1'). El resultado será una tupla de tuplas, donde cada tupla interna representa una fila del rango:

# Acceder a un rango de celdas (A1 a D1) cell_values = spreadsheet['A1':'D1'] # Acceder a un rango de celdas que abarca múltiples filas y columnas (A1 a D3) cell_values_multi = spreadsheet['A1':'D3']

También puedes acceder a columnas o filas completas simplemente especificando el nombre de la columna o el número de la fila:

  • Todas las celdas de la columna 'A':cells = spreadsheet['A']
  • Todas las celdas de las columnas 'A' a 'D':cells = spreadsheet['A':'D']
  • Todas las celdas de las dos primeras filas:cells = spreadsheet[1:3]

Iteración sobre Filas y Columnas

Los métodos iter_rows() y iter_cols() son muy útiles para recorrer datos dentro de un rango específico, devolviendo los objetos celda organizados por filas o columnas, respectivamente.

ParámetroExplicación
min_rowEl índice de la fila inicial (incluida).
max_rowEl índice de la fila final (incluida).
min_colEl índice de la columna inicial (incluida).
max_colEl índice de la columna final (incluida).
values_onlySi es True, devuelve solo los valores de las celdas, no los objetos celda.
# Iterar sobre las primeras 3 filas y 5 columnas, organizadas por fila for row_cells in spreadsheet.iter_rows(min_row=1, max_row=3, min_col=1, max_col=5): for cell in row_cells: print(cell.value) # Iterar sobre las mismas celdas, organizadas por columna for col_cells in spreadsheet.iter_cols(min_row=1, max_row=3, min_col=1, max_col=5): for cell in col_cells: print(cell.value)

Para iterar sobre todas las filas o columnas de la hoja, puedes usar los atajos sheet.rows y sheet.columns.

Funcionalidades Avanzadas de Manipulación

Openpyxl va más allá de la simple lectura y escritura, ofreciendo herramientas para formatear, estilizar y agregar elementos complejos a tus hojas de cálculo.

Agregar Fórmulas

Una de las características más potentes de Excel son las fórmulas. Con Openpyxl, puedes asignar fórmulas a las celdas de la misma manera que asignas valores, simplemente anteponiendo el signo '=':

# Calcular el promedio de las celdas H2 a H100 y colocarlo en P2 sheet['P2'] = '=AVERAGE(H2:H100)' # Contar celdas con valor mayor a 0 en el rango I2:I100 y colocarlo en P3 sheet['P3'] = '=COUNTIF(I2:I100, ">0")' workbook.save('formulas_ejemplo.xlsx')

Asegúrate de que las cadenas dentro de la fórmula estén correctamente escapadas o encerradas en comillas dobles si es necesario. Openpyxl soporta una amplia gama de fórmulas estándar de Excel.

Aplicar Estilos

Puedes personalizar la apariencia de tus celdas y hojas de cálculo utilizando las clases de estilo de Openpyxl, como Font, Color, Alignment, Border y Side. Puedes aplicar estilos directamente a celdas individuales o crear plantillas de estilo reutilizables con NamedStyle.

from openpyxl.styles import Font, Alignment, Border, Side, NamedStyle # Crear estilos bold_font = Font(bold=True) big_red_text = Font(color="00FF0000", size=20) center_aligned_text = Alignment(horizontal="center") square_border = Border(top=Side(border_style="double"), bottom=Side(border_style="double"), left=Side(border_style="double"), right=Side(border_style="double")) # Aplicar estilos a celdas específicas sheet["A2"].font = bold_font sheet["A3"].font = big_red_text sheet["A4"].alignment = center_aligned_text sheet["A5"].border = square_border # Crear una plantilla de estilo para el encabezado header_style = NamedStyle(name="header_style") header_style.font = Font(bold=True) header_style.border = Border(bottom=Side(border_style="thin")) header_style.alignment = Alignment(horizontal="center", vertical="center") # Aplicar la plantilla a la primera fila for cell in sheet[1]: cell.style = header_style workbook.save('estilos_ejemplo.xlsx')

Formato Condicional

El formato condicional permite aplicar estilos dinámicamente según el valor de las celdas. Esto es increíblemente útil para resaltar datos importantes o patrones.

¿Cómo crear un libro de trabajo en openpyxl?
Para crear un libro de trabajo, primero tenemos que importar el libro de trabajo desde la biblioteca Openpyxl usando el siguiente comando: Creemos un objeto de libro de trabajo. Podemos usar este objeto para manejar todas las acciones que deben realizarse, como leer, escribir, etc.
from openpyxl.styles import PatternFill from openpyxl.styles.differential import DifferentialStyle from openpyxl.formatting.rule import Rule, ColorScaleRule, IconSetRule, DataBarRule # Regla de fondo rojo para valores menores a 3 en la columna H red_background = PatternFill(fgColor="00FF0000") diff_style = DifferentialStyle(fill=red_background) rule = Rule(type="expression", dxf=diff_style) rule.formula = ["$H1<3"] sheet.conditional_formatting.add("A1:O100", rule) # Escala de color para la columna H (ej. de rojo a verde) color_scale_rule = ColorScaleRule(start_type="min", start_color="00FF0000", end_type="max", end_color="0000FF00") sheet.conditional_formatting.add("H2:H100", color_scale_rule) # Conjunto de iconos (ej. flechas) para la columna H icon_set_rule = IconSetRule("5Arrows", "num", [1, 2, 3, 4, 5]) sheet.conditional_formatting.add("H2:H100", icon_set_rule) # Barras de datos para la columna H data_bar_rule = DataBarRule(start_type="num", start_value=1, end_type="num", end_value="5", color="0000FF00") sheet.conditional_formatting.add("H2:H100", data_bar_rule) workbook.save('formato_condicional_ejemplo.xlsx')

Creación de Gráficos

Openpyxl te permite incrustar una variedad de gráficos directamente en tus hojas de cálculo, como gráficos de barras, líneas o circulares. Necesitarás importar las clases de gráficos (ej. BarChart, LineChart) y Reference para definir los datos del gráfico.

from openpyxl.chart import BarChart, LineChart, Reference # Datos de ejemplo rows = [ ["Producto", "Online", "Tienda"], [1, 30, 45], [2, 40, 30], [3, 40, 25], [4, 50, 30], [5, 30, 25], ] for row in rows: sheet.append(row) # Crear un gráfico de barras chart = BarChart() data = Reference(worksheet=sheet, min_row=1, max_row=6, min_col=2, max_col=3) chart.add_data(data, titles_from_data=True) sheet.add_chart(chart, "E2") # Crear un gráfico de líneas (ejemplo con datos generados aleatoriamente) # ... (código para generar datos y agregar a la hoja) line_chart = LineChart() line_data = Reference(worksheet=sheet, min_row=2, max_row=4, min_col=1, max_col=13) line_chart.add_data(line_data, titles_from_data=True, from_rows=True) cats = Reference(worksheet=sheet, min_row=1, max_row=1, min_col=2, max_col=13) line_chart.set_categories(cats) line_chart.x_axis.title = "Meses" line_chart.y_axis.title = "Ventas (por unidad)" line_chart.style = 24 # Aplicar un estilo predefinido sheet.add_chart(line_chart, "C6") workbook.save('graficos_ejemplo.xlsx')

La personalización de gráficos es extensa, permitiendo añadir títulos a los ejes, cambiar estilos y mucho más.

Integración con Pandas

Si trabajas con la librería Pandas para análisis de datos, te alegrará saber que Openpyxl se integra perfectamente. Puedes convertir datos de un DataFrame de Pandas a un libro de trabajo de Openpyxl y viceversa.

import pandas as pd from openpyxl.utils.dataframe import dataframe_to_rows # Crear un DataFrame de Pandas de ejemplo data = {"Producto": ["Producto A", "Producto B"], "Ventas Mes 1": [100, 150]} df = pd.DataFrame(data) # Convertir DataFrame a hoja de cálculo Openpyxl workbook_pandas = Workbook() sheet_pandas = workbook_pandas.active for r in dataframe_to_rows(df, index=False, header=True): sheet_pandas.append(r) workbook_pandas.save("pandas_to_excel.xlsx") # Convertir hoja de cálculo Openpyxl a DataFrame de Pandas loaded_workbook = load_workbook(filename="pandas_to_excel.xlsx") loaded_sheet = loaded_workbook.active excel_data = loaded_sheet.values df_from_excel = pd.DataFrame(excel_data) # Si tienes encabezados, puedes asignarlos headers = next(loaded_sheet.values) df_from_excel_with_headers = pd.DataFrame(loaded_sheet.values, columns=headers) print(df_from_excel_with_headers.head())

Esta interoperabilidad es crucial para flujos de trabajo que combinan el análisis de datos con la generación de informes en Excel.

Preguntas Frecuentes sobre Openpyxl

A continuación, respondemos algunas de las preguntas más comunes sobre la utilización de Openpyxl.

¿Qué es Openpyxl en Python?

Openpyxl es una biblioteca de Python que permite leer, escribir y modificar archivos de hojas de cálculo de Excel en formato .xlsx (y sus variantes como .xlsm, .xltx, .xltm). Es una herramienta esencial para la automatización de tareas relacionadas con datos tabulares.

¿Cómo instalo Openpyxl?

La forma más común es usando pip: pip install openpyxl. Para una instalación específica de usuario, se recomienda pip install openpyxl --user. En Jupyter Notebook, usa !pip install openpyxl.

¿Qué es la automatización de Python?
Puntos clave: La automatización de Python se refiere al uso del lenguaje de programación Python para crear scripts o programas que realizan tareas o acciones repetitivas de forma automática, a menudo ahorrando tiempo y esfuerzo en diversas aplicaciones, como pruebas de software, procesamiento de datos o administración de sistemas.

¿Cómo crear un libro de trabajo en Openpyxl?

Para crear un nuevo libro de trabajo, importa la clase Workbook y crea una instancia: from openpyxl import Workbook; workbook = Workbook(). Luego puedes guardar el libro con workbook.save('nombre_archivo.xlsx').

¿Cómo cargo un libro de trabajo existente en Openpyxl?

Utiliza la función load_workbook: from openpyxl import load_workbook; workbook = load_workbook('ruta/a/tu_archivo.xlsx').

¿Funciona Openpyxl con archivos .xls (Excel antiguos)?

No, Openpyxl no es compatible con el formato de archivo .xls antiguo. Está diseñado específicamente para el formato .xlsx (y sus variantes) introducido con Microsoft Excel 2007 y posteriores. Para archivos .xls, se recomienda usar librerías como xlrd o convertir el archivo a .xlsx.

¿Cómo encuentro la versión de Openpyxl que tengo instalada?

Abre tu terminal o símbolo del sistema y ejecuta pip show openpyxl. Esto mostrará información detallada sobre la instalación, incluyendo la versión.

¿Cómo cierro un libro de trabajo en Openpyxl?

Si abres un libro de trabajo en modo de solo lectura o solo escritura, puedes usar workbook_object.close(). Sin embargo, para la mayoría de las operaciones de lectura/escritura estándar, Openpyxl maneja el cierre automáticamente al guardar el archivo o cuando el objeto del libro de trabajo deja de estar referenciado.

¿Cómo resolver el error 'ModuleNotFoundError: No module named 'openpyxl''?

Este error indica que la librería Openpyxl no está instalada en el entorno de Python que estás utilizando. Asegúrate de haberla instalado correctamente con pip install openpyxl. Si tienes varias versiones de Python, verifica que estés instalando en la versión correcta (ej. pip3 install openpyxl para Python 3).

Conclusión

En este exhaustivo tutorial, hemos explorado a fondo la biblioteca Openpyxl, una herramienta indispensable para cualquier desarrollador de Python que necesite interactuar con hojas de cálculo de Excel. Aprendimos a instalarla, a crear y manipular libros de trabajo en memoria y desde archivos existentes. Cubrimos la gestión de hojas, el acceso a celdas y rangos, y la iteración eficiente de datos. Además, nos adentramos en funcionalidades avanzadas como la inserción de fórmulas, la aplicación de estilos y formato condicional, y la creación de atractivos gráficos. Finalmente, vimos cómo Openpyxl se integra con la popular librería Pandas, facilitando aún más el procesamiento de datos. Con este conocimiento, estás equipado para automatizar tareas repetitivas en Excel, generar informes dinámicos y transformar la manera en que manejas tus datos, llevando tus habilidades de programación al siguiente nivel.

Si quieres conocer otros artículos parecidos a Openpyxl: Domina Excel con Python sin Esfuerzo puedes visitar la categoría Librerías.

Subir