How to cell-by-cell comparison of two excel files with change highlighting
- Step 1Save both versions as separate files — You need two distinct files: the original (file A) and the revised (file B). Range Diff always treats the first file dropped as the baseline and the second as the new version, so name them clearly (
model_v1.xlsx,model_v2.xlsx) to avoid loading them in the wrong order. - Step 2Sign in to a Pro-tier account — Range Diff is Pro-gated. It also needs two files at once, and the Free tier allows only one file per run — so a Free account cannot use this tool even structurally. Pro raises the limit to 5 files and 50 MB / 100,000 rows per file; Pro-media 20 files / 200 MB / 500,000 rows; Developer 500 MB and unlimited rows.
- Step 3Drop the original first, then the revised — Upload file A (original), then file B (revised). Both are read in the browser with ExcelJS/SheetJS. No options appear because Range Diff has none — the comparison is deterministic with no settings to tune.
- Step 4Let the diff walk every shared sheet — The tool builds the union of sheet names from both files and compares each. Sheets with matching names diff cell-for-cell; a sheet present in only one file is still written out (the missing side reads as empty, so its cells show as all-added or all-removed).
- Step 5Read the on-screen summary first — The result panel shows
diffCountand a summary listing the first 200 differences in[Sheet] Column[row N]: "old" → "new" (type)form. IfdiffCountis 0 the files are byte-equal at the cell level. If it is large and unexpected, suspect a row insertion shifting positions (see edge cases). - Step 6Download diff-report.xlsx and review by colour — Open the colour-coded workbook. Each output cell shows the new value (or the old value when the new one is blank). Filter or scroll for amber (changed), green (added), and red (removed). Columns are auto-sized to width 18 for readability.
What Range Diff compares, and how
The exact matching rules the tool uses. There are no options to change any of this — it is a fixed, deterministic algorithm.
| Dimension | How it is matched | Implication |
|---|---|---|
| Sheets | By sheet name, using the union of names from both files | A renamed tab is treated as a removed sheet plus a new sheet, not a rename |
| Rows | By position (row index): row *i* in A vs row *i* in B | Inserting/deleting a row near the top shifts everything below into 'changed' |
| Columns | By header name, from the union of keys in the first data row of each sheet | Reordered columns still match by header; a renamed/added header is a new column |
| Cell values | Compared as strings (String(value)), exact match | 5 vs 5.0, or a trailing space, register as a change |
| Change type | added if old is empty, removed if new is empty, else changed | An emptied cell is 'removed'; a filled-in blank is 'added' |
Output colours and content
The diff-report.xlsx fill colours and what each output cell contains.
| Change type | Fill colour (ARGB) | Cell shows |
|---|---|---|
| Added (was blank, now has a value) | Green FFC6EFCE | The new value |
| Removed (had a value, now blank) | Red FFFFC7CE | The old value |
| Changed (value differs) | Amber FFFFEB9C | The new value |
| Unchanged | No fill | The value (same in both) |
| Header row | Grey FFE2E8F0, bold | Column header names |
Tier limits for two-file comparison
Range Diff is Pro+. Free is listed only to show why it cannot run a two-file tool.
| Tier | Max file size | Max rows / file | Files per run | Can run Range Diff? |
|---|---|---|---|---|
| Free | 5 MB | 10,000 | 1 | No — needs 2 files |
| Pro | 50 MB | 100,000 | 5 | Yes |
| Pro-media | 200 MB | 500,000 | 20 | Yes |
| Developer | 500 MB | Unlimited | Unlimited | Yes |
Cookbook
Before/after pairs showing exactly how Range Diff classifies common edits. The summary lines below mirror the real [Sheet] Column[row N]: "old" → "new" (type) output format.
A single changed value
The simplest case: one cell edited between versions. The diff reports it as a 'changed' cell and fills it amber in the output.
File A (Sheet1): File B (Sheet1): Name,Qty Name,Qty Widget,10 Widget,12 Gadget,5 Gadget,5 Result: diffCount: 1 [Sheet1] Qty[row 1]: "10" → "12" (changed) → diff-report.xlsx: Qty cell on row 1 filled amber, shows 12
Added and removed cells
A blank cell that gains a value is 'added' (green); a cell that loses its value is 'removed' (red). Classification is driven purely by which side is empty.
File A: File B: SKU,Note SKU,Note A1, A1,backordered A2,in stock A2, Result: diffCount: 2 [Sheet1] Note[row 1]: "" → "backordered" (added) → green [Sheet1] Note[row 2]: "in stock" → "" (removed) → red
A row inserted at the top (positional shift)
Because rows are matched by position, inserting one row near the top pushes every later row down by one, so each subsequent row compares against the wrong original. Expect a large diffCount even though the data only gained one row.
File A: File B (one row inserted at top):
Name,Qty Name,Qty
Apple,3 Cherry,9 ← new row
Banana,7 Apple,3
Banana,7
Result: row 1 Apple→Cherry (changed), row 2 Banana→Apple
(changed), row 3 ""→Banana (added) — 5+ diffs for a 1-row add.
Fix: align rows yourself, or compare sorted exports.Comparing across all sheets
Range Diff iterates the union of sheet names. A tab present in only one file is written out with its cells flagged entirely as added or removed.
File A sheets: Summary, Q1 File B sheets: Summary, Q1, Q2 ← Q2 is new Result: Summary + Q1 diffed cell-by-cell; Q2 written as an all-green sheet (every cell 'added'). summary line e.g.: Compared 3 sheet(s). N differences found.
Number formatting flagged as a change
Values are compared as strings. If one export wrote 5 and another wrote 5.0, or padded a code with a leading zero, the diff records it as changed even though the numeric value is the same.
File A: Rate = 0.5 File B: Rate = 0.50 Result: [Sheet1] Rate[row 1]: "0.5" → "0.50" (changed) File A: Code = 007 File B: Code = 7 Result: [Sheet1] Code[row 1]: "007" → "7" (changed) To avoid noise, export both files with identical formatting.
Edge cases and what actually happens
Only one file uploaded
ErrorRange Diff requires two files — the original and the revised. If the second file is missing the tool throws 'Two files are required for comparison.' Drop file A (original) first, then file B (revised).
Free tier attempts the tool
Pro requiredThe tool throws 'Range Diff requires Pro tier.' Beyond the gate, Free is limited to one file per run, and a two-file comparison structurally cannot run on Free. Upgrade to Pro (50 MB / 100,000 rows / 5 files) or higher.
A row was inserted or deleted, not just edited
Expected (positional)Rows are compared by index, so an inserted or deleted row shifts every later row out of alignment and they all report as changed. This is by design — there is no content-based row alignment. Align rows manually, or sort both files by a stable key column before diffing.
A sheet was renamed between versions
ExpectedSheets are matched by name. A renamed tab appears as one removed sheet (all cells red) and one added sheet (all cells green). To get a true cell diff, rename the tabs to match before comparing.
Columns reordered between versions
PreservedColumns are matched by header name, so reordering columns does not produce false changes — Qty still compares to Qty. Only a renamed or newly added header is treated as a new column.
Same number, different formatting
Changed (string compare)Cells are compared as strings. 5 vs 5.0, 0.5 vs 0.50, or 007 vs 7 all register as changes. There is no numeric tolerance option. Export both files with matching number/date formats to avoid cosmetic diffs.
Trailing spaces or whitespace differ
ChangedApple vs Apple is a string difference and reports as changed. There is no trim option in Range Diff. Clean both files first with the Excel whitespace trimmer if whitespace noise is a problem.
A new column only appears in later rows
Not detected as a columnThe column set is built from the first data row of each sheet. A header that exists only in row 2 onward (a sparse/late column) won't be in the compared key set. Ensure both files have a complete header in the first data row.
Very long sheet names
TruncatedExcel limits sheet names to 31 characters, so the output worksheet name is truncated to the first 31 characters. Two source sheets whose names match in the first 31 characters could collide in the output.
Thousands of differences
Summary cappedThe on-screen text summary lists the first 200 differences and the findings.diffs array holds the first 500, but diffCount reflects the true total and the diff-report.xlsx colours every difference. For a complete review, work from the colour-coded workbook, not the truncated text list.
Frequently asked questions
Does Range Diff align rows by content like a real text diff?
No. It compares rows by position — row 5 in the original against row 5 in the revised. There is no content-similarity alignment, so an inserted or deleted row shifts every later row out of alignment and they report as changed. If your edit added or removed rows, sort both files by a stable key first, or align the rows manually before diffing.
What do the colours mean in the output workbook?
Green (FFC6EFCE) = added (the cell was blank in the original), red (FFFFC7CE) = removed (the cell had a value that is now blank), amber (FFFFEB9C) = changed (the value differs). The grey, bold row at the top is the header. Cells that didn't change have no fill.
Can I compare more than two files at once?
No. Range Diff compares exactly two: the first file is the original, the second is the revised. To compare across more than two versions, run the tool pairwise (v1↔v2, then v2↔v3).
Why is everything showing as changed?
The most common cause is a row inserted or deleted near the top, which shifts every later row out of positional alignment. Other causes: a renamed sheet (whole tab flagged) or systematic formatting differences (5 vs 5.0). Check whether the row count differs between the two files first.
Does it handle CSV files?
Yes. Either side can be XLSX or CSV — you can diff a fresh CSV export against a saved XLSX. A CSV is read as a single sheet, so for CSV-vs-CSV comparisons the sheet names should line up automatically.
Are my files uploaded to a server?
No. Range Diff runs entirely in your browser using ExcelJS and SheetJS. Your workbooks, including any financial or personal data, never leave your machine. Only an anonymous 'file processed' counter is recorded for signed-in dashboard stats.
Why is a number like 5 showing as different from 5.0?
Cells are compared as strings, so 5 and 5.0 are different text even though they are the same number. There is no numeric-tolerance setting. Export both files with the same number formatting, or convert formulas to values consistently, to avoid cosmetic diffs.
Can I ignore case or whitespace differences?
No — Range Diff has no options at all. Comparisons are exact string matches, so Apple differs from apple and from Apple . If you need case- or whitespace-insensitive comparison, normalise both files first (for example with the case converter or whitespace trimmer) and then diff.
What value does each output cell show?
Each output cell shows the new value, or the old value when the new one is blank (a removed cell). So a 'changed' or 'added' cell displays the revised content in green/amber, while a 'removed' cell displays the original content in red.
What's the largest file I can diff?
Pro allows 50 MB and 100,000 rows per file; Pro-media 200 MB and 500,000 rows; Developer 500 MB and unlimited rows. Free cannot run the tool (it allows only one file). The full diff is rendered in the colour-coded workbook regardless of size; only the text summary is truncated.
Does it compare formulas or only the displayed values?
It compares the cell values as read by SheetJS, not the formula text. Two cells that compute the same result will match; cells whose computed/stored value differs will be flagged. To diff formula logic specifically, convert formulas to values consistently first, or use the formula explainer.
What related tools help before or after a diff?
Use the sheet joiner to combine tabs before comparing, the error locator to scan a revised file for broken cells, the format inspector to spot formatting drift that would show up as string changes, and the fuzzy merger when rows need key-based alignment rather than positional comparison.
Privacy first
Every JAD Excel tool runs entirely in your browser using SheetJS and ExcelJS. Your spreadsheets, formulas, and data never leave your device — verified by zero outbound network requests during processing.