Every part a complete file
Import limits are the usual reason a CSV needs splitting: mail platforms, CRMs and upload forms cap files at a few thousand rows, and a 200,000-row export has to become forty tidy files of 5,000. The detail naive splitters miss is the header — chop a CSV by line count and only the first part has column names, so every other part fails the import. Here the header row is repeated in every part (switchable off), so each file opens as a complete table.
Spreadsheets are where the sensitive data lives — customer lists, salaries, finances — which is why this runs entirely in your browser on SheetJS: the data never crosses the network. Excel workbooks work too, split sheet by sheet; converting between formats first is the Excel ↔ CSV ↔ JSON converter.