# Excel Compare

> Compare two Excel files: every changed cell with value, formula and type flagged separately, rows aligned by key, auto or position. Nothing is uploaded.

- URL: https://bytescope.dev/en/excel-compare/
- Locale: en · Also: [ja](https://bytescope.dev/ja/excel-compare.md) · [zh-Hant](https://bytescope.dev/zh-Hant/excel-compare.md)
- Runs: Both workbooks are read and compared in a worker on your own machine — nothing is uploaded, and no cell value, sheet name or file name is sent anywhere.
- Requires: Any modern browser (Chrome, Edge, Firefox, Safari), desktop and mobile.
- Updated: 2026-09-08

## What it does

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.

## Limits

Does not recalculate formulas (it compares the values stored in the file), does not compare fonts, colours, borders, conditional formatting, charts, pivot tables, macros or comments, does not open legacy .xls or encrypted files, and does not write a merged workbook — it reports the differences.

## FAQ

### Are my Excel files uploaded to compare them?

No. Both workbooks are read from your disk and unpacked, parsed and compared in a Web Worker inside the page. There is no server doing the work and no copy of either file anywhere once the tab is closed. The anonymous usage event records only that a comparison ran, whether it succeeded and which alignment mode was used.

### I inserted one row in the middle — why is every row below it not reported as changed?

Because the rows are aligned before they are compared. In auto mode each row is hashed and a Myers diff finds the inserted and deleted rows, so the rows below the insertion are paired with their counterparts. In key-column mode the pairing comes from the key you chose, which is more reliable still. Only position mode compares row N with row N — pick it for fixed layouts, not for lists.

### What does a formula-only change mean?

The cached value is identical in both files but the formula is not — most often because one file has `=SUM(B2:B9)` and the other has the number that formula once produced. The sheet looks the same today and will quietly stop updating tomorrow, which is why it gets its own marker instead of being folded into unchanged.

### Why is a cell showing 100 in both files marked as different?

Usually because the type differs: one file stores the text `100` and the other the number `100`, or one is a boolean and the other the text `TRUE`. Both look alike in a grid but behave differently in sums and lookups. If you want them treated as equal, switch on comparing by displayed text.

### The two files were saved by different programs and almost every number is flagged. Why?

Check the tolerance and the 15-digit rule first: two numbers that agree to 15 significant digits are already treated as equal, which absorbs the 16th- and 17th-digit noise different programs produce for the same value. If numbers still differ beyond that, one of the files may hold stale cached values — the page warns when a workbook is set to manual calculation, is flagged to recalculate on load, or has formulas without a cached result.

### Auto alignment stopped and asked me to pick another mode. Why?

Auto alignment runs a Myers diff over the row sequences, and its cost grows with the number of differences. When the two sheets differ in too many rows, or the 15-second budget runs out, it stops rather than return a guess or silently switch to positional matching. Choose a key column if the sheet has one — it is faster and more accurate — or position mode if the layout is fixed.

### Does it compare formatting, charts or macros?

No. Fonts, fills, borders, conditional formats, data validation, charts, pivot tables, comments and VBA are all left out of this version; a changed number format and a changed merged-cell range are the only formatting differences it reports. A `.xlsm` file opens fine — its macros are simply not part of the comparison.

### Why are hidden sheets included?

Because a hidden sheet is where a changed assumption tends to live. Sheets marked hidden or very hidden are compared like any other, and a change in the hidden flag itself is reported, so a sheet that was visible in one version and tucked away in the other does not slip past.

## Related tools

- [Word Compare](https://bytescope.dev/en/word-compare.md) — Compare two Word documents paragraph by paragraph and word by word.
- [CSV Explorer](https://bytescope.dev/en/csv-explorer.md) — Open a large CSV export as a sortable, filterable table and query it with SQL.
- [Office Document Inspector](https://bytescope.dev/en/office-inspector.md) — See what the two files carry besides the cells: authors, hidden sheets, file paths.
