About this tool
Two versions of the same workbook — the quarterly report before and after someone fixed it, two exports of the same ledger, a sheet that came back from a colleague — and the question is simply what changed. Drop both .xlsx or .xlsm files here and they are opened and compared in the page: sheets are paired by name (or by order when the names do not match, and you can repair the pairing by hand), hidden and very-hidden sheets are compared too, and the result is a side-by-side grid with every difference marked, a per-sheet summary of identical and changed cells, inserted and deleted rows and formula changes, a differences-only filter and previous/next jumps. The difference list exports as CSV (sheet, cell, kind, a_value, b_value, a_formula, b_formula) or copies as JSON.
Neither file leaves your browser. A ledger, a payroll sheet or a price list is exactly the kind of file you do not want sitting on someone else's server, so both workbooks are read from your disk, unpacked and compared in a Web Worker on your own machine. There is no upload endpoint, and the only thing the page reports back is that a comparison ran, whether it succeeded and which alignment mode was used — never a file name, a sheet name or a cell value.
Value, formula and type are flagged separately
Each paired cell is compared on three things, and each gets its own marker. The value is the cached result stored in the file, with shared strings resolved. The formula is the text of <f>, with shared formulas expanded so every cell shows the formula it actually carries. The type is number, text, boolean or error — so 100 stored as text and 100 stored as a number are reported as a type change, not a match. The combination that matters most is a cell whose value is unchanged while its formula is gone or different: that is what it looks like when someone pastes a result over a formula, and the grid marks it as a formula-only change so it does not hide among a thousand identical values. Numbers are compared as numbers (1.0 equals 1), with an option to compare the displayed text instead and an optional tolerance that defaults to zero. Dates are numbers with a date format underneath, so they are compared by serial number and shown as dates; a cell that switched from a plain number to a date format is reported as a number-format change, not a value change.
Three ways to line up rows
Reporting every row after an inserted one as different is the classic failure of spreadsheet comparison, so the alignment mode is a choice, and the one in use is named at the top of the result. Key column (recommended) pairs rows by one or more columns you pick — an order number, an ID, a SKU — and sorts the result into changed, only in A, only in B and duplicate key. Auto hashes each row and runs a Myers diff over the two row sequences to find inserted and deleted rows before comparing the matched ones cell by cell. Position pairs row N with row N, which is right for fixed-layout forms. Columns are matched by the text of the header row (the first non-empty row, or one you choose) and by position where the headers do not match. Auto alignment is a guess: on a sheet where most rows changed it can pair the wrong ones, and it has a 15-second budget and a cap on the number of differences — when either is exceeded it stops and offers the key-column or position modes instead of quietly falling back to one of them.
What is compared, and what is not
The comparison uses the cached values stored in the file, not a fresh recalculation. A workbook saved with manual calculation, one flagged to recalculate on load, or one with formulas that have no cached value at all may carry stale numbers, and the page shows a warning when it detects any of those. Two numbers count as equal when they agree to 15 significant digits — the precision Excel itself keeps — because different programs store the same value with 15 or 17 digits and the trailing ones are noise, not a change. Fonts, colours, borders, conditional formatting, data validation, charts, pivot tables, macros and comments are not compared; of the formatting layer only a changed number format and a changed merged-cell range are flagged. Encrypted workbooks and the old binary .xls format are rejected with a message saying why.