Excel to CSV Converter
Upload an Excel workbook, choose a sheet, preview the CSV, and download the result.
Drop your files here or click to upload
Supports .xlsx, .xls, .xlsm, .xlsb · up to 50MB · or paste a file from your clipboard
How to Convert Excel to CSV
- Drop in a workbook - .xlsx, .xls, .xlsm and .xlsb are all read, in the browser.
- Choose the sheet - a workbook with more than one sheet gets a dropdown next to the file name. CSV holds one grid, so one sheet is exported at a time.
- Check the preview - the first 100 lines of the actual output are shown, not a re-rendered table, so what you read is what downloads.
- Download - the file keeps the workbook's name with a .csv extension.
What the export writes
One line per worksheet row, fields separated by commas, rows separated by a line feed. A field is quoted only when it needs to be - that is, when it contains a comma, a double quote or a line break - and a double quote inside a quoted field is written twice. Empty cells produce nothing at all between the commas.
Region,Note,Revenue North,"Q1, revised",42000 South,"He said ""ship it""",36500.5 East,,
Numbers are written with floating-point noise trimmed to twelve significant digits, so a subtraction the workbook displays as 57.81 exports as 57.81 rather than 57.809999999999945. The CSV and the site's viewer always agree on a number.
Encoding, and why the byte order mark matters
The download is UTF-8. When the text is entirely ASCII it is written with nothing in front of it; when it contains any non-ASCII character - an accent, a currency symbol, a name in a non-Latin script - a three-byte UTF-8 byte order mark is added first.
That is not decoration. Excel on Windows opens a double-clicked .csv using the system ANSI code page unless a mark tells it otherwise, so a correctly exported Café would come back as Café. Adding the mark only when the file needs it keeps ASCII exports byte-for-byte plain for the scripts and loaders that have never had to cope with one.
How each kind of cell exports
| In the workbook | In the CSV |
|---|---|
| 15/03/2023 (a date) | 45000 - the serial number behind it |
| 09:30 (a time) | 0.395833333333 - a fraction of a day |
| $1,234.50 | 1234.5 |
| 15% | 0.15 |
=SUM(A1:A9) | The cached result, not the formula |
| TRUE | true, lower case |
#N/A, #DIV/0! | An empty field |
| A merged range | The value once, in the top-left cell; the rest empty |
Edge cases
- Batch mode exports the first sheet.Dropping two or more workbooks converts each one's first sheet and returns a ZIP; the sheet dropdown belongs to the single-file path.
- The used range is exported whole. Blank rows above the table and blank columns to its left come out as empty fields, because they are inside the range the workbook declares.
- Hidden rows and columns are still exported. Hiding is a display setting; the data is still there.
- Leading zeros survive if they were text. A ZIP code stored as text exports as
01234. One stored as a number was already1234in the workbook and exports that way. - Long numbers are written in full. A 16-digit card number stored as a number will have been rounded by Excel itself long before this page sees it; store such values as text.
- A stray carriage return on its own inside a cell does not trigger quoting, only a line feed does. It is rare, and worth knowing if your consumer is a strict RFC 4180 parser.
When to use a different tool
- You want every sheet as its own file: Excel Splitter first, then convert the pieces.
- Your target needs tabs rather than commas: Excel to TSV.
- Going the other way: CSV to Excel, or CSV Viewer to check a file before importing it.
- You need structure rather than a flat grid: Excel to JSON.
- The workbook needs tidying first - stray blank rows, trailing spaces, duplicate keys: Excel Cleaner.
What's next?
Keep going with one of these tools.
Frequently Asked Questions
Excel stores a date as a serial number and displays it through a number format; the export writes values, not formats, so 15 March 2023 comes out as 45000. The same applies to times (a fraction of a day), currency (1234.5 with no symbol) and percentages (0.15 rather than 15%). If the CSV is going somewhere that needs readable dates, add a column in the workbook with =TEXT(A2,"yyyy-mm-dd") and export that.
Yes. The file is written as UTF-8, and a byte order mark is added when - and only when - the text contains a non-ASCII character. That mark is what makes Excel on Windows read the file as UTF-8 instead of the system code page, so Cafe with an accent stays intact. A pure ASCII export gets no mark, so nothing that has always parsed the file plainly has to start coping with one.
Not here - the separator is always a comma. If your regional settings make Excel expect semicolons, a double-click will show everything in one column; use Data > From Text/CSV and choose Comma in the import dialog. For tab-separated output, use the Excel to TSV tool instead.
The first. Dropping two or more files switches to batch mode, which converts each workbook's first sheet and hands back a ZIP - the sheet dropdown only applies when you convert one file at a time. If you need a specific sheet from each of several workbooks, convert them one by one.
A field is wrapped in double quotes only when it contains a comma, a double quote or a line break, and any double quote inside it is doubled. Everything else is written bare, so the file stays readable in a text editor. Rows are separated by a line feed rather than a carriage return plus line feed; Excel, Google Sheets and every mainstream parser read that fine.
A formula cell exports the value it last calculated to, not the formula. A cell holding #N/A, #DIV/0! or another error exports as an empty field. A merged range exports its value once, in the top-left cell, with the cells it covered empty.