How we verify spreadsheet compatibility
Every LibreOffice verdict on this site comes from actually executing the formula in a real engine and checking what came back — not from reading documentation. This page explains the machinery, what “verified” means here, and the limits of the approach.
The execution harness
For each function we author test cases: a formula, any setup cells it needs, and the result Excel documents or produces for that input. The harness writes each case into a real .xlsx workbook with openpyxl, then runs headless LibreOffice Calc over it (soffice --convert-to xlsx), which forces a full recalculation. We reload the output and compare every result against the expected value.
Two guards make the results trustworthy:
- Recalculation canaries. Every generated workbook contains sentinel formulas (deterministic arithmetic plus a volatile function) whose values prove the engine really recalculated rather than echoing stored results. A run that fails its canary is discarded, never published.
- The OOXML
_xlfn.storage prefix. Functions added to Excel after 2007 are not stored in.xlsxfiles under their display names — Excel silently writes_xlfn.XLOOKUP(...)and strips the prefix for display. Libraries that write raw XML don’t do this for you: write=XLOOKUP(...)verbatim with openpyxl and every engine, including ones that fully support XLOOKUP, shows#NAME?. The harness translates display formulas to correct storage form before writing, so a#NAME?in our results means the engine genuinely lacks the function — not a file-format artifact. (If you’ve ever generated a spreadsheet from Python and hit an inexplicable#NAME?on a modern function, this prefix is almost certainly why.)
Version matrix
The same corpus runs against multiple LibreOffice releases — currently 24.2.0.3, 24.8.7.2, 25.2.0.3, 25.8.7.3 — which is how function pages can state a precise “supported since” release rather than a guess. Current corpus: 194 functions live-tested across 660 executed cases per release.
What the verdicts mean
- Supported — every executed case matched the Excel-canonical expected result (probe cases for volatile functions like NOW/RAND assert error-free execution and deterministic invariants instead of exact values).
- Quirk found — the function exists but at least one case returned a different value or error than Excel produces; the failing case is shown on the function’s page.
- Unsupported — the engine returns
#NAME?(unrecognized function) with the storage prefix correctly applied.
How-to recipes are verified too
Every formula on a how-to recipe page runs through the same pipeline before publishing: the exact formula shown is executed in LibreOffice 25.8.7.3 with the sample data shown, and the page displays the value it actually returned.
Honest limitations
- Excel and Google Sheets are not live-executed. Their columns reflect each vendor’s official function documentation. We can’t headlessly run those engines (yet); where our executed LibreOffice results reveal a difference against documented Excel behavior, that’s labeled a quirk of LibreOffice, and disputed cases are re-checked by hand.
- Coverage is partial. 194 of ~600 catalog functions have executed tests; untested functions say so explicitly rather than borrowing a verdict.
- A passing case is evidence, not proof. A function can match on our cases and still differ on inputs we haven’t authored. When you find such an edge, please report it.
Reproduce or dispute a result
The entire harness, test corpus, and raw per-version results are public in the GitHub repository. Every function page shows the exact formula, inputs, and returned value for each case, so any result can be reproduced in a few minutes — and if an engine disagrees with us on your machine, an issue with your version number is the fastest way to get it fixed.