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.
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