XLSX Data Splitter

React · XLSX Parsing · Automation Tool

A browser-based automation tool that splits one large Excel (.xlsx) file into many smaller files, each with a user-defined row count, and downloads them all as a single zip. Built for a thesis workflow where manually cutting a 1,000,000-row dataset into 10,000-row chunks would mean 100 copy-paste operations. Drop a file, set rows-per-file, download a zip of clean header-intact parts.

Project Overview

XLSX Data Splitter was built to remove a specific bottleneck in my undergraduate thesis workflow: annotating large Excel datasets. When a single .xlsx file contains 100,000+ rows, opening it in Excel for manual annotation is painfully slow, and splitting it by hand — copy, paste, save, repeat — becomes a 100-step chore for a 1,000,000-row file at 10,000 rows per part. This tool does the whole job in one click. The user drags a large .xlsx file into the React app, sets the desired rows per output file, and the tool parses the workbook entirely in the browser, slices the data into equal-sized chunks, preserves the header row in every part, bundles all the resulting files into a single zip archive, and downloads it in one action. Nothing is uploaded to a server — the parsing, splitting, and zipping all happen client-side, so large sensitive datasets never leave the user's machine. It was used as the primary data-prep step for the thesis review-annotation pipeline, cutting a multi-hour manual task down to seconds.

Key Features

  • Drag-and-drop or click-to-browse .xlsx upload
  • Splits a single Excel file into N smaller files in one operation
  • User-defined rows per output file (e.g. 10,000 rows → 100 parts for a 1M-row file)
  • Preserves the header row in every output file so each part is immediately usable
  • Bundles every output file into a single .zip archive
  • One-click download of the entire zip — no per-file saving
  • Entirely client-side — no file ever leaves the browser
  • Live deployment on Netlify

Challenges & Solutions

Challenge

Preparing a thesis dataset meant manually annotating very large Excel files — but a 100,000-row file was too slow to open and edit in Excel, and a 1,000,000-row file split into 10,000-row chunks would take roughly 100 copy-paste-save cycles to prepare.

Solution

Built a browser-based automation tool that splits a single .xlsx file into any number of smaller files in one click. The user sets the desired rows per file, and the tool produces the entire set as a single downloadable zip — a multi-hour manual task reduced to seconds.

Challenge

Saving each split file individually is still tedious — after the split, a user would face dozens or hundreds of 'Save As' dialogs to collect the results.

Solution

Bundled every generated file into a single .zip archive using JSZip and triggered one download at the end. The user gets all 100 parts in a single click, not 100 separate saves.

Challenge

Manual copy-paste splitting often loses or duplicates the header row, or misaligns the first data row of each part — corrupting the dataset silently.

Solution

Programmatically re-inserts the header row into every output file, so each part is self-contained and immediately ready for annotation or analysis with no cleanup.

Challenge

Splitting large files on a server would mean uploading sensitive research data to a third party — a privacy concern for thesis and organisational datasets.

Solution

Kept the entire pipeline client-side: the .xlsx file is parsed, sliced, and zipped in the browser using the File API and JSZip. Nothing is uploaded, so large datasets never leave the user's machine.

Challenge

Very large workbooks can exhaust browser memory if the whole file is loaded and held as a single in-memory object during slicing.

Solution

Processed the workbook's row array once, generated each output workbook sequentially, and fed each into a zip stream — keeping peak memory proportional to one part at a time rather than the full input.

Project Info
  • RoleFull-Stack Developer (Solo)
  • StatusCompleted / Live
Tech Stack
ReactXLSX ParsingJSZipFile APIClient-Side ProcessingNetlify