Excel to CSV

How to convert Excel to CSV without breaking characters

In Excel, choose File > Save As and pick CSV UTF-8 (Comma delimited); it saves the active sheet, up to 1,048,576 rows. Or copy the cells, click Paste data on rows.page (free, no signup) and export a comma-delimited UTF-8 CSV. rows.page also checks CSV files up to 1.5 GB, but it never opens .xlsx itself.

.csv
Drop a file here
Stays in your browserUp to 1.5 GB

No file handy? Open CO2 emissions by country and year (50k rows, 14 MB).

Save an Excel sheet as CSV UTF-8

  1. Open the workbook and click the tab of the sheet you want to export.
  2. Choose File > Save As and pick a folder.
  3. In the file type list, choose CSV UTF-8 (Comma delimited) and select Save.
  4. Select OK when Excel reminds you that only the active sheet will be saved.

Excel lists four CSV types, and only CSV UTF-8 writes UTF-8. The other three use a legacy code page, so characters outside that code page are lost.

Excel CSV Save As types
Excel CSV typeEncodingWhen to use it
CSV UTF-8 (Comma delimited)UTF-8Almost always; accents, symbols and non-Latin scripts survive
CSV (Comma delimited)Legacy code pageOlder tools that can't read UTF-8, when the sheet only uses characters from your local code page
CSV (Macintosh)Legacy code pageOld Mac software that expects a Macintosh code page
CSV (MS-DOS)Legacy code pageOld DOS programs that expect an MS-DOS code page

What Excel changes when you save as CSV

A CSV holds plain text only, so keep these Excel behaviors in mind before you close the workbook:

  • Only the active sheet is saved. For a workbook with several tabs, save each sheet separately.
  • All formatting is lost, and formulas are saved as their calculated values.
  • On Windows, the separator follows the Region list separator, so Excel can write semicolons despite the Comma delimited label. Change the List separator in the Windows Region settings, or open the file in rows.page and export it again, which always writes commas.
  • A sheet holds at most 1,048,576 rows by 16,384 columns, so that is the most one CSV from Excel can contain.

Paste cells into rows.page instead of saving

To turn a range into CSV without Save As, copy the cells in Excel, open rows.page, click Paste data and paste. The cells arrive tab-separated and open as a table. rows.page reads them inside your browser with DuckDB-WASM and uploads nothing unless you press Share.

Then open the Export menu and choose CSV. The file is always comma-delimited with a header row and UTF-8 without a BOM, whatever your Windows settings, and there is no option to change that. Text cells that start with =, +, -, @, a tab or a carriage return get a leading apostrophe so spreadsheets don't run them as formulas.

Check the exported CSV in rows.page

Drop the .csv file on rows.page to see what Excel actually wrote. Files up to 1.5 GB open in full, and a bigger one loads partially with the note "Loaded the first N rows: the file is X, more than the browser can hold." rows.page doesn't read workbooks: a dropped .xlsx or .xls file won't open as a sheet, and pushing an .xlsx returns "This looks like an Excel or zip file. Export it as CSV and push again."

  • Delimiter: the CSV sniffer detects comma, semicolon, tab and pipe, plus the header row, so a semicolon file opens without any setting.
  • Encoding: UTF-8 opens as is, and UTF-16 with a BOM shows "Read as UTF-16 text." Any other file is read as Latin-1 with the note "Read as Latin-1 text.", which means it wasn't saved as UTF-8. If it also holds a euro sign, curly quotes or long dashes in a Windows encoding, it won't open ("Couldn't open this data"), so save it again as CSV UTF-8.
  • Rows: the grid has no row limit and loads 100 rows at a time as you scroll. Filter with country:NL, price:>20 or -name:* (is empty), or run SQL against the data table.
  • Columns: the Columns panel shows each column's type, distinct count ("N values"), share of empty values, min and max for numbers and dates, and a histogram or the top 10 values.

To normalize a semicolon file, export it again as CSV from rows.page. To send it to someone, press Share ("Upload and get a link") or push it from a terminal:

bash
curl -T data.csv https://rows.page

The command prints a https://rows.page/<id> link and an owner link for pushing new versions. One push is capped at 100 MB, and an anonymous link expires after 7 days unless you press Keep it on the dataset page to move it to your account (Free keeps 10 datasets, Pro at $12 per month keeps 100, Max at $39 per month keeps 1,000).

Convert without Excel: Google Sheets, LibreOffice or DuckDB

Without Excel installed, or with a folder of workbooks to convert, use one of these:

Google Sheets

Open the workbook in Google Sheets and choose File > Download > Comma Separated Values (.csv), which exports the current sheet. A sheet shared as Anyone with the link also has an export?format=csv URL that opens in rows.page when you put it after rows.page/.

LibreOffice Calc

Choose File > Save As, pick the Text CSV file type and tick Edit filter settings. The export dialog then lets you set the character set and the field delimiter.

DuckDB

DuckDB 1.2 and later reads .xlsx files with the excel extension (old .xls files are not supported) and writes a UTF-8 CSV with a header row:

sql
INSTALL excel;
LOAD excel;
COPY (SELECT * FROM read_xlsx('book.xlsx', sheet = 'Sheet1')) TO 'out.csv' (HEADER);

Number cells load as DOUBLE, so whole numbers are written as 1.0; cast them in the SELECT if that matters. Text cells, including ZIP codes with leading zeros, are written as they are.

rows.page limits and prices

WhatLimit or price
Open a file in your browserFiles up to 1.5 GB, $0, no account, nothing uploaded
Share a link without an account$0, files up to 100 MB, link deleted 7 days after creation
Free account$0, 10 datasets kept, last 3 versions
Pro$12/month, 100 datasets, files up to 500 MB, private links
Max$39/month, 1,000 datasets, files up to 2 GB, private links

Questions

Why did Excel use semicolons instead of commas in my CSV?

Excel on Windows writes the Region list separator, which is usually a semicolon where the decimal symbol is a comma, even for the Comma delimited types. Open the file in rows.page, which detects semicolons, and export it as CSV to get commas.

Why does rows.page say "Read as Latin-1 text." when I open my CSV?

The file isn't valid UTF-8, which happens when a sheet with accents or symbols is saved as CSV (Comma delimited), CSV (Macintosh) or CSV (MS-DOS). Save it again as CSV UTF-8 (Comma delimited). A file that holds a euro sign, curly quotes or long dashes in a Windows encoding won't open at all.

Can I open an .xlsx file in rows.page?

No. rows.page does not read or write .xlsx or .xls files, and pushing an .xlsx returns "This looks like an Excel or zip file. Export it as CSV and push again." Save the sheet as CSV, or copy the cells and use Paste data.

How many rows can I convert from Excel to CSV?

An Excel sheet holds up to 1,048,576 rows by 16,384 columns, so one CSV from Excel can't hold more. rows.page has no row limit in the grid and opens CSV files up to 1.5 GB per browser tab in full.

Does the CSV keep my formulas and other sheets?

No. Saving as CSV writes only the active sheet, with each formula replaced by its result. If you later export a CSV from rows.page, text cells that start with =, +, - or @ get a leading apostrophe so spreadsheets don't run them.