CSV → Excel

CSV converted to .xlsx with separator detection. Free, no upload. 1 GB max · Up to 1 GB · Processed locally, never sent to a server.

An export from a point-of-sale system, a bank, an online shop or a CRM almost always arrives as a CSV. Opened with a double-click in Excel, it sometimes displays properly, sometimes entirely inside column A, sometimes with accented characters in pieces. The outcome depends on the version of Excel, on the separator used and on the regional settings of the machine: the same attachment does not open the same way for two different recipients.

This tool produces a genuine .xlsx workbook, which opens identically everywhere. The file is read, the separator detected on the first ten lines, the table built by SheetJS, the column widths adjusted, and the workbook written out. The separator that was chosen, along with the number of rows and columns, is displayed at the end of the operation.

The real work, though, is not there. A CSV is a text file with no types: nothing in it distinguishes a postal code from a number, or 3 April from 4 March. The conversion therefore has to decide on your behalf, and that is precisely where data gets damaged. The sections below go through those decisions one at a time, with the exact values they produce.

How to use it

  1. Drop the CSV or TSV file One file at a time, as .csv or .tsv. The content is read as UTF-8 text, and the byte order mark sometimes present at the start is stripped.
  2. Let the separator detection run The first ten lines are examined: semicolons, commas and tabs are counted, and the most frequent one wins. On a tie, the semicolon goes first.
  3. Click “Run” SheetJS is loaded, the table is parsed, and every cell is assigned a type — text, number or date — without consulting you.
  4. Read the result line The number of rows, the number of columns and the separator that was kept all appear there. An unexpected column count is the sign of a failed detection, to be sorted out before going any further.
  5. Open the workbook and check three columns The file holds a single sheet named Sheet1. Check the code columns, the amount columns and the date columns first: that is where the surprises are concentrated.

The separator, first trap of the format

Software configured for a continental European locale exports mostly with semicolons, precisely because the comma serves as the decimal mark there; English-language tools use the comma, and some database extracts use the tab. Detection counts those three characters over the first ten lines and keeps whichever is most present, which covers the large majority of files.

The counting has a weakness: it does not tell a separator apart from a character sitting inside a quoted field. A comma-separated file whose address fields contain semicolons can therefore be split in the wrong place and come out in a single column. Hence the value of checking the column count displayed at the end.

Broken accents and vanished zeros

The file is read as UTF-8. A CSV saved in the old Windows western encoding therefore comes out with a black diamond bearing a question mark in place of every accented letter. The fix belongs upstream: in Excel, save it again with the CSV UTF-8 file type; in LibreOffice, tick UTF-8 in the filter window. The byte order mark Excel places at the head of the file is stripped automatically.

Leading zeros, for their part, do not survive. A ZIP code 01890 becomes the number 1890, a phone number 07700900123 becomes 7700900123, a part reference 00123 becomes 123. Wrapping the value in quotes changes nothing, and putting a space in front of it does not help either. Two workarounds do work, both applied before conversion: put a non-numeric character in front of the value, or write the field as an equals sign followed by the value in quotes, a notation some exports already produce and which stays text.

Numbers and dates, what the conversion decides

A decimal comma is not recognised as one: the convention applied is the English-language one, where the comma separates thousands. An amount written 12,50 becomes the number 1250, and 1234,56 becomes 123456. The error is silent and its scale is considerable. Written with a point, 12.50 is read correctly; written with a space as the thousands separator, it stays text and cannot be summed.

Dates are read the American way, month first: 03/04/2025 becomes 4 March 2025 instead of 3 April. More awkwardly, in that same column 25/12/2024 has no possible reading under that convention and stays text. A column of day-first dates therefore comes out partly as real dates, shifted, and partly as text, which rules out any chronological sort. Only the international form, 2025-04-03, crosses the conversion intact. Percentages become decimals with no display format attached: 12% becomes 0.12.

What the workbook you get contains

The result is a file in Office Open XML format, with a single sheet named Sheet1 holding the values and nothing else: no formula, no colour, no filter, no frozen pane. Column widths are computed on the first 200 rows only and bounded between 8 and 48 characters; a column of dates often hits the upper bound, which a double-click on the border corrects.

Reading the file and building the workbook both happen in the browser, SheetJS being served by the site itself at the moment of conversion. The content of the CSV is sent to no service at all, which is not a small thing when the file is an accounting export, a customer list or a staff register.

Frequently asked questions

My amounts have been multiplied by a hundred. What happened?

The decimal comma was taken for a thousands separator: 12,50 became 1250. Replace the decimal commas with points in the CSV before converting, or fix the whole column in the spreadsheet afterwards.

How do I keep the leading zero of a postal code?

Neither quotes nor a leading space protect it. Before converting, put a non-numeric character in front of the value, or write the field as an equals sign followed by the value in quotes, which is kept as text.

Why are my accented characters unreadable?

The file was not encoded in UTF-8. Reopen it and save it again choosing the CSV UTF-8 file type in Excel, or the UTF-8 encoding in the LibreOffice filter window, then run the conversion again.

Why does my whole table sit in a single column?

The separator that was detected was the wrong one, usually because another candidate character was more frequent in the first ten lines, including inside quoted fields. Identify the real separator in a text editor and replace it.

Does the file open anywhere other than Excel?

Yes. It is a standard .xlsx, readable by Excel 2007 and later, LibreOffice Calc, Google Sheets and Numbers, with no further conversion.

Can I gather several CSV files into one workbook?

No. Each conversion handles one file and produces a workbook with one sheet. Convert them separately, then combine the sheets in your spreadsheet program if you need them together.

Can I convert a file of customer or payroll data without it leaving my computer?

Yes. The CSV is read and the workbook built inside the browser, SheetJS being served by this site itself at the moment of conversion, and the content of the file is sent to no service. That covers an accounting export, a customer list or a staff register with no transfer to a third party at any point.

Why does 03/04/2025 come out as 4 March instead of 3 April?

Because dates are read the American way, month first, and there is no setting to change it. In that same column 25/12/2024 has no possible reading under that convention and stays text, so a day-first column arrives part shifted date, part text, which rules out any chronological sort. Rewrite the column in the international form, 2025-04-03, before converting — that is the only form that crosses intact. Percentages fall to the same silent conversion: 12% arrives as 0.12, with no display format attached.

Can I choose the separator myself instead of letting it be detected?

No, detection is automatic and there is no manual override. Semicolons, commas and tabs are counted over the first ten lines and the most frequent one wins, the semicolon taking priority on a tie; the character that was kept appears in the result line beside the row and column counts. If the wrong one was picked, replace the separator in a text editor and run the conversion again.

Similar tools

Discover other tools

Categories