Skip to content
FireConvert
11 min read

Convert XLSX to CSV — multi-sheet workbooks, encoding, and the formula problem

CSV is plain text. XLSX is a ZIP file full of XML. When you convert one to the other, formulas collapse to their last computed values, formatting disappears, charts evaporate, and a workbook with six sheets has to decide which one becomes the CSV. "XLSX to CSV" sounds like one button. It's at least five decisions — encoding, delimiter, quote style, sheet selection, and date format — and every converter makes them silently. Here's the honest version.

The short version

  1. Drop your .xlsx on the converter.
  2. If the workbook has multiple sheets, pick which one becomes the CSV (or choose "all sheets" to export one CSV per sheet in a zip).
  3. Pick a delimiter: comma (default, works everywhere) or semicolon (required for most European Excel locales where comma is the decimal separator).
  4. Pick encoding: UTF-8 with BOM if the result will open in Excel on Windows, plain UTF-8 for anything else.
  5. Download. One CSV per sheet, headers intact, values flattened to text.

That's the happy path. The rest of this post is for when your CSV opens with a column of #####, when Excel puts everything in column A, when a scientific-notation ZIP code lost its leading zero, or when you're choosing between this and Excel's built-in "Save As."

What XLSX actually is (and why the conversion is lossy)

Open an .xlsx file with an unzipper. It's a ZIP archive containing a folder of XML files — one per sheet, one for the shared-strings table, one for styles, one for the workbook manifest. The XLSX format is officially "Office Open XML Spreadsheet," standardized as ISO/IEC 29500. It carries:

  • Cell values — numbers, strings, booleans, dates (stored as serial numbers since 1900 or 1904).
  • Formulas — the expressions that computed those values.
  • Formatting — fonts, colors, borders, number formats, conditional formatting.
  • Structure — multiple sheets, merged cells, hidden rows/columns, frozen panes, named ranges.
  • Embedded objects — charts, images, pivot tables, macros (in .xlsm).

CSV is none of that. A CSV is a text file where each line is a row and each comma-separated chunk is a cell. There is no formatting, no formulas, no second sheet, no data types beyond "string of characters." Converting XLSX to CSV is fundamentally a flattening operation, and the flattening is where every conversion tool differs.

XLSX vs CSV: what survives the conversionWhat survives XLSX → CSVCell values100%Headers100%FormulaslostFormattinglostChartslostSheet 2+lostFormulas survive only as their last computed value. Sheet 2+ requires a multi-file export.
The CSV carries values and headers; everything else lives only in the XLSX.

Multi-sheet workbooks — which sheet becomes the CSV?

CSV is a single table. If your XLSX has six sheets — Q1, Q2, Q3, Q4, Summary, Notes — the converter has to decide. Three honest options, three different right answers:

Active sheet (Excel's default on "Save As CSV")

Excel only writes the currently-visible sheet when you "Save As CSV." That's the single biggest gotcha people hit with the built-in export — they save, open the CSV, and five sheets of data are gone. If you use Excel itself, save each sheet separately or use a macro.

Pick a sheet by name (our default)

Our converter reads the workbook, lists every sheet by name, and lets you pick. Most use cases have one sheet that actually holds the data table you want as CSV; the others are summary tabs, lookups, or scratch space.

All sheets — one CSV per sheet, zipped

Sometimes you genuinely want every sheet. We can export the whole workbook as a ZIP of CSV files (one per sheet, named after the sheet name). This is the right answer for data pipelines that import each sheet into a separate database table.

Practical rule: if the workbook was built by hand and one sheet is the canonical data, pick that sheet. If the workbook is a report with multiple data tables (one per quarter, one per region), export all sheets.

Delimiter — comma vs semicolon isn't about preference

The "C" in CSV stands for comma, but plenty of CSVs don't use commas. In Germany, France, Italy, Spain, Brazil, and most of continental Europe, the decimal separator is a comma (1,25 means one point two five), so Excel in those locales uses semicolon as the CSV delimiter and treats a comma-delimited file as a single-column mess.

If you send a comma-CSV to a German colleague, they'll open it and see every row crammed into column A. If you send a semicolon-CSV to a US Python script expecting commas, the same thing happens. Three rules:

  • US / UK / Asia (mostly): comma. This is the default.
  • EU (continental): semicolon. If the destination is Excel in a locale where comma is the decimal separator, you need semicolon or Excel will chunk it into column A.
  • Tab (TSV). Use tab when your data has commas and semicolons in the text (addresses, free-form descriptions). Tabs almost never appear in real data, so quoting is rarely needed.

Our tool lets you pick, previews the first ten rows with the chosen delimiter so you can see the split before you commit, and warns if your data contains the delimiter character unquoted.

Quote escaping — when a cell contains the delimiter

The classic CSV problem: a cell contains a comma. If you're using comma as delimiter, the cell needs to be quoted:

Name,Address
Ada Lovelace,"10 Downing St, London"

The spec (RFC 4180) says: quote any cell that contains the delimiter, a newline, or a double-quote. Double-quotes inside quoted cells are escaped by doubling: she said ""hi"". This is mostly fine until someone exports from a tool that uses backslash-escape (\") — not RFC-4180, and it'll break a lot of parsers.

Our default is RFC-4180 (double-quote doubling). We also offer "always quote" (every field wrapped) for consumers that expect it, and "minimal" (only quote when required), which produces the smallest files.

Encoding — UTF-8 with BOM for Excel-on-Windows

Your CSV holds text. Text has an encoding. The vast majority of modern tools default to UTF-8, which handles every character from every language. But Excel on Windows, by default, still assumes the legacy Windows-1252 codepage when you double-click a CSV — so an emoji or a Chinese character shows up as ’ or ä½ å¥½ (mojibake).

The fix: write the file as UTF-8 with BOM (a three-byte marker EF BB BF at the start of the file). The BOM tells Excel "this is UTF-8," and suddenly the accented characters render correctly.

  • UTF-8 with BOM — best default for "someone will open this in Excel on Windows." Costs three bytes.
  • UTF-8 (no BOM) — best for programmatic consumers (Python pandas.read_csv, Node, Go, databases, data pipelines). Many pipelines treat the BOM as a literal character in the first column header, which is the other common CSV bug.
  • UTF-16 LE — Excel loves it (it auto-detects), but it's twice the file size and some older tools can't read it. Rarely the right pick.
  • Windows-1252 / ISO-8859-1 — legacy. Only use if the downstream tool explicitly needs it.

Date handling — the silent-loss problem

Excel stores dates as serial numbers: 44562 is January 1, 2022 (days since 1900-01-01). When you export to CSV, the converter has to format each serial number back to a string. Which format?

Excel's own "Save As CSV" uses your OS locale — which means a file saved in the US shows 1/1/2022 and a file saved in the UK shows 01/01/2022 for the same date. If the downstream consumer parses dates, this is a portability nightmare.

Our tool offers three explicit date formats:

  • ISO 8601 (2022-01-01) — the only locale-independent format. Default. Sort-stable (alphabetic sort equals chronological sort). Works with every database, every data library.
  • Locale (US 1/1/2022 or UK 01/01/2022) — matches Excel's behavior, useful when a human will read the CSV.
  • Serial number (44562) — passes the Excel integer through unchanged. Use only if the downstream consumer re-imports into Excel and you want a round-trip.

Formula collapse — what happens to =SUM(A1:A10)

Formulas live in the XML. When you export to CSV, the converter reads the XLSX's cached result of each formula and writes that value. The formula itself is discarded. If the XLSX was generated by a tool that didn't cache results (rare, but possible with some programmatic generators), the CSV cell is empty.

This is rarely a problem — the cached value is almost always what you want — but it has one consequence: a round-trip XLSX → CSV → XLSX is not idempotent. Your new XLSX has static values, not formulas. If the original workbook's logic needs to keep computing, don't go through CSV; edit the XLSX directly.

How our tool compares (honestly)

XLSX-to-CSV is commodity. What differs is privacy, locale awareness, multi-sheet handling, and whether the tool exposes the five decisions above or hides them. Honest scoresheet:

ToolCostWhere it winsWhere it loses
FireConvertAppFreeIn-browser, no upload, picks sheet / delimiter / encoding / date format / quote style explicitly, can export all sheets as a ZIP, previews the first 10 rows with your chosen delimiterVery large workbooks (>50 MB / 1M rows) are RAM-bound; no formula-preserving round-trip (by design)
Excel "Save As CSV"Free (if you own Excel)Zero install, perfect fidelity of the cached values, respects your OS locale automaticallyOnly exports the active sheet (you lose all other sheets silently); encoding depends on OS and version (some write Windows-1252 without a BOM); no batch of sheets
Google Sheets exportFreeClean UTF-8 (no BOM), one CSV per sheet via "Download as CSV" once per tab, good for collaborative editing before exportRequires uploading the XLSX to Google Drive first; locale-dependent date formatting; no multi-sheet zip (you click through each tab manually)
CloudConvert / ZamzarFree w/ daily caps, paid tiersWide format matrix across their suite; API accessUploads the whole workbook to their servers (privacy); default settings are US-locale; sheet selection is an extra step; size caps trigger paywall fast
Python pandas (read_excelto_csv)FreeFull control over every decision in this post; scriptable; handles 10M-row workbooks that crash ExcelRequires installing Python + pandas + openpyxl; overkill for one-off conversions; default dtype inference can silently change types (numeric string IDs become floats)

Honest summary: if you're scripting, pandas is the right tool. If you own Excel and only need the one sheet you have open, "Save As CSV" is fine — just know it drops the other sheets. For anything that needs multi-sheet export, explicit delimiter control, UTF-8-with-BOM for Excel, or privacy from cloud upload, our XLSX to CSV converter is the short path.

Where our tool works well — and where it doesn't

Works well

  • Mid-size workbooks (up to ~100k rows, ~50 MB) with multiple sheets
  • Locale-specific exports — comma or semicolon, US or EU date formats, UTF-8 with or without BOM
  • Multi-sheet ZIP export for data pipelines that want one CSV per table
  • Privacy-sensitive data (stays in your browser; no upload)
  • Chains cleanly into JSON to CSV or CSV to XLSX for round-trip workflows

Doesn't work (well) yet

  • Giant workbooks (>1M rows or >200 MB) — browser RAM limits. Use pandas or duckdb for that scale.
  • XLSX with heavy macros (.xlsm) — macros are discarded; if the macros compute values, you need to run them in Excel first, save, then convert.
  • Password-protected workbooks — decrypt in Excel first, then export.
  • Preserving cell formatting — CSV has none by definition. If you need color or bold to survive, you need a different format (keep it as XLSX, or use HTML/PDF export).

Tips for the best result

  • Default to UTF-8 with BOM if Excel-on-Windows is the audience. It fixes 90% of "my characters look weird" reports.
  • Use semicolon for European Excel targets. Comma-delimited CSVs look fine in a text editor but crash into column A in German / French / Italian Excel.
  • Use ISO 8601 dates (2022-01-01) for programmatic consumers. They sort correctly, parse correctly, and don't care about locale.
  • Check the preview. Our 10-row preview shows exactly how your data will split with the chosen delimiter. Catch a mis-parse before you download.
  • If the XLSX came from another tool, peek inside first. Unzip it (.xlsx is a ZIP), look at the sheet count and the structure. A "single-sheet" workbook from a BI tool often has a hidden data sheet that's the real export target.
  • For the reverse, use a round-trip-safe converter. CSV to XLSX is the counterpart — the tricky part is type inference, not format.

Common questions

Will my formulas survive the CSV conversion?

No — CSV has no concept of a formula. The CSV carries the last computed value of each formula. If you need the formulas preserved, keep the file as XLSX. If you need the output to keep recomputing, you need a spreadsheet format, not CSV.

I have six sheets — can I get all of them as CSV?

Yes. Pick "All sheets" in our converter and you'll get a ZIP containing one CSV per sheet, named after the sheet name. Excel's built-in "Save As CSV" only exports the active sheet, which is the #1 silent-data-loss bug with the native export.

Why are my ZIP codes showing as 1.23E+4?

That's scientific notation, applied by Excel when you reopen the CSV, not an artifact of the export. When Excel re-opens a CSV, it auto-types numeric columns — and a ZIP code like 12345 becomes a number, not a string. The fix is in the re-import: use Excel's Data → From Text/CSV wizard (not double-click), and set the ZIP column to "Text." Or use our CSV to XLSX converter, which lets you declare column types explicitly.

UTF-8 or UTF-8 with BOM — which should I pick?

UTF-8 with BOM if the CSV will open in Excel on Windows. Plain UTF-8 (no BOM) for every other consumer — Python, databases, data pipelines, Google Sheets. The BOM is three bytes; in a pipeline it sneaks into the first column header and causes the classic "why does my first column have  in front of it?" bug.

Can I convert a CSV back to XLSX?

Yes — use our CSV to XLSX converter. The tricky part of that direction is type inference (ZIP codes, dates, leading zeros), not the format conversion itself.

Do my files get uploaded to your server?

No. We parse XLSX (a ZIP of XML) in your browser, stream rows out to CSV in your browser, and hand you a download. The file never leaves your machine. Paid tiers raise the size caps for very large workbooks but use the same browser-side path.

Is this tool really free?

Yes. No watermark, no sign-up, no daily cap. Free-tier caps per-file size; paid tiers lift that ceiling and add an API endpoint for batch jobs.

Is CSV the right target at all?

Not always. If the downstream consumer is a database, consider NDJSON (JSONL) — it's unambiguously typed and doesn't have encoding / delimiter / quote issues. If the consumer is another spreadsheet, keep it as XLSX. CSV is the lowest common denominator, not the best format — it's the right pick when you need to talk to everything and everybody.

Ready?

XLSX to CSV →. Drop the workbook, pick the sheet, pick the delimiter, pick the encoding, download the CSV. Free, in your browser, no sign-up, no watermark. Need the reverse? CSV to XLSX. Coming from an API response? JSON to CSV.