Openpyxl Parity Limitations¶
This page lists the current openpyxl-parity truth in WolfXL so you can
evaluate fit before migrating. There are no known partial or not_yet
rows for the tracked openpyxl-supported API surface in the generated
compatibility matrix. Surfaces that openpyxl itself does not expose
(.xlsb/.xls writes, .ods, VBA authoring, standalone table-driven
slicer authoring) are wolfxl-extras tracked in the internal
Plans/openpyxl-parity-program.md;
they are not openpyxl parity gaps. The machine-checked source of truth is
compatibility-matrix.md.
Current caveat¶
| Feature | Read | Write | Modify | Notes |
|---|---|---|---|---|
| Pivot cache record regeneration after layout edits | Yes | Excel refresh | Refresh | WolfXL can mutate existing pivot source ranges, row/column/page field placement, page-field selection, and data-field aggregation. Layout edits stamp refreshOnLoad="1" and let Excel regenerate derived cache records on open rather than recalculating pivotCacheRecords inside WolfXL. This is not an openpyxl advantage: openpyxl preserves existing pivot parts but does not provide a public cache-record regeneration engine either. |
| Pivot-table styling beyond PivotArea and pivot-CF | Limited | Limited | Limited | PivotArea formats and pivot-scoped conditional formatting are covered, but broader pivot themes and banded-format polish remain limited. Keep a file-specific Excel review in the loop if that visual styling is business-critical. |
| External-link cached data is not dereferenced | Yes | Cached data only | Cached data only | WolfXL preserves and writes cached external-link data when it is provided, but it does not follow linked workbooks to refresh those values. Refresh linked-workbook values in Excel or in the system that owns the linked workbook. |
"Refresh" means the edited workbook opens cleanly and Excel refreshes derived cache data when needed.
API surface gaps vs openpyxl¶
None known in the tracked matrix/oracle. Any future claim of an
openpyxl-supported gap should be added to
_compat_spec.py as partial or not_yet
with a failing oracle probe before being documented here.
Performance claim guardrails¶
- Speedup numbers (3-5x) are measured on Apple Silicon with ExcelBench. Your results will vary with workload shape, file complexity, and hardware.
- Modify mode (10-14x) is measured on files where only a small fraction of cells change. The advantage shrinks as the edit ratio approaches 100%.
- Always validate on your own files before committing to a migration.
Integrity guidance¶
- Use reproducible fixtures and benchmarks for acceptance testing.
- Before public releases, run the local external-oracle fixture pack generated by ExcelBench. It currently exercises Excelize, ClosedXML, NPOI, ExcelJS, and Apache POI outputs through LibreOffice and WolfXL preservation checks.
- Review output workbooks in Excel for business-critical templates.
- WolfXL's fidelity is tracked by ExcelBench — check the dashboard for current scores.
- When sharing numbers externally, check Public Evidence Status first so historical snapshots are not presented as current release evidence.