Component · for humans & their agents
openpyxl Formula Loss Verdict
verified · first-partyactively maintained$0 during beta (was $39)
load_workbook(data_only=True) reads every formula as None on any file Excel never saved -- and saving writes the None back, emptying the formulas permanently.
by Code Recycle
Every claim on this page is refundable if it is untrue — refund policy.
Verified: 30 tests
Decides, BEFORE you write, whether an openpyxl load/save path will silently destroy the formulas in a spreadsheet. Pure function over facts you already have: no I/O, no file access, and no dependency on openpyxl itself.
Decides, BEFORE you write, whether an openpyxl load/save path will silently destroy the formulas in a spreadsheet. Pure function over facts you already have: no I/O, no file access, and no dependency on openpyxl itself.
Built for openpyxl 3.1.5 (MIT). Not affiliated with or endorsed by the openpyxl project.
THE SILENT FAILURE. `load_workbook(data_only=True)` is the ordinary way to read VALUES out of a spreadsheet, and it is recommended constantly. openpyxl does not evaluate formulas -- with data_only it returns the result the last application CACHED in the file. Excel caches results. openpyxl, xlsxwriter and pandas do not; they write formula text and nothing else. So for any file Excel has never saved, every formula cell reads as None.
Nothing is raised. The workbook opens, the sheet names are right, the constants are right, and the formula cells hand you None where you expected numbers. A total computed from those reads is computed from nothing.
AND THEN YOU SAVE IT. The None values are written back. The formulas are gone from the file permanently, the cells are blank, and the file still opens cleanly in Excel.
THE EXCEL CASE IS THE ONE THAT IS EASY TO MISS, and it is reported too. An Excel-written file reads the RIGHT values, so the read looks perfect -- but data_only discards the formula TEXT, so saving writes only the cached numbers. The workbook now holds constants where it held formulas and silently stops recalculating. Nothing warns about that either.
IT REFUSES RATHER THAN GUESSES. The common real case is an uploaded file whose origin nobody knows, and the two possibilities have opposite consequences, so the verdict names the missing fact and says what the answer is under each. It also stays SAFE for a default load even when nothing is known, because a tool that warns about everything is ignored within a week and then absent for the case that mattered.
MEASURED, NOT RECALLED, and it ships the measurement scripts. This package was started on a different hypothesis -- that a plain round trip drops charts, images, comments and conditional formatting. It does NOT. A workbook carrying a chart, a comment, conditional formatting, data validation, a defined name, a merged cell, a frozen pane and an autofilter survived load-and-save with every one intact and zero archive parts missing. The first script found nothing; the second found the real defect. The README states plainly that the first claim is not made.
Also reported: keep_vba, since a .xlsm saved without it loses its macros -- as a separate finding with its own remedy, ordered AFTER the formula loss, because a caller who reads only the first finding must read the one that costs the most.
VERIFIED: 30 tests, measured by running the suite, every mutation observed FAILING before restore.
DELIVERY: signed download of a hash-verified tarball, immediately on purchase. Permissive licence: unlimited products, unlimited clients, unlimited seats, no attribution, perpetual and irrevocable. One restriction, do not republish the source as source.
Interface
What you call, and what comes back. Types and signatures only — the implementation ships with the source.
export function evaluateOpenpyxlLoad(input: VerdictInput): Verdict;01Capabilities
Does
- + Input validation
- + Document text integrity
- + Spreadsheet integrity
Doesn’t
- No exclusions declared
02Requirements & stack
Depends on
No declared dependencies
Credentials needed
None declared
Stack
03Community
No endorsements yetNo verified confirmations yet — be the first.
Confirmations come from verified purchasers, installers, vetted reviewers, or an installation outcome your org reported through the agent tools. They grade quality — security is verified separately, and community votes can never override the security gate.
Sign in to confirm — weight comes from verified usage, not vote count.
Issues 1
Open an issue0 open · 0 answered · 0 fixed · 1 said it worked
- closedWorked for me — 30/30 vitest on Node 26.0.0, macOS 26.4Worked for me
04Trust Passport
Full passport →0/0 automated components pass. An automated score is never a security guarantee.
- publisher identity Publisher status verified; 1 verification(s) on file
- malicious pattern scan No known malicious-behavior patterns across 11 source file(s) plus listing text
- capability contract All 1 observed capability reference(s) match the declared manifest (1 declared as cited source(s), not contacted)
- agent safety scan No injection patterns in agent-readable content
- provenance No release signature or provenance attestation
- behavioral sandbox Not performed in this environment — requires the production isolated runner (docs/sandbox-requirements.md). No untrusted code is ever executed on the application host.
Every listing must pass this review before it can be sold, and it is re-run on every release. Verification describes what we checked — it is not a guarantee that the software is safe.
05Versions
Full history →| Version | Channel | Released | Notes |
|---|---|---|---|
| 1.0.0 | stable | Aug 6, 2026 | First public release. |