Excel to CSV ConverterExcel to CSV

No workbook open

Drop an .xlsx, .xlsm or .xls file here

Choose a file to get started. It is read in this browser tab and never uploaded.

No CSV yet

Open a workbook on the left and the selected sheet appears here as CSV.

The file is read in this tab. Nothing is uploaded, so a customer list stays a customer list.
Success
Warning

What a spreadsheet loses on the way to CSV

CSV is the oldest export format any spreadsheet program has, and it is still the one every loader, mainframe job and command-line tool understands without an argument. Converting a worksheet to it is mostly bookkeeping — read the grid, write each row back out with commas between the fields, quote what needs quoting. The part worth slowing down for is what a cell actually holds before that happens, because the type it had in Excel does not survive the trip.

Dates are the easy half of that story. Excel does not store a date at all — it stores a count of days since an epoch and paints a display format over the top, so reading the raw value gives you 46243 and reading the display text gives you 8/9/26, which is either August 9th or September 8th depending on whose regional settings opened the file. This page reads the underlying value and writes ISO 86012026-08-09T12:34:56.000Z — into the CSV cell as plain text, so the ambiguity does not travel with it.

Long identifiers are where CSV genuinely differs from converting the same workbook to JSON. A cell Excel stored as text still comes through byte-for-byte here: 8901240544102066246 keeps every digit, 007 keeps its zeros. A cell stored as a number already lost precision before this page ever opened the file — Excel keeps roughly 15 significant figures in a numeric cell, so a 19-digit account number typed into a General column had its tail cut off at save time, and no converter, this one included, can put those digits back. JavaScript numbers being IEEE-754 doubles just means the rounding happens a second time on the way through, which is why this page counts and names the cells where it can tell.

Here is the part that only matters for CSV. In the JSON output of the sibling page, a text cell and a number cell still look different once they land — one is quoted, one is not, so the type survives in the shape of the file. CSV has no such marker. Quotes in a CSV field mean "this value contains a comma, a quote or a line break," not "this value is text," so once 8901240544102066246 and 007 are written out, they are both just digits on a line with nothing to tell a later reader which one was supposed to stay exact. That is not a defect in this converter — it is what CSV is. Anyone consuming the file downstream has to be told separately which columns are identifiers, or has to guess.

Converting a workbook

  1. Choose or drop your file.xlsx, .xlsm and the older .xls all work. Drag it onto the left pane or use Upload. The file is read in this browser tab — it is never uploaded, which is the point when the spreadsheet is a customer list. To see it working without hunting for a file, Sample builds a small two-sheet workbook and opens it exactly as an upload would.
  2. Pick the sheetWorkbooks usually hold more than one. Only the selected sheet is read, so a file with twenty tabs costs nothing extra to open.
  3. Choose how much gets quotedOnly where needed follows RFC 4180 and wraps a field only when it holds a comma, a quote or a line break — the smaller, more common file. Every field quotes everything, which some older loaders expect and refuse to parse without.
  4. Check the warning if one appearsAn amber badge means at least one numeric cell held more digits than a spreadsheet can keep. It names the cells so you can go back and check them in the source.
  5. Copy or downloadComma-separated text, RFC 4180 line endings. From here CSV to Table and CSV Formatter are one click away if you want to look at it differently or reshape the delimiter.

If a column of IDs matters, format it as Text in Excel before anyone types into it. Formatting an existing numeric column as Text does not restore the lost digits — it only changes how what is left is displayed, which is exactly the trap that makes people think the problem is fixed.

Four columns, and two you can no longer tell apart

The first two columns hold identical-looking digits in the workbook — one cell was formatted as Text, the other as a number — but by the time they are CSV, both are just unquoted digits on a line. The number column already lost its tail in Excel before this page ever saw it; the text column did not, and CSV has no way left to say which is which.

subscribers.xlsx → subscribers.csv Text survives, numbers may not
subscribers.xlsxSheet 1 · mixed cell formats
iccid_texticcid_numpostcodeactivated
8901240544102066246890124054410206624600709/08/2026

Column 1 formatted as Text · column 2 as a number

subscribers.csvISO dates · quoted only where needed
iccid_text,iccid_num,postcode,activated
8901240544102066246,8901240544102066000,007,2026-08-09T00:00:00.000Z
# iccid_num flagged: digits lost before the file was saved

When you would use this

Loading into a database or a bulk import tool

A warehouse staging table, PostgreSQL's COPY, MySQL's LOAD DATA INFILE — nearly every bulk loader wants a flat delimited file, not JSON, and CSV is the format all of them agree on. The precision warning matters most here, because a mangled identifier will not fail the import — it will just quietly attach to the wrong row.

Feeding a system that has no JSON parser

Plenty of the tooling that still runs a business — mainframe batch jobs, older ETL pipelines, EDI-adjacent formats — reads delimited text and nothing structured. The workbook usually starts life in Excel regardless, so this conversion sits between the two more often than anyone plans for.

Turning a workbook into something you can diff

An .xlsx is a zip full of XML — you cannot diff it, grep it, or review it in a pull request. A CSV export can sit in version control next to the code that reads it, and CSV Formatter normalises quoting afterwards if two exports need to line up byte for byte.

Checking an export by reopening it

Double-clicking a CSV hands it straight back to Excel, which re-guesses every column's type from the digits alone — the same guessing that caused the original rounding, run again on the way back in. A column that came through this page as exact text can still get reinterpreted as a number the next time someone opens it carelessly; the FAQ below covers how to stop that.

What this converter does carefully

  • Quoting follows RFC 4180, and only wraps a field when it actually needs it — a comma, a quote or a line break inside the value. Every field is there for loaders that insist on quotes regardless.
  • Text cells are passed through byte-for-byte. Leading zeros, long ICCIDs and account numbers stored as text arrive exactly as typed.
  • Dates become ISO 8601, not serial numbers or locale strings. No guessing whether 8/9/26 is August or September.
  • Lossy numeric cells are counted and named. This is the honest limit of what a converter can do about a spreadsheet, and it is more than the alternatives offer.
  • A field with leading or trailing spaces is quoted even though RFC 4180 allows it bare — every spreadsheet strips that whitespace on import otherwise, so quoting is the only way to say the space is data.
  • Every sheet in the workbook is available, and only the one you pick is read.
  • Blank cells stay blank rather than collapsing the row, so the field count stays consistent line to line.
  • Nothing is uploaded. No server sees the file.

Questions people actually ask

Why is my ID wrong by a few digits?

Because it was stored as a number, and that happened when the value was typed into Excel, not when this page converted it. A spreadsheet keeps about 15 significant figures in a numeric cell, so a 19-digit value already lost its tail before the file was saved. The amber warning names the cells it happened to. The fix has to happen in the source: format the column as Text, then re-enter the values.

Does the CSV still say which columns were text and which were numbers?

No, and this is different from converting the same file to JSON. A CSV field is just characters between delimiters — quoting a field marks it as containing a comma or a line break, not as being text rather than a number. Once 007 and 42 are written out, nothing in the file itself says one started life as a number and the other did not. If that distinction matters downstream, it has to be documented separately, or the destination system has to be told which columns to treat as identifiers.

If I open the CSV back in Excel, will the numbers round again?

Possibly, and this catches people who treat the CSV as a safe archive. Double-clicking a CSV runs Excel's ordinary text import, which guesses each column's type from what the digits look like — a long ID gets reinterpreted as a number and re-rounded, a value like 007 can lose its leading zeros, on the way in this time rather than the way out. Import through Data > From Text/CSV and set the identifier columns to Text explicitly, rather than opening the file directly.

What happens to formulas?

You get the last calculated result, which is what the file stores alongside the formula. If a workbook was saved without recalculating, that value can be stale — a good reason to open and re-save before converting anything important.

Does this treat the first row as a header?

No, on purpose. Every row, whatever it contains, is written out as one CSV line exactly as it appears in the sheet — CSV does not have a concept of column names, so there is nothing to key by and nothing to ask about. If your sheet's first row happens to be a header, it becomes the first line of the file, which is the convention every CSV reader already expects.

Does it handle .xls as well as .xlsx?

Yes, along with .xlsm. The modern .xlsx format is a zip of XML defined by ECMA-376; the older .xls is a binary format. Both are read here.

Related tools

Worth reading

  • SheetJS documentation – The library that reads the workbook here, including how cell types and dates are modelled
  • RFC 4180 – The closest thing CSV has to a specification, including the quoting rules this page follows