openpyxl
A Python library to read/write Excel 2010 xlsx/xlsm files
Decision gist · record as of 2026-08-14
Yes, for stable, low-friction Excel I/O in Python. openpyxl is widely used, has no known vulnerabilities, and requires only one dependency. The dormant maintenance status is acceptable for a Production/Stable library handling a mature file format, but you should not expect rapid fixes for edge cases or new Excel features. If you need active development or advanced features, verify the package meets your specific xlsx variant and Python version requirements first.AI-flagged interpretation of the facts on this page — verify before relying
Before you install
- The package does not guard against XML attacks (quadratic blowup, billion laughs) by default; install defusedxml separately if processing untrusted Excel files.
- Installation is straightforward with a single runtime dependency (et-xmlfile) and a pure-Python wheel.
- The package is dormant (last release 777 days ago) but marked Production/Stable; users should expect no active maintenance or rapid bug fixes.
License · maintenance · safety
MIT (permissive) — MIT license is permissive, allowing commercial and private use with minimal restrictions. You may use, modify, and distribute openpyxl freely as long as you retain the license notice.
last release 2024-06-28 (777 days)
0 known vulnerabilities (OSV.dev, 2026-08-14) · 350,917,515 downloads/mo, #117 on PyPI
Alternatives
Verify before relying
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws['A1'] = 42
ws.append([1, 2, 3])
wb.save('sample.xlsx')- Whether dormant status (777 days since last release) affects compatibility with recent Excel versions or Python patch releases.
- Performance characteristics when handling large spreadsheets or complex formulas.
- Extent of xlsm macro support and any limitations in formula preservation.
What it is and what it does
openpyxl is a Python library for reading and writing Excel 2010 format files (xlsx, xlsm, xltx, xltm). It implements the Office Open XML standard natively in Python, eliminating the need for external Excel installations or COM libraries. The package handles cell assignment, row/column operations, data type conversion, and file I/O through a straightforward API.
The library depends only on et-xmlfile for XML handling and supports Python 3.6 through 3.11. It is marked Production/Stable but has entered dormancy (no releases in 777 days), meaning it receives no active maintenance. The documentation notes that by default openpyxl does not protect against XML denial-of-service attacks; users handling untrusted files should install defusedxml separately.
Use it for
- Automate generation of Excel reports from Python data sources or database queries.
- Parse and extract data from existing xlsx files for analysis or transformation.
- Build spreadsheet templates programmatically with formulas, formatting, and multiple sheets.
- Batch process multiple Excel files without requiring Excel or LibreOffice to be installed.
- Convert data between Excel and other formats (CSV, JSON, databases) in data pipelines.
Worth the install?
AI-flagged interpretation of the facts on this page. Verify before relying on it.
Yes, for stable, low-friction Excel I/O in Python.
openpyxl is widely used, has no known vulnerabilities, and requires only one dependency. The dormant maintenance status is acceptable for a Production/Stable library handling a mature file format, but you should not expect rapid fixes for edge cases or new Excel features. If you need active development or advanced features, verify the package meets your specific xlsx variant and Python version requirements first.
Install
openpyxl on PyPI
Before you install
Installation is straightforward with a single runtime dependency (et-xmlfile) and a pure-Python wheel. The package is dormant (last release 777 days ago) but marked Production/Stable; users should expect no active maintenance or rapid bug fixes.
The package does not guard against XML attacks (quadratic blowup, billion laughs) by default; install defusedxml separately if processing untrusted Excel files.
License in practice
MIT license is permissive, allowing commercial and private use with minimal restrictions. You may use, modify, and distribute openpyxl freely as long as you retain the license notice.
Quickstart
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws['A1'] = 42
ws.append([1, 2, 3])
wb.save('sample.xlsx')
Verify before relying
- Whether dormant status (777 days since last release) affects compatibility with recent Excel versions or Python patch releases.
- Performance characteristics when handling large spreadsheets or complex formulas.
- Extent of xlsm macro support and any limitations in formula preservation.
Package facts
| License | MIT permissive |
| Python support | Supports the current Python release >=3.8 |
| Install friction | Low. Pure-Python wheel |
| Runtime dependencies | 1 packageet-xmlfile |
| Maintenance | Dormant 777 days since the last release |
| First released | |
| Downloads | 350,917,515 / month, #117 on PyPI 30-day window, as of 2026-08-14 |
| Known vulnerabilities | None known OSV.dev, checked 2026-08-14 |
| Classifiers | Development Status :: 5 - Production/StableLicense :: OSI Approved :: MIT LicenseOperating System :: MacOS :: MacOS XOperating System :: Microsoft :: WindowsOperating System :: POSIXProgramming Language :: PythonProgramming Language :: Python :: 3.10Programming Language :: Python :: 3.11Programming Language :: Python :: 3.6Programming Language :: Python :: 3.7Programming Language :: Python :: 3.8Programming Language :: Python :: 3.9 |
Evidence: openpyxl-3.1.5-py2.py3-none-any.whl
Tags
Let your AI agent find packages like this
Example. Real query, live index.
You found this page by searching. An agent finds it by wishing: SkillFed indexes 14,416 PyPI packages by what they can do, searchable in plain language.
wish › “create modify excel workbooks”
- openpyxlopenpyxl reads and writes Excel 2010 xlsx/xlsm/xltx/xltm files…
- xlutilsxlutils provides utilities for reading, writing, copying, and…
- excel-mcp-serverProvides a Model Context Protocol server that enables AI agents to…
Give your agent the search over MCP, or paste the wish link into any chat.
Similar packages
PyExcelerate writes Excel XLSX spreadsheet files from Python with an emphasis on speed, offering multiple performance tiers for bulk data, cell-by-cell writes, and styling operations.
Reads and writes Microsoft Excel files (.xlsx, .xlsm) and CSV files with zero external dependencies, using only Python standard library.
Provides dictionary-like read and write access to Excel worksheets through openpyxl, letting you treat spreadsheet rows as structured data objects.
However, be aware that maintenance is inactive—if you encounter bugs or need compatibility updates, you may need to fork or switch to openpyxl directly.
Reads data from Excel spreadsheet files (.xls and .xlsx formats) and extracts cell values, sheet metadata, and row/column information for programmatic access.
XlsxWriter creates Excel 2007+ XLSX files from Python, supporting text, numbers, formulas, charts, images, and formatting without external dependencies.
Adds an Excel spreadsheet (xlsx) renderer to Django REST Framework, allowing API views to export data directly as formatted Excel files using OpenPyXL.
Install it if you need to export API data to Excel.
See also xlwings · aspose-cells-python · pycel · pyexcel-xlsx