Convert Excel to CSV — Free, Private, In-Browser
An .xlsx file is a zipped bundle of XML — multiple sheets, formulas, cell styles, merged regions, and per-cell types all packed together. CSV is the opposite: one flat sheet of untyped text. Converting Excel to CSV is about extracting the tabular data from a spreadsheet so a pipeline can actually read it — a database loader, a dbt seed, pandas, or DuckDB, none of which want to parse a workbook. One thing to be clear about up front: this reads the first sheet of the workbook only. If your file has multiple tabs, the others are ignored, so move the sheet you want to the front or split it out before converting.
Because CSV has no notion of types or logic, everything collapses to text on the way out. Formulas are replaced by their last computed value — the cached result Excel stored in the file, not a fresh recalculation, so if the workbook was saved with stale results, that is what you get. Dates come through as ISO-ish strings rather than Excel's underlying serial numbers, which sidesteps the 1900/1904 epoch confusion. The first row is treated as the header. Everything that makes a spreadsheet a spreadsheet — merged cells, fonts, fills, conditional formatting, number formats, column widths — is dropped, because none of it has a CSV representation. What lands in the file is the cell values and nothing else.
A few practical notes: a header row is written from the first row, empty cells become empty fields (not the string "null"), and values containing commas, quotes, or newlines are quoted per RFC 4180 so the output parses cleanly. There is no compression, so the CSV is usually larger than the .xlsx it came from — an .xlsx is zipped, a CSV is not. If commas in your data worry you, a downstream TSV step is safer. The whole thing runs locally in your browser: SheetJS parses the workbook client-side and writes the CSV, so the file is never uploaded and nothing about its contents ever crosses the network.
Drop a file or click to browse
Drop a Excel file — processed locally, never uploaded
Frequently asked questions
- My workbook has multiple sheets — what gets converted?
- Only the first sheet. SheetJS reads the first worksheet in the workbook and writes it to CSV; the other tabs are ignored. If you need a different tab, move it to the front in Excel, or save each tab as its own file and convert them one at a time.
- What happens to formulas?
- They're replaced by their last computed value — the result Excel cached when the file was saved, not a live recalculation. If the workbook held stale results, the CSV will carry those stale values. Open and re-save the file in Excel first if you need the calculations refreshed.
- How are dates, times, and number formats handled?
- Dates and times come out as ISO-ish text strings rather than Excel's internal serial numbers, so you avoid the 1900-vs-1904 epoch offset entirely. Display formatting — currency symbols, percentages, thousands separators, custom masks — is dropped; you get the underlying value as plain text.
- Is my file uploaded anywhere?
- No. The Excel→CSV conversion runs entirely in your browser via DuckDB-WASM. Your file never leaves your device.
- How large a file can I convert?
- It's bounded by your browser's available memory rather than any server limit — files in the hundreds of MB are routine. DuckDB runs single-threaded here, so very large files just take a little longer.
- Do I need an account?
- No — it's free and requires no sign-up.