Excel Delta View
A fast, visual Excel file comparison tool for VS Code.
Pick two Excel workbooks, choose which sheets to compare, and get a clear diff in seconds — color-coded per-cell changes, row/column structure diffs, similarity scores, and a downloadable Excel report.
Features
- Three-phase workflow — Pick files → Select sheets → Review results; no config required
- Sheet-aware comparison — see which sheets are common, unique to File A, or unique to File B before running
- Cell-level diffs — every changed cell shows the old value (red) and new value (green) side by side
- Smart equality — configurable string comparison (trim-insensitive / trim-sensitive / exact), numeric tolerance, and correct handling of dates, booleans, and mixed types
- Similarity score — each compared sheet gets a % similarity badge (green ≥100%, orange ≥90%, red <90%)
- Column structure diffs — added and removed columns are called out separately from cell value changes
- Downloadable Excel report — export a
.xlsx diff report with a Summary sheet and per-sheet Diff tabs
- Downloadable HTML report — export a password-protected, self-contained
.html file you can share via email or chat; opens in any browser with no server required
- CSV support — compare
.csv files the same way as Excel workbooks; each file is treated as a single-sheet workbook named after the file
- Keyboard shortcut —
Ctrl+Shift+D / Cmd+Shift+D opens the panel from anywhere; an icon button also appears in the editor title bar when an Excel or CSV file is active
- Header row control — toggle whether the first row is treated as column headers per comparison; affects column names in diffs and the key-column feature
- Key-column matching — specify one or more column names (e.g.
CustomerID or CustomerID, OrderDate) to match rows by value instead of position; rows with no match in the other file are reported separately as "Only in A / Only in B"
- Select All / None — toggle all sheet checkboxes at once in the sheet selection phase
- Re-run — repeat the last comparison (same files, same sheets) directly from the results view without navigating back
- Sheet filter — live-filter the results cards by sheet name when comparing many sheets
- Context menu shortcut — right-click any
.xlsx, .xlsm, .xlsb, or .csv in the Explorer to open it as File A
- VS Code theme aware — uses
var(--vscode-*) CSS variables; looks correct in any light or dark theme
Usage
Opening the extension
From the Command Palette:
Ctrl+Shift+P → Excel Delta View: Compare Two Files
Keyboard shortcut:
Ctrl+Shift+D (Windows/Linux) or Cmd+Shift+D (Mac)
From the editor title bar:
When an Excel or CSV file is the active editor, a compare icon (⇄) appears in the title bar — click it to open the panel with that file pre-loaded as File A.
From the Explorer context menu:
Right-click any .xlsx, .xlsm, .xlsb, or .csv → Compare in Excel Delta View — the file is pre-loaded as File A; just pick File B to continue.
Step-by-step walkthrough
The extension works in three phases:
Phase 1 — Pick files
The panel opens with two file slots. Click Browse… under File A and File B to select your workbooks. You can also pre-load File A by right-clicking it in the Explorer before opening the panel. Once both files are loaded the extension automatically moves to Phase 2.
Phase 2 — Select sheets
You'll see three groups:
- Common sheets — sheets that exist in both files. All are checked by default; uncheck any you want to skip. Use the All / None buttons next to the header to toggle all checkboxes at once.
- Only in A / Only in B — sheets unique to one file. These are listed for reference but cannot be compared.
Comparison options (above the sheet list):
- First row is header — when checked (default), the first row of each sheet is treated as column headers. Uncheck this for sheets where row 1 is data.
- Key column(s) — enter one or more column names, comma-separated (e.g.
OrderID or CustomerID, OrderDate). When set, rows are matched by their key values instead of their position in the file. Rows present in one file but not the other are shown in an "Only in A / Only in B" section. Leave blank for position-based comparison (the default). Requires First row is header to be enabled.
Click Run Comparison (N sheets) when ready. Use ← Change Files to go back and swap a file.
Phase 3 — Review results
A summary banner shows the total number of sheets compared, total cell diffs, and how many sheets are clean. Below it, each compared sheet appears as a collapsible card:
- Click a card header to expand or collapse it.
- The similarity badge (green / yellow / red) is shown next to the sheet name.
- Expanded cards show row counts, any added/removed columns, and a diff table.
- The diff table groups changes by row — each changed row appears as a paired A row (red, old values) and B row (green, new values). Only the changed cells are highlighted; surrounding cells appear dimmed for context.
- If a sheet has many diffs, the table shows the first 50 rows. Click Load more to load the next 200.
- When key-column matching is used, an Only in A / Only in B section appears below the diff table listing any rows that had no matching key in the other file.
Use ← Change Sheets in the footer to go back and re-select sheets without reloading the files. Use Re-run to repeat the last comparison with the same files and sheet selections. Use the Filter sheets… input to narrow the visible cards by sheet name when the results list is long.
Exporting Reports
Both report buttons appear in the sticky footer once a comparison has been run.
Excel Report (.xlsx)
Click Download Excel Report, choose a save location, and the file opens automatically. It contains:
- A Summary sheet with one row per compared sheet — row counts, column diffs, cell diff count, and similarity %.
- One diff sheet per compared sheet that has diffs, showing paired A/B rows for every changed row (same layout as the in-panel view).
HTML Report (.html)
Click Download HTML Report and choose a save location. The file is saved and a VS Code notification appears showing the auto-generated password:
HTML report saved. Password: XXXX-XXXX-XXXX-XXXX-XXXX
Click Copy Password in the notification to copy it to your clipboard, then share the .html file and the password separately (e.g. send the file by email, share the password by Slack).
Opening the report in a browser:
- Open the saved
.html file in any modern browser (Chrome, Edge, Firefox, Safari).
- Enter the password on the lock screen and click Unlock Report (or press Enter).
- The report renders with a tab bar at the top — one tab per compared sheet, plus a Summary tab.
Summary tab — mirrors the Excel Summary sheet: a table of all compared sheets with row counts, column diffs, cell diffs, and similarity %. Sheets that only exist in one file are listed at the bottom with a note.
Sheet tabs — each tab shows the same paired A/B row layout as the Excel diff sheets. A red dot ● on the tab means the sheet has diffs; a green dot means it's clean. Column headers and the marker column stay fixed as you scroll wide or tall tables.
The HTML file is fully self-contained — no internet connection, no server, and no external scripts. The diff data is encrypted with AES-256-GCM using a PBKDF2-derived key; the password never leaves your machine.
Settings
| Setting |
Default |
Description |
excelDeltaView.stringComparison |
trim-insensitive |
How string cells are compared: trim-insensitive, trim-sensitive, or exact |
excelDeltaView.numericTolerance |
1e-9 |
Maximum absolute difference between two numbers to be considered equal |
excelDeltaView.cellDiffCap |
5000 |
Max cell diffs stored per sheet (performance guard for very large files) |
excelDeltaView.firstRowIsHeader |
true |
Default state of the "First row is header" checkbox. Can be overridden per comparison in the UI. |
excelDeltaView.keyColumns |
[] |
Default key column(s) for row matching. Can be overridden per comparison in the UI. |
Supported File Types
| Format |
Support |
.xlsx |
Full support via ExcelJS |
.xlsm |
Full support via ExcelJS (macros ignored) |
.xlsb |
Supported — see note below |
.csv |
Supported — treated as a single-sheet workbook; see note below |
.xls |
Not supported (legacy binary format) |
A note on .xlsb and .csv files
ExcelJS does not support the binary workbook format or CSV files directly. Excel Delta View bridges this by using SheetJS as a one-step conversion shim: when you open an .xlsb or .csv file, SheetJS reads it and produces an in-memory .xlsx buffer. ExcelJS then loads that buffer for comparison. Your original file is never modified or written to disk.
For CSV files, the single sheet is named after the filename (e.g. sales_q1.csv → sheet name sales_q1), so comparing two CSVs produces a clean one-sheet result.
SheetJS CE has two known security advisories (Prototype Pollution and ReDoS). Both require a specially crafted malicious file to trigger — meaning the risk is in the file itself, not the extension. If you're comparing files that came from a trusted source (your own workbooks, a colleague's export), there is nothing to worry about. If you work exclusively with .xlsx/.xlsm files, SheetJS is never invoked at all.
Coming Soon
- Worker thread file loading (removes the UI freeze risk on very large files)
- Cell color highlighting in the downloaded report (requires
xlsx-js-style)
- Row-level diff mode for detecting inserted / deleted rows vs. value-only changes
- Keyboard navigation within diff tables
- Pinning / bookmarking specific diff rows
Feedback & Issues
Found a bug or have a feature request? Open an issue at github.com/stoutalligator/excel-delta-view — contributions welcome.
MIT License