16. April 2025
Comparison of spreadsheet software

In late June 2024, we did a survey of the capabilities of the spreadsheet software available. This is an overview of our findings.
The ultimate goal was to determine how sophisticated each engine is. While this may be subjective, we've tried to quantify this as a combination of a few factors:
Feature set support
Formula and function support
Exactness of calculations
Speed of calculations
We are aware that we cannot be unbiased in this endavour. We are also actively trying to work against it, as we hope our learnings expose where we can improve.
Comparison of features
A spreadsheet engine feature set is perhaps the best indicator of how sophisticated it is. Features are selected based on whether they create a divergence.
Comparison of function support
Function support varies from engine to engine. We've found that 90% of the usefulness is sitting in about 350 most commonly used functions.
Exactness of calculations
Generally speaking we can say that spreadsheet applications are reliable. Given some set of inputs and functions that an engine supports, the output will be correct or acceptable to a user.
However, when moving those inputs to a different engine the results may be different. So exactness really means similarity of calculations to "some standard". That standard is usually desktop Excel, but could be Sheets or some other engine. In fact, Excel has maintained several quirks and bugs from its predecessors for decades.
So what really matters is how well an engine does with a model originating in another engine. The feature set as shown above is obviously a large factor but other things also matter:
Correctly implemented functions. – Calculated output should be close or identical to an ideal standard, and a quirky function should maintain a "standard" quirk.
Correct traversal of dependent cells. – Formulas in a spreadsheet model depend on other cells. When a change happens in one cell, it's vital that dependent cells are calculated in the right order.
Excel and Excel Online
Excel is the de-facto standard. It is one of the most important and widely used software in the world. It has, for all its quirks, done an amazing job at staying consistent and backwards compatible for decades.
Excel doesn't support everything the other engines have implemented but it also has little incentive to as it is the market leader by a wide margin.
The online Excel engine is separate from the desktop one. It is very consistent with its older sibling, but does not have all its capabilities yet. Our testing found that there are some minor incompatibilities in dependency handling, esp. with circular references. Largely though, desktop Excel compatibility is near perfect.
Google Sheets
Sheets does not have a fully compatible cell-model to Excel. Unlike Excel, when a cell references another, the cell picks up the meta-data (such as formatting) from the referenced cell.
Sheets pioneered the spilling of cells, but limited to only a few functions. Sheets' spilling model is less mature than what Excel eventually did and it may be difficult for Google to move to the newer behavior.
Our testing has found that multiple functions in Sheets are quirky, esp. when it comes to error output. But by-and-large Sheets has high compatibility to Excel with the exception of the recent advancements Excel has done with spilling and dynamic arrays.
Sheets also lacks the ability to cross-reference workbooks as well as very advanced reference features (multi-area, 3D).
GRID
GRID's engine is a headless JavaScript engine which is capable of running in a browser as well as on a server. It has been built with the aim of having perfect compatibility to desktop Excel as well as Sheets.
It thus supports both modes of cell meta-data handling and spilling, running workbooks in corresponding modes. It will even allow Excel and Sheets workbooks to coexist in the same environment and theoretically could allow cross-references between them (if authoring this were possible). Workbooks authored in GRID can reference any flavor of workbook.
GRID's compatibility to both Excel and Sheets is very high, missing only a few statistics and finance functions.
SpreadJS
SpreadJS is a browser-only spreadsheet engine. Judging by the engine's tight coupling to its UI, its primary focus seems to be to allow in-browser spreadsheet viewing and editing. It has broad support for Excel features such as charts and images that do not have to do with calculations.
SpreadJS compatibility with Excel is very high, but it lacks all support for Sheets-specific features. It also lacks the capability to cross-reference workbooks.
Other engines
HyperFormula is a headless JavaScript engine capable of running in a browser and on a server. It is quite limited in its features. Its data input/output is basic and it has next to no support for newer and advanced features. Its compatibility with both Excel and Sheets workbooks is low as there are some fundamentals missing like correct/dynamic dependency calculations and anything beyond the most basic number formatting.
jSpreadsheet is a JavaScript engine capable of running in a browser. Its compatibility with Excel is high, but it lacks all support for Sheets specific features. It supports cross-referencing workbooks, but does not support iterative calculation. Its numeric precision is limited so models that require exactness may break.
PhpSpreadsheet is a server based spreadsheet runner. Its compatibility with Excel is low as it lacks nearly all new and advanced features, and does not even respect correct formula operator order.
Rows is a server based spreadsheet runner. Its compatibility with Excel is very low as it lacks most things beyond the absolute basics. Interoperability does not seem to be its focus.
Calc is the open source answer to Excel. It's been around for a long time so it has very high compatibility with Excel except for newer features (like spilling or LAMBDA).
Gnumeric is an open source spreadsheet application that focuses on statistics. Its compatibility with Excel/Sheets is very low, but interoperability has never been its goal.
Numbers is Apple's offering. It takes a very different approach to many paradigms, aiming to innovate in its UI rather than keeping compatibility. It has very low compatibility to Excel and Sheets.
POI is a limited headless Java engine that aims to be a programmatic interface on top of Excel workbooks. Its development seems inert, and it looks to have only limited support for older Excel files and features. Its compatibility with Excel/Sheets is very low.
The interactive charts and calculators in this post were built with Calculator Studio—a standalone, no-code product powered by the GRID spreadsheet engine.
News
Updates and announcements
10.11.2026
The GRID Spreadsheet Benchmark: how close do spreadsheet engines get to Excel?
Every spreadsheet solution will say it is compatible with Excel. Now we can check those claims. For eight years our job at GRID has been to build a spreadsheet engine that gives the same answer as Excel, because if a model returns different numbers nobody will trust your solution. To make sure we'd earn that trust, we had to build a test rig. Today we are opening that rig up. The GRID Spreadsheet Benchmark measures how closely an engine's formula results match Excel's. It runs thirteen engines today, the results are live on the benchmark page, and everything needed to rerun it is in a public repository. If you are choosing an engine to build on, or building one yourself, this is meant for you.
27.07.2026
An agent with a spreadsheet engine beats one without
Our results are now on the official SpreadsheetBench leaderboard: 91.25% on the verified 400 set, using Claude Sonnet. The rest of this post is how we got here: what SpreadsheetBench is, what six months of running the benchmark taught us - and why an agent with a spreadsheet engine beats an agent without one. We're also releasing @grid-is/agent-tools: the tools our spreadsheet agent uses to read, write, and understand workbooks - complementing our free-for-evaluation GRID engine. What is SpreadsheetBench? SpreadsheetBench is a benchmark for evaluating how well LLMs solve real spreadsheet tasks. It was introduced in a 2024 NeurIPS paper by researchers from Renmin University of China, Tsinghua University, and Zhipu.AI (Zeyao Ma, et al.). The dataset holds 912 tasks scraped from real Excel forum threads. Scoring is done by comparing cells: the cells your agent produced against the cells an expert says should be there. In late 2025 the researchers released a 400-task subset in which every task has been reviewed by experts, the "verified 400", in collaboration with Shortcut (see blog). Their objective was to create a subset of tests with fewer correct interpretations, optimized for automated evaluation. By removing overly ambiguous and simple tasks they created, in our opinion, a subset which gives a much cleaner signal, and it's the set all our published numbers refer to. Why we ran it We build a spreadsheet engine. This is a tricky thing to do, because a modern spreadsheet is a combination of decades of features piled on top of one another, none particularly well documented. Unless you spend your days knee-deep in a workbook, you may not have thought about the engine underneath. You just use Excel, and the calculation engine is invisible. When you've built something invisible, it's hard to tell people what you've done. You can say "We've written a spreadsheet engine, from scratch, that runs the calculations itself, manages the dependency graph, handles the awkward edges of Excel semantics, and exposes itself cleanly to code and to language models", and people will nod politely and then ask you if you have any interesting hobbies. So how exactly should we show off our engine? We have demos, we have case studies, standard stuff. And then we discovered SpreadsheetBench. 912 real-world problems, nabbed from Excel forums, scored by comparing cells to cells. The tasks are the sort of thing a colleague sends you at half past four on a Friday: combine these two sheets by matching on text in two columns, oh and by the way there's a totals row, oh and by the way new rows will be added later, so please make it survive that. A great test for an engine. This would help us test our hypothesis: an agent with a spreadsheet engine is better than an agent without. If you ask an LLM to solve a spreadsheet problem, it will often reach for the OpenPyXL Python library. But OpenPyXL is designed to read and write .xlsx files, not to provide a spreadsheet engine. It can't run calculations, it can't run formulas, it can't pivot tables. Instead, the LLM needs to write Python code to calculate values, and at that point a spreadsheet problem becomes a programming problem. It tries to solve the programming problem and hope the translation was lossless. It usually isn't. Meanwhile our engine, sitting quietly on the other side of the room, can just evaluate the formula. It can solve the spreadsheet problem. We think an engine provides a good foundation for LLMs to solve the sort of problems people have in spreadsheets. There was another reason too. We wanted to see our own engine and harness work on problems we hadn't chosen. It is very easy, when you build something, to end up testing it on the things it happens to be good at. SpreadsheetBench would help us get out of our comfort zone and find out if our spreadsheet engine could stand up against unforeseen problems. How we benefitted Our first tests, in December 2025, ran against the online MCP API we were hosting at the time, and they were surprisingly slow. That turned out to be the token-hungry nature of spreadsheets, not the service. So we quickly built an agent backend with the engine running directly inside it: a fuller exercise in what we believed our customers would want to build, and a faster way to iterate. We'd been developing that engine for more than seven years, but we had only just taught it to save modified .xlsx files. Until then it had powered our first product, Calculator Studio, which turned spreadsheets into visual, interactive calculators that read and calculated across more than 200,000 workbooks but never wrote changes back to a file. Durable editing was brand new. The first tests bore that out. They surfaced plenty of weaknesses in our export path (enough, we reckon, to account for something like 10–15% of the failures) and left us around 75% to start, depending on the tasks, model, and prompt. We started from the prompts and tools we'd been using for our LLM showcase. Our tools at the time reflected that history: mostly read-oriented (detecting data labels, understanding workbook structure), with the write path barely out of the oven. Running hundreds of forum-sourced tasks through it, then round-tripping the results back out to .xlsx for scoring, shook out bugs at a rate no test suite we could have written ourselves would have matched. The benchmark quietly became a development tool. It also changed how we run things. Waiting a few hours for a sequential run of hundreds of tasks to surface one regression is no way to live, so we built our own runner: tasks execute in parallel against the agent and are evaluated while the run is still going. Full 400-task runs are our high-fidelity check, exercising the whole export and roundtrip path, but they aren't cheap in tokens, so we don't run them constantly. Instead we used a handful of full runs to rate each task's difficulty, then picked 100 tasks representative of the overall spread and ran that smaller set far more often. It gives a fast, clear signal while we iterate on tools and prompts, and lets us reserve the full 400 for less frequent, higher-fidelity checks. Once the score settled into a reliable 85–90%, the benchmark's job changed. Since February this year we mostly stopped working on the agent itself: our customers needed pivot tables, charts, and other core engine work more than they needed a better benchmark score, so that's where our efforts were directed. The benchmark stayed on as a regression suite, guarding the score while we evolve engine features, tools, and skills the benchmark doesn't measure at all. The numbers Over the next few months these regression runs accumulated the following results: Model Runs Best Median claude-sonnet-5 7 91.25% 90.75% claude-opus-4-8 2 91.0% 90.5% claude-sonnet-4-6 7 90.0% 89.0% claude-sonnet-4-5 6 86.75% 85.6% The trend is really two stories. The big jump from sonnet-4-5 to sonnet-4-6 was mostly our own doing: those runs carry far more advanced GRID tooling and engine capabilities. The improvement since then is split between smaller tooling refinements and the model itself: sonnet-5 sits at 90% or above in six of its seven runs. It's worth noting that we'd probably need more than 6 or 7 runs for a given configuration of model + GRID tools to understand how well we do. A typical run fails 35–45 of the 400 tasks, but most of that is churn, the run-to-run noise we measure below. Just 14 tasks failed in all seven of the recent claude-sonnet-5 runs; put the other way, 96.5% of the verified 400 passed at least once within that window. Widen the window to every run we've recorded and only three tasks have never passed: 99.25% solved at least once, and the remaining three are arguably defective tasks, not lack of capability. A note on error bars, because leaderboards don't usually draw them. Every eval we'd built before this one was single-turn, and single-turn evals at temperature 0 are fairly stable, across both Claude and GPT models. Nothing had prepared us for how stochastic a 20-plus-turn agentic run is: early on, re-running a day's failed tasks lifted the score from 82-something to 85.7%, and a subsequent full re-run erased those gains. So we measured it properly. We ran the same agent build, configuration and model (claude-sonnet-4-6) five times over a fixed 100-task sample: 12 of the 100 tasks flipped between pass and fail across the runs. An earlier four-run group on claude-sonnet-4-5 showed the same: 14 of 100 flipped. Both groups ran with temperature=0 and top_k=1, sampling pinned to the single most likely token at every step, so the flips survive even with sampling nailed down. The take-away: a single-run score on this benchmark carries several points of noise, and comparisons between agents that differ by a point or two are mostly comparisons of luck. We're not the only ones to notice: the GPT for Work team's write-up of their own run reaches the same conclusion, attributing most of their misses to variance rather than a capability gap, with several failing tasks flipping to pass on re-runs. We standardize on Sonnet because that's the model businesses actually deploy at scale. It can be a real matter of economics: Sonnet is about 40% cheaper, on a workload as token-hungry as spreadsheets. A leaderboard doesn't record what a score costs to serve. In our controlled head-to-head with identical agent build on verified 400 and only the model swapped, Opus 4.8 scored one point higher than Sonnet 5 (91.0% vs 90.0%). A second Opus run came back at 90.0%. The noise shows that the choice has negligible effect on score. Reproducibility We're publishing our leaderboard run in full, every transcript and every output file. It lands in the same ~90% band as the rest of our runs; a single number here means little, which is rather the point. A score without its transcripts is just a claim, and we'd like publishing them to become the norm. Dealglass, whose Tetra sits ahead of us on the leaderboard, led the way here: their spreadsheet-agents dataset includes session logs for their baseline GPT-5.4 and Claude Opus 4.6 runs, alongside the eval results for their own agent. Two tasks from a recent run show what having the engine in the loop looks like, and why it matters: 48643 wants a column of accumulated wealth over 39 years: each year's deposit added to the previous year's total, grown by that year's rate. The calculation is inherently recursive, each row depends on the one above it, so there's no closed-form shortcut. Our agent evaluated the candidate formula against the live workbook first, then wrote it to the top cell and filled it down the column in one call. The engine recalculated the whole 39-row chain, and the agent read the computed values back to confirm the compounding behavior. Without an engine the agent would have to reimplement 39 rows of compounding arithmetic in Python and hope the rounding matches, or write the formulas blind. 48982 is a debugging task: a running-counter formula in B323 displays "000" and Excel complains about a circular reference, and the asker wants to know why. The display is a red herring (the cell's number format is literally 000), and the real bug is in the formula, =IF(A323="E","",MAX(B$7:B377)+1). The MAX range includes row 323 itself, so the cell feeds its own calculation. Our agent found this by reading the formula and its format, narrowed the range to B$7:B322, and evaluated the fixed cell in place to confirm that it now computed a value. A circular reference only exists, and only gets caught, when something is actually running the calculation. What the benchmark is, and isn't The good parts we covered up top: forum-sourced tasks with the underspecified shape of real work, plus expert review on the verified 400. It's the best public signal we've found for spreadsheet agent capability. But there are limitations: The reference harness assumes your agent writes Python. It generates code, runs it against the file, opens the result in Excel to recalculate, and then compares cells. That's a sensible pipeline if OpenPyXL is your only option, but unnecessary if your agent has an engine. Ours reads and edits cells directly and calculates natively. Some tasks have more than one valid solution, so getting them reliably right can mean you've overfit your prompts and tools rather than solved anything general. Only three of the 400 tasks have never passed in any of our runs, on any model. Every other task has passed at least once; most single-run failures are just tasks that fail one run and pass the next. We've shared our notes on some of these. Run-to-run volatility (see above) made us decide it's more valuable as a regression and optimization suite than anything else. That's how we use it: as the thing that tells us when an engine change broke the write path, not as a number to chase. There is also plenty a cell-comparison benchmark can't see: formatting and styles aren't scored at all, and comparing cells, or exact ranges, limits the tasks to those with a single, fixed position where the answer can be checked. SpreadsheetBench V2 addresses both, making it more representative of real spreadsheet work. That makes V2 the version of the benchmark we believe in, and the one our effort is aimed at next. Its leaderboard is young (so far it holds only the researchers' own model baselines, with the best at 34.9%), so nobody has really run at it yet. Try it for yourself The tooling layer the agent uses (the tools for reading, writing, and understanding workbooks that all these runs battle-tested) is now available as @grid-is/agent-tools. The engine itself is already available for non-commercial use, and together with our viewer and editor it's what a number of companies already license to build spreadsheet capability into their own products, increasingly for AI-agent workflows. The newest example: a financial-modeling agent one of our clients released on the engine's latest version just weeks ago. We're also strategically open-sourcing parts of the stack, more on that later. And credit is overdue. SpreadsheetBench has given us far more value than a number to put in a blog post: it has been a working development tool for half a year, and will be for the foreseeable future. Everything here is public: The agent tools: docs.grid.is/agent-tools The engine, free for non-commercial use: grid.is Our leaderboard run, transcripts and outputs: github.com/GRID-is/spreadsheetbench-results Install the tools into Claude Code or Codex: GRID skill marketplace An agent with a spreadsheet engine beats an agent without one. Now you have the tools to check.
22.06.2026
Spreadsheet superpowers, for humans and agents.
GRID took a big step this weekend. Our engine - the most sophisticated spreadsheet engine outside of Google and Microsoft - is now free for evaluation and non-commercial use, for any developer: human or agent. We've built it from scratch over the last 8 years, grounded in deep research into how spreadsheets really work, and we license it commercially to some of the leading AI companies in the world. What it does: More deeply compatible with Excel and Google Sheets than anything else out there: Runs 99.5%+ of real-world spreadsheet models, backed by tens of thousands of compatibility tests on every build. Fast enough to recalculate even the most complex models at "animation speed". Runs wherever you need it: 100% on-premises, in your own cloud, or entirely in the browser. The setup is yours to control, and the data never leaves your environment. Other parts of the stack are free too: the viewer (near pixel-perfect rendering of any spreadsheet) and the editor (a lightweight editing layer on top). Demand at the intersection of spreadsheets and AI is strong, and software development is changing fast. Hard-gated enterprise licensing is too slow for a world where coding agents do the integrating. We'd rather let agents, and the developers directing them, integrate and prove out their ideas first, and talk commercials later. For a personal project, all we ask is attribution. Spreadsheets run the world. Now you can run them. Give it a spin or point your agent at: grid.is/engine