CSV to Excel
Build a real XLSX workbook from your CSV files, without opening a spreadsheet app.
What this tool does
CSV to Excel writes a genuine OOXML package rather than renaming a text file. The workbook part, one worksheet part per CSV, the relationship and content-type manifests and a stylesheet are assembled and zipped with fflate — the parts the format requires, and none of the extras a spreadsheet application adds when it saves. A workbook carries the type of every cell with it, so whichever application opens the file reads the columns as they were decided here instead of re-parsing the text and guessing.
The decision that matters is which cells become numbers. With Store plain numbers as numbers ticked, a value that is a plain integer or decimal is written as a numeric cell and everything else is written as text, exactly as it appeared. So a leading zero survives — 007 stays 007, and so do sort codes and postcodes — and an integer longer than fifteen digits stays text rather than being rounded into a float. Currency symbols, thousands separators, scientific notation and dates are not recognised either, so they arrive as text you can convert in the spreadsheet afterwards.
Both halves of the job stay here: your rows are parsed and the zip is assembled by the page's own code, so nothing is sent anywhere and this spreadsheet converter keeps working with the network switched off. Header handling is local too: tick First row is a header and that row can be set in bold and frozen in place, so it stays visible while the rest scrolls. Column widths are estimated from the longest value in each column and clamped between eight and sixty characters, which is close enough to read without hiding anything.
What it does not write is worth listing, because none of it is hidden behind a switch. There are no number formats, no date cells, no colours, borders or merged cells, no autofilter and no formulas — a cell beginning with an equals sign is stored as text, which is also what stops a hostile CSV arriving as a live formula. Text is written as inline strings rather than pooled into a shared string table, so a file full of repeated values is larger than the one Excel would save from the same data. The ceilings are the worksheet's own: more than 16,384 columns or 1,048,576 rows is refused by name rather than truncated, and since the text and the finished zip are both held in the tab, a very large export is limited by your device rather than by a quota.
How to use it
- Choose your CSV files. The picker takes .csv, .tsv and .txt, one file or many at once. Each is read as UTF-8, so an old export saved in a Windows code page should be re-saved as UTF-8 before it comes in, or its accented characters will arrive wrong.
- Decide on one workbook or several. One workbook is the default: every CSV becomes a sheet named after the file, trimmed to 31 characters, with the characters a sheet name cannot hold replaced by spaces and a repeated name given a number. Pick one workbook per CSV to keep them apart. A single file gives a single workbook either way.
- Check the delimiter. Detection counts commas, semicolons, tabs and pipes across the first five lines and takes whichever appears most, quoted text included. Set it by hand when a comma-separated file is full of semicolons.
- Set the header and number options. Bold and freeze apply only when the first row is marked as a header, and freezing needs more than one row to do anything. Untick Store plain numbers as numbers when every cell should stay text.
Processing & privacy
Runs on your device. Your file is processed directly in this browser.
Common use cases
Sending an export to someone who lives in Excel
A database dump or an analytics extract arrives as CSV, and the person who has to read it wants a workbook that opens with the columns already sized and the header pinned.
Collecting a month of daily exports
Drop all thirty files in at once and they become thirty sheets in one workbook, each named after its file, instead of thirty separate attachments to open one by one.
Protecting identifiers a spreadsheet would mangle
Opening a raw CSV in Excel turns 007 into 7 and a long account number into scientific notation. Written as text cells beforehand, those values arrive intact.
Handing data to a machine set to another locale
A computer using a comma as its decimal separator reads a comma-delimited file badly. Telling this page which delimiter the file really uses, then sending XLSX, takes the guesswork out of the other end.
Questions
Is my CSV uploaded?
Why did my dates come through as text?
Why is 007 still text?
Can I put several CSVs into one workbook?
Why is the file bigger than one Excel saves?
Does it create formulas, filters or charts?
What happens to ragged rows and blank lines?
Can it go back the other way?
Related tools
- JSON to CSV — Flatten a JSON array into a CSV table.
- CSV to JSON — Turn a CSV file into structured JSON.
- CSV Viewer — Open and browse a large CSV without a spreadsheet app.
- Excel to CSV — Export spreadsheet sheets to CSV.
- CSV Merge — Combine multiple CSV files with matching columns.
- CSV Split — Split a large CSV into smaller chunks.