Free online XLSX to CSV converter
Excel to CSV with the choices made explicit
Open an .xlsx and this page turns any sheet into delimited text for free, with no signup and no Excel installation: pick the sheet, the separator, the quoting rule and the date format, then copy the result or download it. Formula cells export the value Excel last calculated, merged ranges can repeat their value across the span instead of leaving holes, and dates are converted out of Excel’s serial day counts into ISO 8601. Workbooks up to 10 MB are unzipped and parsed in the tab.
- 100% free
- No signup
- Up to 10 MB
- Any sheet
- RFC 4180 quoting
Drop an .xlsx here, use Open .xlsx, or paste a file with Ctrl+V
Up to 10 MB. The file is unzipped and parsed inside this tab — payroll and customer exports never leave the machine.
How to convert Excel to CSV
Three steps, and every lossy decision is a dropdown rather than a surprise.
Open the workbook
Drop an .xlsx on the panel, use Open .xlsx, or paste a file with Ctrl+V (⌘V on a Mac). The package is unzipped in the tab with the browser's own inflate, and the parts that matter — the workbook, the shared string table, the styles and each worksheet — are parsed straight from their XML. A 0.94 MB workbook holding 20,001 rows across 8 columns is ready in about 227 milliseconds.
Pick the sheet and how it should read
Every sheet appears as a tab with its dimensions, hidden ones included and labelled. Then set the four things that decide what the text looks like: comma, semicolon, tab or pipe; ISO 8601, date-only, US short or the raw serial number for dates; the last calculated value or the formula source for formula cells; and whether a merged range repeats its value across the span or leaves the blanks the file actually contains.
Copy or download
The right pane shows the finished text with RFC 4180 quoting applied — a field is wrapped only when it contains the separator, a quote, a line break or a leading or trailing space, unless you tick Quote every field. Copy takes the whole thing even when the preview stops at 120,000 characters, and Download saves it as .csv, or .tsv when the separator is a tab, with an optional UTF-8 byte-order mark.
Technical specifications
| Accepted input | .xlsx workbooks written by LibreOffice Calc, Google Sheets, Excel 2007 and later, Numbers, openpyxl, pandas and anything else emitting ECMA-376 SpreadsheetML |
|---|---|
| Rejected by name | Pre-2007 .xls (OLE2/BIFF), .xlsb, OpenDocument .ods, password-protected packages and CSVs renamed to .xlsx — each is identified from its magic bytes and reported |
| Maximum input | 10 MB of package, 100,000 rows and 16,384 columns per sheet; a 0.94 MB workbook of 20,001 × 8 cells parses in about 227 ms |
| Separators and quoting | Comma, semicolon, tab or pipe; RFC 4180 minimal quoting or quote-every-field; CRLF or LF; optional UTF-8 BOM (3 bytes) |
| Date output | ISO 8601, date only, US M/D/YYYY or the raw serial — read from the cell's number format, with the 1900 and 1904 epochs both handled |
| Formulas and errors | Formula cells export the cached result by default or the expression on request; #N/A, #DIV/0! and the other six error values export as their text |
| Preserved exactly | Shared and inline strings including embedded newlines and _x000D_ escapes, boolean cells, and every hidden row |
| Processing location | Your browser — the workbook is unzipped locally and never uploaded |
Frequently asked questions
What happens to my formulas when I export to CSV?
You get the number, not the formula — a CSV has nowhere to put =SUM(B2:B40). Every formula cell in an .xlsx stores two things: the expression in an <f> element and the result of the last calculation in a <v> element, and the export uses that cached result. The consequence worth knowing is that if the workbook was written by a tool that never calculated — some export libraries write formulas with no cached value at all — those cells come out empty, and opening the file in Excel once and saving it fixes them. There is also a Formulas dropdown that writes the expression text instead, for when you are auditing a sheet rather than moving data.
Why do the accented characters break when I open the CSV in Excel?
Because Excel reads a .csv without a byte-order mark using the legacy system code page, not UTF-8, so Ştefan arrives as Åtefan. Tick UTF-8 byte-order mark and three bytes — EF BB BF — go in front of the file; Excel then reads it as UTF-8 on a double-click. Everything else you are likely to feed the file to, from pandas to psql to a Node script, is happier without the mark, which is why it is off by default.
What happens to merged cells?
By default the stored value is repeated into every cell of the span, because delimited text has no concept of a cell covering four columns. In the file itself a merged range is one value in the top-left cell plus a <mergeCell ref="A7:C7"/> record, and the other cells are genuinely empty — export them literally and a category column ends up with a value on the first row of each group and blanks underneath, which most downstream tools read as missing data rather than as repetition. Switch the Merged cells dropdown to leave the blanks in place when you want an exact transcription of the sheet.
Should I use commas or semicolons?
Use commas unless the file is destined for a double-click in a European copy of Excel, in which case use semicolons. Excel splits a .csv on the Windows list separator, which is a semicolon in German, French, Spanish, Italian, Dutch and Polish locales, so a comma file opens as one column and a semicolon file opens correctly — and the reverse is true on an English machine. Tab-separated text is the neutral choice: no locale uses a tab as a list separator, and tabs almost never occur inside spreadsheet values.
Why does my date come out as 45678 instead of a date?
That is the raw serial number, and it means the Dates dropdown is set to Excel serial or the cell had no date format attached. Excel stores a date as the count of days since 31 December 1899, with the time as a fraction of a day, and the only thing that makes 45678 look like a date on screen is the number format hanging off the cell. This page reads that format and converts on your behalf, so the default output is 2025-01-21 — pick date-only, US short or the serial itself if something downstream expects a different shape.
Does the export include hidden sheets and hidden rows?
Hidden sheets appear in the picker with a 'hidden' label and export normally if you select one, and hidden rows are exported as ordinary rows. Nothing is filtered out silently, because a row hidden by an autofilter looks identical in the file to a row hidden deliberately, and quietly dropping either would change your totals. If a sheet should not leave the workbook, do not pick it — everything stays in this tab either way.
Why does the file end its lines with CRLF?
Because RFC 4180 section 2 specifies CRLF as the record separator, and Excel writes and expects it. Untick CRLF line endings for plain LF if the file is heading into a Unix pipeline, a Git repository or a database COPY command, where the stray carriage returns turn up as \r at the end of the last field. Both are read correctly by every CSV parser worth using, so this is about what receives the file, not about correctness.
About converting Excel to CSV
An .xlsx is not a file format so much as a filing cabinet. Rename one to .zip, unzip it, and you get an OPC package: [Content_Types].xml declaring the MIME type of every part, _rels/.rels pointing at the workbook, xl/workbook.xml listing the sheets by relationship id, one xl/worksheets/sheetN.xml per tab, and two parts that make the sheets unreadable on their own — xl/sharedStrings.xml, where every distinct piece of text in the whole workbook is stored once and referred to by index, and xl/styles.xml, which is the only place that says a particular number is meant to be read as a date. A cell reading <c r="B2" t="s"><v>4</v></c> contains neither the number 4 nor any text; it contains a pointer into the string table.
That layout explains most of what converters get wrong. Skip the shared string table and every text cell becomes an integer. Skip the styles and every date becomes a five-digit number. Skip the _x000D_ escaping that OOXML uses for characters XML cannot carry and the literal text _x000D_ shows up in the middle of your addresses. Skip the relationship file and you read the sheets in the wrong order, because sheet1.xml is not necessarily the first tab. All four are handled here, and you can see the workbook’s own view of itself — sheet count, string table size, producing application — in the toolbar once a file is loaded.
Going the other way is a shorter story: CSV carries no types, no formats, no formulas and no spans, so exporting is a series of decisions about what to lose. This page makes each one a dropdown rather than a default. If you want the values as a data structure instead of as text, Excel to JSON keeps the numbers as numbers and the booleans as booleans, and if you are only trying to look at the result, the CSV viewer will put it back into a table without a round trip through a spreadsheet.
Where your workbook is processed
The file is read with FileReader and unzipped by your own browser; no part of it is uploaded, and the download is a Blob built in the same tab. That is the point of doing it this way — the workbooks people run through a converter are salary tables, patient lists and finance exports, and those should not be passing through anyone’s server on the way to a .csv.