Skip to main content

CSV to Excel Converter Guide

Convert .csv to .xlsx offline on your desktop. Files never leave your device. Handles million-row CSVs without crashing. Free for Mac and Windows.

What is CSV to Excel conversion?

CSV (Comma-Separated Values) is plain text — one row per line, columns separated by commas, no formulas, no formatting, no second sheet. Excel's .xlsx format is a zipped XML workbook that adds cell types, formulas, formatting, multiple sheets, charts, conditional rules, named ranges, and pivot tables. Converting CSV to Excel does NOT add any of those things on its own — it just stuffs the rows into a single sheet so Excel users can open the file in familiar tools and apply formatting, charts, or pivots themselves.

Almost every data pipeline (ETL, Postgres COPY, BigQuery, Spark, pandas, ClickHouse, DuckDB) emits CSV. Most business users open Excel. The conversion is the handoff between machine-format and human-format — what gets handed across is data, not the polish around it.

The non-obvious part is what gets ADDED, what gets LOST, and what gets STUCK. Added: nothing — no styling, no formulas, no charts. The output is a flat data dump waiting for the user to format. Lost: nothing intrinsic, but Excel's 1,048,576-row hard cap is a CLIFF — CSVs above the cap are silently truncated when written to .xlsx, with no warning. The natural answer for files above the cap is Parquet, not Excel. Stuck: column types depend on inference. Pure-numeric columns (zip codes, phone numbers, SKUs) lose leading zeros because they get typed as INTEGER; the only fix is to pre-quote the column or include any non-numeric value to force VARCHAR.

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 (the CSV's first line becomes Excel's row 1)
  • UTF-8 text — accents, CJK characters, emoji
  • Commas inside quoted fields and the null vs empty-string distinction (DuckDB's RFC-4180 quoting handling)

FileHop handles all of these via DuckDB read_csv_auto.

Converts but watch the shape

Common surprises:

  • Leading zeros in zip-code / phone / SKU columns — preserved IFF the column has any non-numeric value forcing VARCHAR; otherwise typed as INTEGER and the zeros are lost
  • Date columns without explicit ISO formatting — epoch-style integer columns type as INTEGER and look like 1700000000 in Excel
  • Rows above Excel's 1,048,576-row cap — will be truncated when written to .xlsx; recommend Parquet for files larger than this
  • Auto-detected delimiters that guess wrong on exotic CSVs — read_csv_auto is fast but not always right; pre-clean if needed

FileHop follows DuckDB's defaults here — name these in your QA pass before sharing the workbook.

Does NOT survive

You need a different strategy:

  • Multi-CSV → multi-sheet rollup — FileHop writes one .xlsx per CSV; for folder rollups use Excel's Power Query (Get Data → From Folder), Microsoft Office Scripts, or python-openpyxl
  • Formulas, cell formatting, bold headers, column widths, charts, pivot tables, conditional formatting — Excel-specific structures the converter cannot synthesize from a CSV
  • Legacy .xls (Excel 97-2003) output — FileHop writes only .xlsx; for .xls use Vovsoft's CSV-to-XLS tool or LibreOffice Calc Save As

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

Most browser converters silently truncate above 1M rows and drop leading zeros without explanation. Naming what gets lost is what makes the conversion safe to automate.

How to convert CSV to Excel in FileHop

Four steps. Works on a 100-row .csv, a multi-million-row enterprise export, and CSVs that arrive with semicolons or tabs as the delimiter.

1

Open FileHop

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

2

Drag your CSV file in

Drop the .csv file onto the data converter panel, or use File → Open. FileHop calls DuckDB's read_csv_auto, which detects the delimiter (comma / semicolon / tab / pipe), the quoting style, and the column types automatically — no manual delimiter or encoding selection needed.

3

Select Convert to Excel

Pick Excel from the output-format dropdown. FileHop types each column (numeric / boolean / VARCHAR / DATE / TIMESTAMP) and prepares the .xlsx via DuckDB's GDAL XLSX driver.

4

Click Convert

FileHop writes the .xlsx next to the source CSV file (single sheet, values only). If the target name already exists, the filename is auto-uniquified with _1, _2, etc., so you never silently overwrite a previous export.

Streaming write — no full-file load into RAM. Auto-uniquified filenames. Broad CSV variant tolerance. Single-sheet flat output. Mind the Excel 1M-row cap for large files.

Why offline beats online for CSV → Excel

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 CSVs

Financial exports, customer lists, HR rosters, M&A spreadsheets, healthcare data, internal forecasts — these are the CSVs people most often want to convert, and they are the same files that should never traverse a third-party server. CloudConvert, Convertio, FreeConvert, and Zamzar all upload the whole CSV 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 50 MB to 1 GB. Convertio caps at 100 MB. Zamzar at 50 MB. FreeConvert at 1 GB. CSVs in the multi-million-row range time out, queue, or silently fail. FileHop reads via DuckDB's streaming COPY pipeline — there's no upload, no rate limit, and the file size limit is your local disk. The Excel row cap of 1,048,576 still applies because that's a property of the .xlsx format itself, not the converter — for files above the cap, use Parquet.

Fidelity: real CSV parsing

Generic browser converters use ad-hoc CSV parsers that get RFC-4180 quoting, embedded newlines, and unusual delimiters wrong. DuckDB's read_csv_auto is the same parser used by data warehouses — it handles RFC-4180 quoting, multi-line cells, mixed delimiters, and trailing-comma irregularities cleanly. Type inference preserves numbers as numbers, booleans as booleans, NULLs as empty cells, and ISO date strings as text — which means downstream Excel users open a workbook with the right cell types out of the box.

FileHop vs the SERP: how the desktop converter compares

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

Tool Type Offline Price File-size limit Multi-CSV → multi-sheet Encoding handling Delimiter handling Type inference / leading zeros Privacy
FileHop Desktop (Mac, Windows) Yes Free No limit (Excel caps at 1M rows) Single-sheet only UTF-8 input expected Auto-detect (read_csv_auto) VARCHAR for mixed columns Fully local
FreeConvert Browser No Free with caps 1 GB upload Single sheet Advanced settings panel Advanced settings panel Mixed Files traverse GCP
Convertio Browser No Free with caps 100 MB Single sheet Limited Limited Mixed Files uploaded
CloudConvert Browser No Free 25/day Not stated Single sheet Configurable Configurable Yes Files traverse cloud
Zamzar Browser No Free with caps 50 MB free Single sheet Limited Limited Mixed 24h retention
csvtoexcel.top Browser-local (claims) Yes (in browser) Free Browser RAM-bound Single sheet Undocumented Auto SheetJS defaults Browser-side (undocumented)
Vovsoft CSV→XLS Paid Windows desktop Yes $19 lifetime No limit Single sheet Configurable Configurable Stored values Fully local
Withdata DataFileConverter Paid desktop (cross-platform) Yes 30-day trial then paid No limit Multi-CSV → multi-sheet Configurable Configurable Yes Fully local
Excel (Power Query) Desktop GUI Yes Paid (already-installed) No upload (local) Get Data → From Folder File Origin dropdown Detect / override Text column override Fully local

If you need multi-CSV → multi-sheet rollup today, Excel's Power Query (Get Data → From Folder) is the honest recommendation — it's already installed and ships per-file sheet creation out of the box. Withdata DataFileConverter is the closest paid desktop alternative. For desktop GUIs that handle million-row CSVs with full DuckDB type inference, no upload step, and zero file-size cap, FileHop is free where Withdata is paid and Power Query requires the manual Get Data ritual.

Three pitfalls that bite every CSV-to-Excel conversion

Excel's 1,048,576-row hard cap (the silent truncation trap)

Excel itself caps a single sheet at 1,048,576 rows × 16,384 columns. Browser converters silently truncate CSVs above this cap (no warning, no error, just a partial file). FileHop's DuckDB pipeline writes the full row count it reads, but the .xlsx format itself caps at 1M rows, so for CSVs larger than that the workbook gets truncated. The real fix is to convert to Parquet instead — 10-100× smaller, columnar, query-friendly in DuckDB / Spark / pandas, and no row cap. The CSV is fine; Excel is the bottleneck. See /guides/csv-excel-parquet-guide for the format comparison and /tools/data/csv-to-parquet for the conversion.

Leading zeros disappearing from zip codes, phone numbers, SKUs

DuckDB's read_csv_auto types each column based on the values it sees. A column that's all-numeric ('12345', '00123', '99999') types as INTEGER and writes as a number — the leading zeros are lost. A column with any non-numeric value (a single dash, a single 'X', a header containing letters) types as VARCHAR and writes as text — the zeros are preserved. The fix: in the source CSV, pre-quote the column ('00123' instead of 00123) or include a non-numeric token in one row. Same trade-off as Excel's own Text Import Wizard 'Text column' override — the underlying type-inference mechanic is shared by every modern CSV parser.

Multi-CSV folders not rolling up into one workbook

The 'monthly_q1.csv, monthly_q2.csv, monthly_q3.csv → one workbook with three sheets' workflow is genuinely common. FileHop today writes one .xlsx per CSV (no folder-rollup option). For multi-sheet rollups use Excel's Power Query (Get Data → From Folder, then Combine & Load), Microsoft Office Scripts (sample at learn.microsoft.com), or python-openpyxl (writer.book.create_sheet per file). We are not hiding this — it's listed in the comparison table. Once FileHop adds folder-rollup support this guide will be updated.

Eight best practices before you convert

Most data-fidelity issues are upstream of the converter. Plan for them in the source CSV first.

  1. 1 For CSVs above 1M rows, convert to Parquet instead of Excel — Excel caps at 1,048,576 rows per sheet, Parquet has no row cap and is 10-100× smaller. See /guides/csv-excel-parquet-guide and /tools/data/csv-to-parquet.
  2. 2 To preserve leading zeros in zip-code / phone / SKU columns, pre-quote the column in the source CSV ('00123' instead of 00123) or add a non-numeric token to one row, so DuckDB types the column as VARCHAR.
  3. 3 For non-UTF-8 source CSVs (Latin-1, Windows-1252, UTF-16 — common from legacy ETL exports, especially European installs), pre-convert with iconv: iconv -f WINDOWS-1252 -t UTF-8 input.csv > clean.csv. DuckDB expects UTF-8.
  4. 4 For exotic CSVs where read_csv_auto guesses the wrong delimiter (records-per-line semi-structured, embedded JSON in a column, RFC-4180-non-compliant quoting), pre-clean in a text editor — there's no UI override yet for the auto-detect.
  5. 5 To merge a folder of CSVs into one Excel workbook with one sheet per CSV, use Excel's Power Query (Get Data → From Folder) — FileHop today writes one .xlsx per CSV without folder rollup.
  6. 6 To author formulas, charts, pivot tables, cell formatting, or column widths, do this in Excel itself once the workbook is open — the converter writes a flat data dump, and Excel applies the polish.
  7. 7 Sensitive CSVs (financial exports, HR rosters, customer lists, healthcare data, M&A) — always local desktop conversion. Never upload them to a hosted converter, regardless of stated retention policies.
  8. 8 Validate the output before sharing: open the .xlsx in Excel, spot-check the row count (does it match the source CSV?), the leading zeros in any text-formatted columns, the date columns, and any non-ASCII text. Cheap insurance against silent data loss.

Free. Offline. Handles million-row CSVs. Mac and Windows desktop app.

Open the CSV to Excel Converter

Frequently Asked Questions

What is the difference between CSV and Excel (XLSX)?
CSV (Comma-Separated Values) is plain text — one row per line, columns separated by commas, no formulas, no formatting, no second sheet. Excel's .xlsx is a zipped XML workbook that adds cell types, formulas, formatting, multiple sheets, charts, conditional rules, named ranges, and pivot tables. Converting CSV → Excel doesn't add formulas or formatting on its own — it just stuffs the rows into a single sheet so Excel users can open the file in familiar tooling and apply polish themselves. CSV is the wire format pipelines emit; XLSX is the human-authoring format business users open.
How do I convert CSV to Excel offline without uploading my file?
Download FileHop (free, Mac and Windows). Open the CSV to Excel converter at /tools/data/csv-to-excel. Drag your .csv file in. Click Convert. The .xlsx is written next to your CSV file. The CSV never leaves your device — FileHop uses DuckDB (an in-process columnar database) to stream the rows through DuckDB's GDAL XLSX driver, all inside the desktop app. Zero network calls.
Can FileHop convert a CSV with more than 1 million rows to Excel?
FileHop will read and process the full row count without RAM pressure (DuckDB streams the COPY query), but Excel's .xlsx format itself caps at 1,048,576 rows × 16,384 columns per sheet — that's a property of the file format, not the converter. CSVs above the cap will be truncated in the .xlsx output without warning (this is a DuckDB GDAL XLSX driver behavior). For files larger than 1M rows the right answer is Parquet, not Excel: 10-100× smaller, columnar, queryable in DuckDB / Spark / pandas without loading into RAM. See /guides/csv-excel-parquet-guide for the detailed comparison and /tools/data/csv-to-parquet for the conversion.
Will leading zeros in zip codes and phone numbers be preserved?
It depends on the column. DuckDB's read_csv_auto types each column based on the values it sees: a column that is all-numeric ('12345', '00123', '99999') types as INTEGER and writes as a number — the leading zeros are lost. A column with any non-numeric value (a single dash, a single 'X', a header containing letters) types as VARCHAR and writes as text — the zeros are preserved. The fix: in the source CSV, pre-quote the column ('00123' instead of 00123) or add a non-numeric token to one row so the column types as VARCHAR. This is the same trade-off Excel's Text Import Wizard hits with its column-type override; the underlying type-inference mechanic is shared by every modern CSV parser. We will add a per-column type-override UI in a future release.
Can I convert a folder of CSVs into one Excel workbook with multiple sheets?
Not today. FileHop writes one .xlsx per CSV — one CSV in, one workbook out, single sheet per workbook. For the 'folder of CSVs → one workbook with one sheet per CSV' rollup, the natural Excel-native answer is Power Query (Get Data → From Folder, then 'Combine & Load' or per-sheet load via the Power Query Editor). For programmatic options, Microsoft's Office Scripts has a published sample, and python-openpyxl can do it in 10 lines via writer.book.create_sheet per file. Once FileHop adds folder-rollup support we will update this answer.
What about formulas, formatting, charts, or pivot tables — will they be added?
No. The output is a flat data dump — values only, no styles, no formulas, no charts, no pivot tables, no conditional formatting, no auto-column-width. Excel users open the workbook and apply polish themselves. This matches what every CSV-to-Excel converter does (CSV doesn't carry any of those structures, so there's nothing for the converter to copy across). If you want a workbook with formulas pre-authored, build the CSV with the values pre-computed, or open the converted .xlsx in Excel and add the formulas there.
What if my CSV uses semicolons (European locale) or tabs as the delimiter?
DuckDB's read_csv_auto auto-detects delimiters: comma, semicolon, tab, and pipe are all handled without manual selection. The output is always a single .xlsx (delimiter is a CSV-side concern; Excel doesn't need a delimiter). For exotic CSVs where read_csv_auto guesses wrong (records-per-line semi-structured, embedded JSON in a column, RFC-4180-non-compliant quoting), there is no UI override yet — pre-clean the file in a text editor or sed pipeline. We will add a manual delimiter override in a future release.
What encoding does FileHop expect for the CSV input?
UTF-8. DuckDB's CSV reader expects UTF-8 input. Legacy CSVs in Latin-1 / Windows-1252 / UTF-16 (common from old ETL exports, especially European Excel installs) will produce mojibake or fail to parse. Pre-convert with iconv (iconv -f WINDOWS-1252 -t UTF-8 input.csv > clean.csv on Mac/Linux/WSL; on Windows, PowerShell's [System.Text.Encoding] APIs do the same) or Notepad++'s 'Convert to UTF-8' menu. We do not yet expose an input-encoding selector; for non-UTF-8 sources we recommend the iconv preprocessing step or open the file in Excel directly via Data → From Text/CSV → File Origin dropdown.
Can FileHop convert CSV to legacy .xls (Excel 97-2003) instead of .xlsx?
Not today. FileHop writes only the modern .xlsx format. For legacy .xls output, Vovsoft's CSV to XLS Converter (paid Windows-only, $19 lifetime) and LibreOffice Calc (free, cross-platform, Save As → Microsoft Excel 97-2003) are the closest free / paid alternatives. .xls is rarely needed in modern pipelines — Excel 2007 and later read .xlsx natively, so .xls is only relevant for legacy line-of-business systems.
Does FileHop work on Linux?
Not today. FileHop ships Mac and Windows desktop builds. For Linux users wanting an offline CSV-to-Excel pipeline, the best free options are LibreOffice Calc (full GUI, opens CSV with column-type override, exports XLSX), python-openpyxl + pandas (a 5-line script: pd.read_csv(...).to_excel(...)), or DuckDB CLI directly (the same query FileHop runs: COPY (SELECT * FROM read_csv_auto('input.csv')) TO 'output.xlsx' WITH (FORMAT GDAL, DRIVER 'XLSX')). All three are open-source and run fully local.

Related Tools & Guides