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.
No file handy? Open CO2 emissions by country and year (50k rows, 14 MB).
Save an Excel sheet as CSV UTF-8
- Open the workbook and click the tab of the sheet you want to export.
- Choose File > Save As and pick a folder.
- In the file type list, choose CSV UTF-8 (Comma delimited) and select Save.
- 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 type | Encoding | When to use it |
|---|---|---|
| CSV UTF-8 (Comma delimited) | UTF-8 | Almost always; accents, symbols and non-Latin scripts survive |
| CSV (Comma delimited) | Legacy code page | Older tools that can't read UTF-8, when the sheet only uses characters from your local code page |
| CSV (Macintosh) | Legacy code page | Old Mac software that expects a Macintosh code page |
| CSV (MS-DOS) | Legacy code page | Old 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:>20or-name:*(is empty), or run SQL against thedatatable. - 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:
curl -T data.csv https://rows.pageThe 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:
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
| What | Limit or price |
|---|---|
| Open a file in your browser | Files 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.