Skip to main content

Excel to CSV Converter Guide

Convert .xlsx, .xls, .xlsb, and .ods to CSV offline on your desktop. Files never leave your device. No upload limit. Free for Mac and Windows.

What is Excel to CSV conversion?

Excel files (.xlsx, .xls, .xlsb, .ods) are binary spreadsheet workbooks. They hold cell values, but also formulas, number and date formats, multiple sheets, charts, conditional rules, named ranges, and pivot tables. CSV (Comma-Separated Values) is plain text — one row per line, columns separated by commas, no formatting, no formulas, no second sheet. Converting Excel to CSV strips everything except the cell values from the first sheet.

Almost every data pipeline expects CSV, not native Excel. Postgres COPY, BigQuery LOAD, Spark spark.read.csv, pandas read_csv, MySQL LOAD DATA INFILE, ClickHouse, DuckDB, and most ETL tools accept CSV directly but cannot ingest .xlsx without a converter step. Excel is the human-authoring format. CSV is the wire format that downstream systems consume. The conversion sits between the two.

The non-obvious part is what gets LOST. Multi-sheet structure flattens to one CSV per sheet (and most converters silently drop everything after the first sheet). Cell formatting is display-only — a number stored as 1234567 with display format '#,##0' shows as '1,234,567' in Excel but the CSV correctly writes 1234567. Formulas are replaced by their evaluated values; the formula source text is gone. Charts, conditional formatting, comments, named ranges, pivot tables, and data validation rules — all stripped. The CSV is the data, not the presentation.

What survives the conversion (and what doesn't)

The single most useful thing to know before you convert. Three buckets: what makes it through cleanly, what converts but needs a second look, and what does not survive at all.

Survives cleanly

Reliable across all converters:

  • Cell values — numbers, text, booleans, ISO date strings
  • Header row (Excel row 1 becomes the CSV header line)
  • The FIRST sheet's data, formula evaluations, text-formatted leading zeros
  • UTF-8 text — accents, CJK characters, emoji

FileHop handles all of these via calamine + the Rust csv crate.

Converts but watch the shape

Common surprises:

  • DateTime cells emit Excel's serial number (e.g. 45292.0) — not '2024-01-01'. Only DateTimeIso source cells round-trip as ISO strings.
  • Formula errors — #REF!, #DIV/0!, #N/A become literal 'ERROR: <kind>' strings, not empty cells
  • Merged cells flatten to top-left value only; continuation cells become empty
  • Empty trailing rows / columns are not auto-trimmed — Excel's used range is preserved verbatim

FileHop follows calamine's defaults here — name these in your QA pass before piping to a warehouse.

Does NOT survive

You need a different strategy:

  • Multi-sheet workbooks — FileHop writes ONLY the first sheet today. For all sheets, use xlsx2csv --all-sheets, LibreOffice Calc with a macro, or convert each sheet manually.
  • Charts, images, shapes, conditional formatting, cell colors, borders — CSV has no concept of these
  • Comments, named ranges, pivot tables, data validation, formula source text — Excel-specific structures the CSV format cannot represent

Surfacing this is the trust signal. No SERP competitor maps the terrain this honestly.

Most browser converters silently drop everything in the second category and pretend the third doesn't exist. Naming what gets lost is what makes the conversion safe to automate.

How to convert Excel to CSV in FileHop

Four steps. Works on a 10-row .xlsx, a multi-gigabyte enterprise export, and the legacy .xls or .xlsb files calamine still reads.

1

Open FileHop

Launch the FileHop desktop app on Mac or Windows. The data converter is on the home screen.

2

Drag your Excel file in

Drop the .xlsx, .xls, .xlsb, or .ods file onto the data converter panel, or use File → Open. FileHop calls calamine::open_workbook_auto, which detects the workbook format automatically — broader format coverage than the .xlsx-only browser tools.

3

Select Convert to CSV

Pick CSV from the output-format dropdown. FileHop reads the FIRST sheet, evaluates every formula, and prepares the CSV.

4

Click Convert

FileHop writes the .csv next to the source Excel file (UTF-8, comma-delimited). If the target name already exists, the filename is auto-uniquified with _1, _2, etc., so you never silently overwrite a previous export.

Formulas evaluate to values. First sheet only. UTF-8 output. Auto-unique filenames. The workbook never leaves your device.

Why offline beats online for Excel → CSV

Browser converters dominate the search results, but every one of them fails on at least one of the three things below. This is the editorial case for converting on your own machine.

Privacy: PII and sensitive workbooks

Financial models, customer lists, HR rosters, M&A spreadsheets, healthcare data, internal forecasts — these are the Excel files people most often want to convert, and they are the same files that should never traverse a third-party server. CloudConvert, Convertio, FreeConvert, and Aspose all upload the whole workbook to their infrastructure (their own privacy pages confirm this). 'Files deleted in 24 hours' is policy, not architecture. Offline desktop conversion has zero network surface. Disconnect from the internet and the conversion still runs. That is the only verifiable guarantee.

File size: streaming vs the upload queue

Most browser converters cap free uploads at 100 MB to 1 GB. CloudConvert's free tier limits 25 conversions per day. Convertio caps at 100 MB. Multi-million-row enterprise exports never complete — they queue, time out, or hit a paywall. FileHop reads the workbook with calamine (a fast Rust XLSX/XLS reader) and streams the rows out via the csv crate. There's no upload step, no rate limit, and the file size limit is your local disk.

Fidelity: real formula evaluation

Generic browser converters often skip the formula engine. They either ship the formula source verbatim (=SUM(A1:A10) appears literally in your CSV, breaking downstream consumers) or they emit blank cells where the formulas should have computed. FileHop runs calamine's full evaluator — every formula resolves before the CSV is written, exactly like Excel's own Save As → CSV. And the broader format coverage (.xlsx, .xls, .xlsb, .ods) means legacy files still convert.

FileHop vs the SERP: how the desktop converter compares

Eight tools, eight dimensions. FileHop is highlighted in blue. Honest about what we don't ship today.

Tool Type Offline Price File-size limit Multi-sheet Encoding choice Delimiter choice Formula eval Privacy
FileHop Desktop (Mac, Windows) Yes Free No practical limit First sheet only UTF-8 only Comma only Full eval (calamine) Fully local
CloudConvert Browser No Free 25/day ~1 GB Single sheet UTF-8 / UTF-16 / Latin-1 Comma / semicolon / tab Yes Files traverse cloud
Convertio Browser No Free with caps 100 MB Single sheet Limited Comma only Yes (mostly) Files uploaded
FreeConvert Browser No Free with caps 1 GB Single sheet Advanced settings panel Advanced settings panel Yes 24h retention
Aspose Apps Browser No Free funnel for SDK ~100 MB Single sheet Configurable Configurable Yes Files uploaded
LibreOffice Calc Desktop (cross-platform) Yes Free OSS No practical limit All sheets via macro Save As dialog Save As dialog Full eval Fully local
xlsx2csv (Python) CLI Yes Free OSS Streaming, no limit --all-sheets flag --encoding flag --delimiter flag Stored values Fully local (needs Python)
in2csv (csvkit) CLI Yes Free OSS No practical limit --sheet flag (one at a time) --encoding flag Default comma Yes Fully local (needs Python)
Excel (Save As) Desktop GUI Yes Paid (already-installed) No practical limit Active sheet only UTF-8 / Comma-delimited / Macintosh Locale-dependent Full eval Fully local

If you need multi-sheet output today, xlsx2csv --all-sheets and LibreOffice Calc are the honest recommendations. If you need a delimiter or encoding choice, FreeConvert's Advanced Settings or in2csv cover it. For desktop GUIs that read .xlsx, .xls, .xlsb, AND .ods with no file-size cap and full local processing, FileHop is free where Easy Data Transform is paid and LibreOffice requires a macro for batch sheet export.

Three pitfalls that bite every Excel-to-CSV conversion

Leading zeros in zip codes, phone numbers, SKUs

Excel stores numbers as numbers. If your zip-code column shows '00123' but is formatted as Number, the underlying value is 123 — the leading zeros only existed in the display. Every CSV writer (FileHop, Excel, xlsx2csv, all of them) correctly writes 123. The fix is upstream: in Excel BEFORE saving, format the column as Text (right-click → Format Cells → Text) and re-enter the value, or use =TEXT(A1,'00000'). Only then does the cell store the literal string '00123' and survive the conversion. Most browser converters do not explain this, so users blame the converter.

Date columns turning into 5-digit numbers

Excel stores dates as days-since-1900 (so '2024-01-01' is internally the integer 45292). When calamine reads a DateTime cell that doesn't carry an explicit ISO datetime tag, the CSV gets the serial '45292.0' instead of '2024-01-01'. The fix: in Excel BEFORE converting, change the date column to a Text format with =TEXT(A1,'yyyy-mm-dd') and copy → paste-as-values, or post-process the CSV (in Python: pd.to_datetime(df['col'], unit='d', origin='1899-12-30')). DateTimeIso cells — which Excel produces from explicit ISO formulas, or from data sources that round-trip ISO strings — are unaffected.

Multi-sheet workbooks silently lose every sheet after the first

This is the most common 'where did my data go' question. FileHop today writes only the first sheet — the _sheet parameter in the converter is a documented TODO. For multi-sheet exports, use xlsx2csv with --all-sheets (one CSV per sheet, named after each sheet), LibreOffice Calc with a small Basic macro, or open each sheet in Excel and Save As → CSV manually. We are not hiding this — it's listed in the comparison table with a yellow warning. Once the underlying converter ships sheet selection, this guide will be updated.

Eight best practices before you convert

Most data-fidelity issues are upstream of the converter. Fix them in Excel first.

  1. 1 If your data has any non-ASCII text (accents, CJK, emoji), UTF-8 is the right output. If you'll re-open the CSV in Excel itself, you may need a UTF-8 BOM for Excel to detect the encoding correctly. FileHop writes UTF-8 without BOM today — fine for most pipelines, may show mojibake if the file is reopened directly in Excel.
  2. 2 Format zip-code, phone, and SKU columns as Text in Excel BEFORE saving. Leading zeros only survive if the cell stores them as a string.
  3. 3 For columns that contain real dates, store them as text in an explicit ISO format (=TEXT(A1,'yyyy-mm-dd') and paste-as-values) before converting if your downstream consumer expects ISO 8601 strings.
  4. 4 Prefer comma-delimited CSV for cross-tool compatibility (US/UK locale default). Use semicolon-delimited only when sharing with European Excel installs (where Excel defaults to ; because the comma is the decimal separator). FileHop writes commas only today.
  5. 5 For multi-sheet workbooks, use xlsx2csv --all-sheets or LibreOffice Calc — FileHop writes the first sheet only.
  6. 6 For files larger than 1 GB or 5M rows, consider Parquet instead of CSV — same data, 10-100× smaller, columnar, and queryable without loading into memory. See /guides/csv-excel-parquet-guide.
  7. 7 Sensitive workbooks (financial, HR, healthcare, M&A) — always local desktop conversion. Never upload them to a hosted converter, regardless of stated retention policies.
  8. 8 Validate the output before piping it into your warehouse. Open the CSV in a text editor and spot-check the first 100 rows for encoding, dates, and leading zeros. Cheap insurance against silent corruption.

Free. Offline. No file-size limit. Mac and Windows desktop app.

Open the Excel to CSV Converter

Frequently Asked Questions

What is the difference between XLSX and CSV?
XLSX is Microsoft's modern Excel file format — a zipped XML workbook that stores cell values plus formulas, formatting, multiple sheets, charts, conditional rules, named ranges, and pivot tables. CSV (Comma-Separated Values) is plain text — one row per line, columns separated by commas, no formatting, no formulas, no second sheet. Converting XLSX to CSV strips everything except the cell values from the first sheet. CSV is what data pipelines (Postgres, BigQuery, Spark, pandas) consume; XLSX is what humans author.
How do I convert Excel to CSV offline without uploading my file?
Download FileHop (free, Mac and Windows). Open the Excel to CSV converter at /tools/data/excel-to-csv. Drag your .xlsx, .xls, .xlsb, or .ods file in. Click Convert. The .csv is written next to your Excel file. The workbook never leaves your device — FileHop uses calamine (a pure-Rust spreadsheet reader) and streams the rows out through the csv crate, all in-process inside the desktop app. Zero network calls.
Can FileHop convert all sheets in an Excel workbook to separate CSVs?
Not today. FileHop writes only the FIRST sheet of a multi-sheet workbook. The conversion function has a sheet-selection parameter declared but it is currently unused (a known TODO in the source). For multi-sheet exports we recommend xlsx2csv with the --all-sheets flag (one CSV per sheet, named after each sheet), LibreOffice Calc with a small Basic macro, or opening each sheet in Excel and using Save As → CSV individually. Once FileHop adds multi-sheet support we will update this answer.
What encoding does FileHop's CSV output use? Can I choose UTF-16 or Latin-1?
FileHop writes UTF-8 (without BOM) today. UTF-8 is the right default for almost every modern data pipeline — Postgres, BigQuery, Spark, pandas, and most language standard libraries assume it. If you re-open the CSV in Microsoft Excel itself, Excel may need a BOM to detect UTF-8 (otherwise it reads the file as Windows-1252 and accents look wrong); a workaround is to open the CSV in Excel via Data → From Text/CSV, where you can pick the encoding. We do not yet expose UTF-16 / Latin-1 / Windows-1252 output choices; for those, use FreeConvert's Advanced Settings panel, or post-process with iconv (iconv -f UTF-8 -t WINDOWS-1252 input.csv > output.csv).
Can I choose semicolons instead of commas as the delimiter?
Not today. FileHop writes comma-delimited CSV only. If you're sharing the file with a European Excel install (German, French, Spanish, Italian — where Excel defaults to semicolon delimiters because the comma is the decimal separator), open the CSV in your text editor and find-replace , with ;, or use a one-liner: tr ',' ';' < input.csv > output.csv (caveat: this also rewrites commas inside quoted fields, so prefer csvkit's csvformat -D ';' input.csv > output.csv for clean handling). We will add a delimiter selector in a future release.
Will my Excel formulas be preserved or evaluated?
Evaluated. When FileHop reads the workbook, calamine resolves every =SUM(A1:A10), =VLOOKUP(...), and =IF(...) formula to its computed value. The CSV contains the value, not the formula text. This matches Excel's own Save As → CSV behavior. If you specifically need the formula source text preserved (rare — usually only for code-review or audit pipelines), copy the formula bar contents manually, or use openpyxl in Python to enumerate cell.formula explicitly. Formula errors (#REF!, #DIV/0!, #N/A, #NAME?) are written as the literal string 'ERROR: <kind>' in the CSV; they are NOT silently coerced to empty cells, which is intentional so that downstream consumers can detect and fix them.
How does FileHop handle leading zeros in zip codes and phone numbers?
FileHop writes whatever Excel actually stored. If your zip-code column is formatted as TEXT in Excel, the cells contain the literal string '00123' and the CSV writes '00123'. If your zip-code column is formatted as NUMBER (which is the trap most people fall into), Excel stored the value as the integer 123 — the leading zeros only existed in the display format — and the CSV correctly writes 123. The fix is upstream: in Excel, format the column as Text BEFORE entering values (right-click → Format Cells → Text) or re-enter using =TEXT(A1,'00000'). This applies to every Excel-to-CSV converter, not just FileHop; most browser tools don't explain it, so users assume the converter ate their data.
How does FileHop handle dates in Excel?
It depends on how the source cell stores the date. If Excel stores the date as a DateTimeIso value (rare — usually only when the data came in from an external source as an ISO 8601 string), the CSV gets that ISO string verbatim. If Excel stores the date as a DateTime serial (the default — '2024-01-01' is internally stored as the number 45292), the CSV gets the serial number 45292.0, which is technically correct but not what most downstream tools expect. The fix: in Excel BEFORE converting, change the column to a Text format with =TEXT(A1,'yyyy-mm-dd') and copy → paste-as-values. We are tracking 'auto-format DateTime cells as ISO strings' as a future improvement.
How big a file can FileHop convert? What's the upload limit?
There is no upload limit — FileHop runs entirely on your local machine. The practical ceiling is your disk space and RAM. Calamine memory-maps the workbook so .xlsx files in the multi-gigabyte range are fine; the CSV is streamed out row-by-row via the csv crate. Browser converters cap out at 100 MB-1 GB and time out on enterprise exports. For files larger than 5M rows we recommend converting to Parquet instead (10-100× smaller, columnar, queryable) — see /guides/convert-excel-to-parquet.
Does FileHop work on Linux?
Not today. FileHop ships Mac and Windows desktop builds. For Linux users wanting an offline Excel-to-CSV pipeline, the best free options are LibreOffice Calc (full GUI, handles all sheets via Save As / macros, formula evaluation), xlsx2csv (Python CLI, --all-sheets flag, streams), or in2csv from csvkit (Python CLI, multi-format input). All three are open-source and run fully local.

Related Tools & Guides