CSV to Excel (.xlsx)

Paste CSV, TSV or JSON and download a real Excel workbook — numbers stay numbers, booleans stay booleans, and the header row is bold and frozen. Converted in your browser; nothing is uploaded.

Try:
Workbook

Turn a CSV, TSV or JSON table into a real Excel workbook

Paste your table, pick the source format (or leave it on Auto-detect), and download a genuine binary .xlsx file — the same format Excel, Google Sheets, LibreOffice and Numbers open natively. This is a real workbook, not a renamed CSV: numbers are written as native number cells, true / false become boolean cells, the first row can be a bold, frozen header, and each column is auto-sized to its content. Everything runs in your browser with WebAssembly — your data is never uploaded to a server.

Worked example

Input (CSV, with "Detect number & boolean types" on):

name,age,active
Alice,30,true
Bob,25,false

Output: a People.xlsx workbook whose first sheet has a bold, frozen header row (name · age · active), then two data rows. In the resulting spreadsheet the age column holds real numbers (30, 25) you can sum or sort, and the active column holds real booleans — not the text "30" or "true". Set the Sheet name field to name the worksheet tab (it also becomes the download's filename).

JSON works too — paste a JSON array of objects and the keys become the columns:

[{"product":"Widget","qty":12,"price":9.99},{"product":"Gadget","qty":3,"price":19.5}]

FAQ

Is this a real .xlsx file, or just a CSV renamed to .xlsx?

It is a real, standards-compliant Office Open XML (.xlsx) workbook — a ZIP of XML parts, exactly what Excel writes. It opens without the "the file format doesn't match the extension" warning you get from a renamed CSV, and it carries native cell types (numbers, booleans) plus formatting like the bold, frozen header row.

Do numbers stay numeric, and are leading zeros preserved?

With Detect number & boolean types on (the default), delimited cells that look like whole numbers or decimals become native number cells, and true / false become booleans — so totals, sorts and charts work. Values with a leading zero (007), a leading +, or underscores stay text, so zip codes and phone numbers aren't mangled. Turn the option off to force every delimited cell to text. JSON and NDJSON keep whatever types they already declare.

Which input formats and delimiters are supported?

CSV (comma), TSV (tab), semicolon-separated, and pipe-separated delimited text, plus a JSON array of objects/rows and NDJSON (one JSON value per line, a.k.a. JSONL). Auto-detect sniffs the format from your text, picking the most frequent of comma / tab / semicolon / pipe on the first row (or JSON when the text starts with [ or {). Pick a specific format from the dropdown to override the guess.

How are the columns and the header row decided?

For delimited input with First row is a header on, the header cells become the bold, frozen top row. For a JSON array of objects the column set is the union of all keys in first-seen order, so rows with different fields still line up (missing values are left blank). Turn the header option off to write only data rows with no header.

Are there any size or shape limits?

A worksheet can hold at most 1,048,576 rows and 16,384 columns (Excel's own limits) — going over returns a clear error. The workbook is capped at 24 MB. Nested JSON values (arrays/objects inside a cell) are written as their compact JSON text so nothing is silently dropped. Everything is computed locally in your browser, so very large pastes are bounded by your device's memory.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool csv-to-xlsx "name,age,active
Alice,30,true
Bob,25,false"

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/csv-to-xlsx/?data=name%2Cage%2Cactive%0AAlice%2C30%2Ctrue%0ABob%2C25%2Cfalse&input_format=auto&sheet_name=Sheet1&header=true&detect_types=true&autofit=true