A short description of ezxl
Project description
EzXl
EzXl is a lightweight Python library for Excel automation via COM (win32com) on Windows — open workbooks, manipulate sheets, interact with the ribbon, and convert between formats, all from a clean Python API.
📦 Installation
Standard
# Create and activate a virtual environment
python -m venv .venv
.venv\Scripts\activate
# Install in development mode
pip install -e ".[dev]"
pywin32 post-install step (mandatory)
Warning: pywin32 requires a post-install script to register COM components. This step is mandatory and must be run once after installation. Skipping it will cause COM dispatch to fail.
python .venv/Scripts/pywin32_postinstall.py -install
Corporate offline environment
In restricted environments without PyPI access, install from local wheel files only. No network requests are made during installation. Configure your pip to point to a local wheel directory:
pip install --no-index --find-links=\\share\wheels -e ".[dev]"
Optional pywinauto backend
To enable the pywinauto GUI automation backend (UIA-based, locale-independent):
pip install -e ".[pywinauto]"
Note: Ensure your Python interpreter bitness (32-bit or 64-bit) matches the installed Excel. COM dispatch will fail on a mismatch. Verify with:
python -c "import struct; print(struct.calcsize('P') * 8)"
🚀 Quick Start
from ezxl import ExcelApp
# Open a workbook and read from a sheet
with ExcelApp(mode="dispatch", visible=True) as xl:
wb = xl.open("C:/reports/budget.xlsx")
sheet = wb.sheet("Summary")
value = sheet.cell("B2").value
print(value)
wb.save()
# Attach to a running Excel instance
with ExcelApp(mode="attach") as xl:
xl.gui.ribbon.execute("FileSave")
🎯 Key Features
- ✅ COM Automation: open, attach, navigate Excel via win32com
- ✅ GUI Interaction: ribbon, menus, dialogs, and SendKeys via win32com
- ✅ Swappable GUI Backends: COM or pywinauto, injected via protocol ABCs
- ✅ File I/O: xlsx↔csv conversion via polars+fastexcel (no Excel required)
- ✅ Closed-file Formatting: colors, fonts, and borders via openpyxl
- ✅ Thread Safety: COM STA model enforced, thread identity checked at construction
- ✅ Full Type Hints: complete typing for IDEs and linters
- ✅ Corporate Ready: offline wheel install, proxy support
📚 Documentation
Full documentation is available online: neuraaak.github.io/ezxl
- 📖 Getting Started – Installation, first steps, and environment setup
- 🎯 API Reference – Complete class and function reference (auto-generated)
- 🏗️ Architecture – Design decisions and component overview
- 💡 Examples – Usage examples for common scenarios
- 🔧 Development – Environment setup and contribution guide
- 🧪 Testing – Test suite documentation (coming in next sprint)
🧪 Testing
# Install dev dependencies
pip install -e ".[dev]"
# Run unit tests (no Excel required)
pytest tests/ -m "not excel"
# Run integration tests (requires local Excel)
pytest tests/ -m excel
Note: Integration tests marked with
@pytest.mark.excelrequire a locally installed Excel instance. They are excluded from CI/CD pipelines and are intended for local verification only.
🛠️ Development Setup
# Clone the repository
git clone https://github.com/neuraaak/ezxl.git
cd ezxl
# Create and activate a virtual environment
python -m venv .venv
.venv\Scripts\activate
# Install in development mode with all dev dependencies
pip install -e ".[dev]"
# Mandatory: register pywin32 COM components
python .venv/Scripts/pywin32_postinstall.py -install
# Set up git hooks
git config core.hooksPath .hooks
See the Development Guide for detailed setup instructions.
🔌 API Overview
🖥️ COM Automation (5)
| Symbol | Description |
|---|---|
ExcelApp |
COM session — dispatch or attach, context manager |
WorkbookProxy |
Workbook open/save/close, sheet access |
SheetProxy |
Sheet navigation, cell access |
CellProxy |
Single cell read/write |
RangeProxy |
Range selection and bulk operations |
🎛️ GUI Interaction (4)
| Symbol | Description |
|---|---|
GUIProxy |
Unified GUI facade with swappable backends |
RibbonProxy |
Ribbon execution and state via COM |
MenuProxy |
Legacy CommandBar traversal via COM |
DialogProxy |
File pickers and alerts via COM |
🔌 GUI Backends — pywinauto (4)
| Symbol | Description |
|---|---|
PywinautoRibbonBackend |
Ribbon via keyboard shortcuts (locale-independent) |
PywinautoMenuBackend |
Menu traversal via UIA |
PywinautoDialogBackend |
File pickers via UIA + Win32 |
PywinautoKeysBackend |
Keystroke injection via pywinauto |
📂 File I/O (5)
| Symbol | Description |
|---|---|
read_excel |
Read xlsx into a polars DataFrame |
read_csv |
Read csv into a polars DataFrame |
xlsx_to_csv |
Convert xlsx to csv (no Excel required) |
csv_to_xlsx |
Convert csv to xlsx (no Excel required) |
ExcelFormatter |
Closed-file formatting (colors, fonts, borders) |
📦 Dependencies
- pywin32>=306 — COM driver (
win32com.client), Windows-only - polars>=1.0.0 — DataFrame I/O engine
- fastexcel>=0.11.0 — Fast xlsx reader (Rust binding)
- xlsxwriter>=3.0.0 — xlsx write backend for polars
- openpyxl>=3.1.0 — Closed-file formatting
- ezplog>=2.0.0 — Structured logging
Optional:
- pywinauto>=0.6.8 — UI Automation backend (locale-independent GUI interaction)
📄 License
MIT License – See LICENSE file for details.
🔗 Links
- Repository: https://github.com/neuraaak/ezxl
- Issues: GitHub Issues
- Documentation: neuraaak.github.io/ezxl
- Changelog: docs/changelog.md
ezxl — Excel automation made simple, reliable, and Pythonic. 🐍
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ezxl-1.1.0.tar.gz.
File metadata
- Download URL: ezxl-1.1.0.tar.gz
- Upload date:
- Size: 192.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2ff806ea9087727ab337ab6aff4b4600227963bc7ab570d67b3d08587046532d
|
|
| MD5 |
0f33adf55c68bc218bce690df2fa70a2
|
|
| BLAKE2b-256 |
a1d4557a0930496c73b80b2ffafcdf6373fdf4fe267fc4fdb3dc6e329a78a5a5
|
File details
Details for the file ezxl-1.1.0-py3-none-any.whl.
File metadata
- Download URL: ezxl-1.1.0-py3-none-any.whl
- Upload date:
- Size: 63.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
358964b279a3bab570d8087402895ce8bc8581a5a58561eebf272f243e4d95b1
|
|
| MD5 |
27121efd624bb7e1cda5f16187fc049e
|
|
| BLAKE2b-256 |
313de21c85dc472d0926fbc15e14ca777d0204bb5ee8bb0725542116a1c8f0c6
|