Two workbooks in, every differing cell out — compared on your machine, never uploaded
| Change | Detected? | How it shows up |
|---|---|---|
| Cell value changed | Yes | One row: A1 ref, old value, new value |
| Row appended at the bottom | Yes | Every cell of the new row listed as added |
| Row fully replaced | Yes | Every cell in the row flagged changed |
| Row inserted or deleted mid-sheet | Yes | Cascade: subsequent cells differ by the shift (signature: every column changed from one row down) |
| Sheet added or removed | Yes | Reported above the per-sheet tables |
| Formula changed, result unchanged | No | Diffs run on stored values; identical results match |
| Formatting, colors, column widths | No | No value representation — not compared |
| Comments, charts, pivot caches | No | Same: content without a cell value |
The value-only design is deliberate: a data diff answers "what will change downstream," which is what review and reconciliation need. Excel's own Spreadsheet Compare (Professional Plus only) covers formatting too, at the price of a desktop install and, for the online tools, an upload.
Both files are parsed by SheetJS Community Edition, the open-source spreadsheet engine, running as JavaScript in this tab. For each sheet name present in both files, every cell is compared position to position — A1 against A1 through the union of both used ranges. Where both cells hold values and they differ, the cell is changed; where only the new file has a value, added; where only the original had one, removed. Sheet names missing from either side are listed separately.
Two versions of an order book. File A (orders-v1.xlsx, 17,999 bytes) holds five line items and a Vendors sheet. File B (orders-v2.xlsx, 19,174 bytes) updates a price — D2 from 7.25 to 7.85, with the line total in E2 moving 870 → 942 — bumps a quantity — C5 from 500 to 650, total E5 from 55 to 71.5 — replaces row 6 entirely (PLT-003 shim plates become SCR-09 wood screws: A6–E6 all change) and appends a new line 7 (A7–E7 added). The comparison reports: Orders sheet, 14 cell differences — 9 changed, 5 added — with rows 6→7 in both files; Vendors sheet, 0 differences across its 3 rows; and one sheet, Notes, that exists only in File B. Total: 9 changed, 5 added, 0 removed, 1 sheet added. Compare File A against itself and every count is zero — the baseline that makes a diff trustworthy.
Open both files in a cell-level diff tool: it reads each workbook, walks every sheet both files share, and reports each differing cell with its A1 reference, the old value, and the new — classified as changed (both had values), added (only the new file), or removed (only the old). It also flags sheets that exist in just one of the two files. In testing, a v1/v2 order sheet pair produced 14 differences: 9 changed cells (a price update, a quantity update, and one fully replaced line) and 5 added cells (a new appended row). This tool does all of it in your browser; nothing is uploaded.
Yes — this one. Nearly every 'compare Excel files online' result uploads both workbooks to a server, which is a real problem for payroll, customer lists, and financial models. A browser-based diff runs the spreadsheet engine (SheetJS) on your own machine: files are read into memory, compared, and reported with zero network traffic during the comparison. You can confirm it in your browser's network tab. Microsoft's own Spreadsheet Compare exists but ships only with Office Professional Plus, not standard installs.
Only when they change the result. Spreadsheets store each formula's last computed value, and comparisons run on values: a cell holding =SUM(B1:B2) that still shows 3,500 matches the same number typed literally. If someone rewires a formula so the displayed result changes, the diff catches the value change; if a formula changes but its output doesn't, the cells look identical — which is usually what you want in a data diff, and worth knowing in an audit.
Because a cell diff compares position to position: A1 to A1, A2 to A2. Insert a row in the middle of a sheet and every subsequent row shifts down by one, so each of those cells differs from its counterpart even though the records themselves are unchanged. Appending rows at the bottom report cleanly as added cells; deletions similarly surface as removed cells or a shifted cascade. The A1 references tell you exactly where to look, and 'row 6 fully changed across all columns' is the classic signature of a replaced or shifted row.
Anything the SheetJS engine reads: .xlsx, .xlsm, .xlsb, the legacy .xls, .ods, .fods, and plain .csv/.txt — and you can mix them, comparing today's .xlsx export against yesterday's .csv dump. CSV files compare as a single sheet. What the engine reads is stored values; cell formatting, colors, comments, charts, and pivot tables have no value representation and are not compared.
Yes. After a comparison, the tool offers a CSV download of every difference: one row per cell with columns for sheet, A1 reference, change type, old value, and new value — ready to filter, pivot, or attach to a review. The on-page table caps how much it displays at once; the export always contains everything found.