How to convert Excel to CSV
- Drop an
.xlsx,.xls,.xlsm,.xlsbor.odsfile into the box above. It is read in your browser and never uploaded. - Tick the sheets you want. Every visible sheet is ticked to start with, and hidden sheets are listed but left unticked.
- Read the report. It names any cell that Excel's own export would have written differently, and any formula with no result to export.
- Press Download .csv. With more than one sheet ticked you get a ZIP containing one CSV per sheet.
What Excel's own Save As gets wrong
Save As → CSV exports only the sheet you are looking at. Excel shows a warning about that, and it also means a twelve-sheet workbook takes twelve saves. The bigger problem is quieter: Excel writes each cell as it is displayed, not as it is stored. Anything the cell format hides is lost from the CSV, and nothing on screen tells you that happened.
| The cell holds | Formatted as | Excel's CSV | This converter |
|---|---|---|---|
| 3.14159 | Two decimals | 3.14 | 3.14159 |
| 1234567890123 | General, normal width | 1.23457E+12 | 1234567890123 |
| 1234.5 | Currency | "$1,234.50" | 1234.5 |
| 45366 | Date | 3/15/2024 | 2024-03-15 |
| 721 | Zero-padded, 00000 | 00721 | 00721 |
The first two rows lose precision permanently. The currency row is still correct, but now it is text with a dollar sign and a thousands separator, which most importers reject. The last row shows the exception: when a number is padded with zeros for display, the padded form is the data. Postcodes and employee numbers are stored this way, so padded values are written as they appear and the report counts them.
If you need the displayed text, for a report that has to match the screen, set Numbers to As shown in Excel. The report then lists the values that were rounded, so the choice is deliberate.
Dates come out as ISO 8601
A date in Excel is the number of days since 31 December 1899. Excel counts one day
extra because it keeps a 29 February 1900 that never existed, a bug copied from Lotus
1-2-3 on purpose. Only the cell's format says a number is a date. Converters that
ignore formats write 45366. Converters that copy the display write
3/15/24, which a program in another country may read as the 3rd of the
15th month. Here every date-formatted cell becomes 2024-03-15,
date-and-time formats become 2024-03-15 12:00:00, and time-only formats
become 18:00:00. Durations formatted as [h]:mm, such as 36
hours, are not dates and are written as shown.
Workbooks created in older Mac versions of Excel may use the 1904 date system, which counts from 1 January 1904. The same stored number then means a date four years and one day later. The workbook setting is read and the dates are corrected, and the report says when this happened.
Formulas without a result
A CSV holds values, so each formula is exported as the result Excel saved with the file. Files produced by scripts, database exports and reporting tools often contain formulas that were written but never calculated, so there is no saved result at all. The library underneath this page reports those cells as 0, and we measured it doing so. A 0 in a total column looks like real data. These cells are left empty instead and the report names each one. Open the file in Excel, save it, and convert again to get the calculated values.
Merged cells, hidden rows and hidden sheets
A merged area stores its value in the top-left cell only, so the default export matches Excel: one value and some empty cells. For data you will filter or import, tick Fill merged cells to repeat the value across the merge so every row is complete. Hidden rows and columns are exported unless you tick the option to leave them out, and the report says how many there were either way. Hidden sheets appear in the sheet list unticked. Workbooks often keep lookup tables or old data in hidden sheets, and exporting them by accident is how data leaks.
The CSV file itself
The output is UTF-8, so “Çağla”, “Zoë” and Japanese text survive. Excel's plain CSV (Comma delimited) option uses the Windows code page instead and replaces characters it cannot encode with question marks. Fields containing the delimiter, a quote or a line break are quoted as RFC 4180 requires, so a multi-line address stays one cell. Every row has the same number of fields, which keeps importers from shifting columns. Choose a semicolon for European Excel, tab for TSV, and LF line endings for Unix tools. The byte order mark is off by default. Excel needs it to recognise UTF-8, but many importers read it as part of the first column name.
Next steps
Excel to JSON turns a sheet into typed objects for code. CSV to Excel goes back the other way without losing leading zeros. A large export can be broken up with split CSV, and CSV to JSON converts the result onward. All of them are on the data tools page.