10/02/2025
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.

- Cómo Obtener la Librería Openpyxl en Tu Sistema
- Creando y Manipulando Hojas de Cálculo Básicas
- Gestión de Hojas Dentro de un Libro de Trabajo
- Trabajando con Archivos de Excel Existentes
- Funcionalidades Avanzadas de Manipulación
- Integración con Pandas
- Preguntas Frecuentes sobre Openpyxl
- ¿Qué es Openpyxl en Python?
- ¿Cómo instalo Openpyxl?
- ¿Cómo crear un libro de trabajo en Openpyxl?
- ¿Cómo cargo un libro de trabajo existente en Openpyxl?
- ¿Funciona Openpyxl con archivos .xls (Excel antiguos)?
- ¿Cómo encuentro la versión de Openpyxl que tengo instalada?
- ¿Cómo cierro un libro de trabajo en Openpyxl?
- ¿Cómo resolver el error 'ModuleNotFoundError: No module named 'openpyxl''?
- Conclusión
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 --userEl 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 installcon un signo de exclamación:
!pip install openpyxlEsto 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.

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.activeCuando 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.

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ámetro | Explicación | Valor por Defecto |
|---|---|---|
read_only | Abre el archivo en modo optimizado para lectura. No permite edición. | False |
keep_vba | Determina si se conserva el contenido de VBA (macros). | False |
data_only | Si es True, las celdas con fórmulas solo devolverán su valor calculado, no la fórmula. | False |
keep_links | Si 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ámetro | Explicación |
|---|---|
min_row | El índice de la fila inicial (incluida). |
max_row | El índice de la fila final (incluida). |
min_col | El índice de la columna inicial (incluida). |
max_col | El índice de la columna final (incluida). |
values_only | Si 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.

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.

¿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.
