Excel ↔ CSV converter
xlsx to CSV, CSV to Excel, xls to xlsx, a sheet to JSON. Every sheet in the workbook, not just the first one.
A spreadsheet is usually the most sensitive file in the folder — salaries, customers, invoices, patient lists — and converting one is the moment people upload it to whichever site ranks first. This does the conversion in your browser instead. It also handles the parts that go wrong quietly elsewhere: multi-sheet workbooks come back as a zip rather than losing every sheet but the first, long account numbers stay text instead of turning into 1.23457E+15, and you choose the delimiter and encoding your copy of Excel actually expects.
Nothing loaded yet. Drop a file or paste some rows and the sheets will appear here.
Questions people ask
Is my spreadsheet uploaded?
No. The file is read by your own browser and the converted file is built there too. The uploads counter in the top bar stays at 0, and the page keeps working with the network switched off. That matters more here than on most tools, because the spreadsheets people convert are usually salaries, customer lists or invoices.
Why does Excel open my CSV with everything in one column?
Because Excel follows your regional list separator. In much of Europe that is the semicolon, so a comma-separated file lands in a single column. Choose semicolon as the delimiter here and it opens correctly, with no import wizard.
Why do my accented or non-Latin characters turn into garbage?
Excel guesses the encoding of a plain CSV and usually guesses your legacy codepage rather than UTF-8. Leave the UTF-8 BOM toggle on: those three bytes at the start tell Excel the file is UTF-8, and é, ü, ß, Cyrillic, Greek, Arabic and CJK text all survive.
Why does a cell starting with = get an apostrophe in front of it?
A CSV cell beginning with =, +, - or @ is treated as a formula by Excel and Google Sheets when the file is opened, which is a known attack called CSV injection. On export those cells get a leading apostrophe so they stay text. Numbers, including negative ones, are left alone.
Is it really free, and does it watermark or cap the rows?
It is free, there is no account, no watermark and no row limit. The usual converters cap you at a few hundred rows or a few files a day and then ask for a subscription; there is no server bill here to justify one, because your machine does the work.
How this works & why it’s private
Workbooks are parsed by SheetJS, a spreadsheet library that runs as ordinary JavaScript on this page. CSV and TSV text is parsed here directly, quoted fields and embedded newlines included. Nothing is sent anywhere at any point — open your dev-tools Network tab and watch while you convert.
Multiple sheets. Converting several sheets to CSV gives you a .zip with one file per sheet, because a CSV holds exactly one table and silently exporting only the first sheet is the bug people hit on the paid sites. To JSON you get one file with each sheet under its own key; to .xlsx you get one workbook with all of them.
Dates. A spreadsheet stores a date as a number of days since 1899-12-30, and what you see is a display format on top of it. You choose which one gets written: an ISO YYYY-MM-DD string, or the raw serial number the file actually holds. The line under the options always says which one you are about to get. ISO dates are built from the local calendar parts, so nobody's dates shift by a day.
Long numbers. Phone numbers, IBANs, order ids and anything with a leading zero are kept as text on the way into .xlsx, so 0771234567 stays itself and a sixteen-digit reference does not become 1.23457E+15. Only values that survive the round trip exactly are written as numbers.
Limits, honestly. Everything is held in your browser's memory, so the practical ceiling is tens of megabytes — a few hundred thousand rows on a normal laptop. Larger than that and the tab will slow down or run out of memory; there is no server to hand the work to. Cell formatting, colours, formulas, charts and merged cells are not carried across: this converts values, which is what CSV and JSON can hold anyway. Rows that are completely empty are dropped, which is usually what you want from a sheet Excel padded out to row 1,048,576. Text files are read as UTF-8, so a very old CSV saved in a legacy codepage may need re-saving first. Password-protected workbooks have to be unlocked in Excel before this can read them.