Data & CSV

CSV to Excel (XLSX) converter

Turn pasted or uploaded CSV into a real .xlsx workbook: numbers, dates and yes/no values as proper cells, a bold frozen header with filters, sensible column widths and no formula risk.

CSV to Excel (XLSX) converter
Esc to restore

Your inputs

Paste CSV or choose a file. The first row is normally the headings.

Up to 25 MB per file, 50,000 data rows, 200 columns and 2 million data cells. Fully blank rows and columns are ignored before row, column and cell limits are checked. Individual tools may have smaller result or chart limits.

Headings, column numbers (1 is the first) or letters, separated by semicolons. Use this for phone numbers, postcodes and long IDs.

Up to 31 characters, without \ / ? * [ ] or a colon.

These cells are always saved as text, never as formulas. Marking them adds the “quote prefix” Excel uses for an apostrophe, so retyping the cell keeps it text.

Results update as you type. Larger files run when you press Update result.

Your result

Your result will appear here.

More actions

Your inputs stay in this browser. Nothing is uploaded or saved.

A clear answer. Here’s how.

Reads the CSV (RFC 4180 quoting, a separator you pick or one detected from the first rows) and writes a workbook by hand from the XML parts of ECMA-376: [Content_Types].xml, the package relationships, workbook.xml, its relationships, styles.xml, a shared string table and one worksheet, zipped with fflate. Each column gets one type, decided from all its cells: numbers if every filled cell is a plain decimal number with at most 15 digits and no leading zero or plus sign (Excel keeps 15 significant digits, so longer IDs would be changed), dates if every cell is a real calendar date from 1900-03-01 to 9999-12-31 in ISO form (date or date and time, with a space or T; times with a time zone stay text because a workbook has no zones), yes/no cells if every cell is TRUE or FALSE, and text otherwise. A column named under “keep as text” is always text. Dates are stored as serial numbers in the 1900 system with the formats yyyy-mm-dd or yyyy-mm-dd hh:mm:ss, so Excel can sort and calculate with them. Text is never written as a formula, so a cell such as =1+1 cannot run when the file is opened; with the protection on, such cells also carry the quote-prefix style Excel uses for a leading apostrophe. The header row can be bold, frozen and given filter buttons, and column widths follow the longest of the first 1,000 values (capped at 60). Limits: 50,000 data rows, 200 columns, 2 million cells, 32,767 characters per cell, as in Excel. One sheet only; no formulas, charts or cell colours. The file follows the standard. While the tool was built, files like these were opened in Microsoft Excel (version 16.0) and in openpyxl: they opened without a repair prompt, the dates, the frozen header row, the filter buttons and the quote prefix on text such as =1+1 showed up as described here, and Excel displayed more than a thousand test dates exactly as typed. This site’s own XLSX reader reads them back too. Other spreadsheet programs were not tried.

How this is checked

5 reference checks passed These 5 cases were run when this page was built, on 20 October 2026, and all reproduce within the stated tolerance. The same cases are part of the automated tests that run on every change to Toolmoz. Engine version 1.

See the checks and where each expected answer comes from
  1. Case 1

    Inputs
    The tool’s default inputs
    Expected, and what Toolmoz gave
    Rows expected 4, Toolmoz 4Data rows expected 3, Toolmoz 3Columns expected 6, Toolmoz 6Number columns expected 1, Toolmoz 1Date columns expected 1, Toolmoz 1Yes or no columns expected 1, Toolmoz 1Text columns expected 3, Toolmoz 3Separator expected comma, Toolmoz comma
    Where the expected answer comes from
    Counted by hand from the default CSV: a heading row and three records of six fields; the id column holds 00123, 00124 and 00125, whose leading zeros would be lost as numbers, so it is text, as are name and note (note holds =1+1 and +44 20 7946 0000); joined holds real dates and a date with a time, score holds 98.5, 72 and an empty cell, and active holds TRUE and FALSE
    Allowed difference
    exact
  2. Case 2

    Inputs
    Numbers none
    Expected, and what Toolmoz gave
    Number columns expected 0, Toolmoz 0Text columns expected 4, Toolmoz 4Date columns expected 1, Toolmoz 1Yes or no columns expected 1, Toolmoz 1
    Where the expected answer comes from
    With numbers switched off the score column stays text, so four of the six columns (id, name, score, note) are text and the date and yes/no columns are unchanged
    Allowed difference
    exact
  3. Case 3

    Inputs
    CSV data zip,amount 01234,10 00987,20.50 Numbers safe
    Expected, and what Toolmoz gave
    Number columns expected 1, Toolmoz 1Text columns expected 1, Toolmoz 1
    Where the expected answer comes from
    The zip column has leading zeros that a number would drop, so it stays text; amount holds 10 and 20.50, plain decimal numbers
    Allowed difference
    exact
  4. Case 4

    Inputs
    CSV data zip,amount 01234,10 00987,20.50 Numbers all
    Expected, and what Toolmoz gave
    Number columns expected 2, Toolmoz 2Text columns expected 0, Toolmoz 0
    Where the expected answer comes from
    In the convert-everything mode the zip column is read as the numbers 1234 and 987, which is why the safe mode is the default
    Allowed difference
    exact
  5. Case 5

    Inputs
    CSV data a;b 1;2 3;4 Column separator auto
    Expected, and what Toolmoz gave
    Separator expected semicolon (guessed), Toolmoz semicolon (guessed)Columns expected 2, Toolmoz 2Number columns expected 2, Toolmoz 2
    Where the expected answer comes from
    Every row has two fields when split at semicolons and one when split at commas or tabs, so semicolon is the only separator giving a constant width
    Allowed difference
    exact

What this shows: the engine reproduces independently worked values for these cases. It does not prove every possible input is right. To test an answer you were given, see how to check a number; to see what is and is not checked across Toolmoz, see the accuracy ledger.

See a worked example

Worked example

A fixed demonstration, separate from the values you enter above.

CSV data
id,name,joined,score,active,note
00123,Ada Lovelace,2023-03-15,98.5,TRUE,=1+1
00124,"Smith, John",2023-03-16 14:30:00,72,FALSE,+44 20 7946 0000
00125,Zoë Müller,2024-02-29,,TRUE,"line one
line two"
Column separator
Comma
First row
Headings: bold, frozen, with filter buttons
Numbers
Convert columns of plain numbers; keep IDs with leading zeros, plus signs or more than 15 digits as text
Dates
Convert ISO dates (2023-03-15, 2023-03-15 14:30:00) to Excel dates
TRUE and FALSE
Convert columns of TRUE and FALSE to yes/no cells
Columns to keep as text (optional)
Sheet name
Sheet1
Column widths
Fit to the content (up to 60 characters)
Text that starts with = + - or @
Mark it as text so editing it never makes a formula

Example result

First 5 rows of the example result
ColumnTypeFirst value
idText00123
nameTextAda Lovelace
joinedDate2023-03-15
scoreNumber98.5
activeYes or noTRUE

The file follows ECMA-376. Files like it were opened in Microsoft Excel 16.0 and in openpyxl while this tool was built, and are read back by this site’s XLSX reader; other programs were not tried.