A client-side web application that compares two spreadsheets, matches rows by a primary key, and exports a categorized Excel report with three sheets: Only in File A, In Both, and Only in File B. Runs entirely in the browser—no backend required.
- React (Vite)
- TailwindCSS for styling
- Lucide React for icons
- SheetJS (xlsx) for reading/writing Excel/CSV files
- Upload Zone: Two file dropzones (File A and File B) accepting
.csv,.xlsx, and.xls - Primary Key Selector: Choose a matching column from shared headers between both files
- Data Cleaning Options:
- Ignore capitalization (case-insensitive) — default: on
- Trim extra spaces — default: on
- Ignore rows with empty primary keys — default: on
- Merge Conflict Strategy: When a row exists in both files with different values:
- Keep File A's values
- Keep File B's values
- Combine values (File A | File B)
- Results Dashboard: Summary cards with totals for each category
- Export: Download a single Excel workbook with three sheets:
Only in [File A Name]In BothOnly in [File B Name]
Each sheet includes metadata columns: Source Status and Match Key Used.
# Install dependencies
npm install
# Start development server
npm run devOpen http://localhost:5173 in your browser.
npm run buildOutput is in the dist/ folder. Serve with any static file server.
src/
├── App.jsx # Main app, state management
├── components/
│ ├── FileDropzone.jsx # File upload with drag & drop
│ ├── ConfigurationPanel.jsx # Primary key, toggles, merge strategy
│ └── ResultsDashboard.jsx # Stats cards + export button
├── utils/
│ ├── parsers.js # SheetJS parsing for CSV/Excel
│ ├── compareEngine.js # Comparison & merge logic
│ └── exportExcel.js # Excel workbook generation
├── index.css
└── main.jsx
- Parse & Clean: Both files are parsed. Data cleaning options are applied to the primary key column.
- Deduplication: Each file is deduplicated by primary key (first occurrence kept).
- Comparison:
- Only in File A: Keys in A but not B
- In Both: Keys in both; merge conflict strategy applied for differing columns
- Only in File B: Keys in B but not A
- Column Union: Output uses all columns from both files; missing columns are left blank.