CSV to Excel

How to open a CSV in Excel correctly: UTF-8, zeros and dates

Excel caps a sheet at 1,048,576 rows; import a CSV with File Origin 65001 to keep accents and Do not detect data types to keep leading zeros. Both settings are in Data > Get Data > From Text/CSV; double-clicking the file skips them. Trim bigger files in rows.page first: it's free with no signup and opens CSVs up to 1.5 GB.

.csv.tsv
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).

Why double-clicking a CSV in Excel breaks your data

Excel opens a double-clicked CSV without asking about encoding, delimiter or column types. It guesses, and saving the file writes the damaged values back out.

Excel only assumes UTF-8 when a CSV starts with a UTF-8 byte order mark (BOM), and many tools, rows.page included, export UTF-8 without one. Excel also turns anything that looks numeric into a number: leading zeros vanish, digits past the 15th become zeros, and codes with slashes or hyphens turn into dates.

Common CSV problems in Excel and how to fix them
ProblemWhat you seeFix
UTF-8 without a BOMé shows up as é and other symbols turn to junkImport with From Text/CSV and set File Origin to 65001: Unicode (UTF-8)
Wrong delimiterEvery row sits in column A with semicolons, tabs or pipes visiblePick the right Delimiter in the From Text/CSV preview
Dropped leading zerosZIP code 02134 becomes 2134Set Data Type Detection to Do not detect data types, or make the column Text in Transform Data
Numbers over 15 digitsA long ID shows in scientific notation and digits past the 15th become 0Load the column as Text
Automatic datesCodes like 10-12 or 3/4 turn into datesLoad the column as Text
More than 1,048,576 rowsRows past the sheet limit are missingTrim the file in rows.page, or load it into the Data Model

Open a CSV in Excel with Data > Get Data > From Text/CSV

Skip the double-click and import the file instead. This works for any CSV, including rows.page exports, which are UTF-8 without a BOM.

  1. In a blank workbook, choose Data > Get Data > From File > From Text/CSV (some ribbons show Data > From Text/CSV directly).
  2. Pick the .csv file and open it.
  3. In the preview, set File Origin to 65001: Unicode (UTF-8) and check that accented characters look right.
  4. Check the Delimiter. Excel detects it, but you can pick Comma, Semicolon, Tab or another character.
  5. To keep leading zeros, long IDs and date-like codes, set Data Type Detection to Do not detect data types, which loads every column as Text.
  6. To change only some columns, select Transform Data instead, click the type icon in each ID, ZIP or code column header and choose Text. If Excel asks, choose Replace current so the original text is kept.
  7. Select Load (Close & Load in the editor), then save the workbook as Excel Workbook (.xlsx) with File > Save As.

Saving as .xlsx matters: a .csv stores plain text only, so the column types you set are lost if you save back to CSV.

When the CSV is too big or messy for Excel: trim it in rows.page

An Excel sheet holds 1,048,576 rows by 16,384 columns. For a bigger file, or one you want to clean first, open it in rows.page: it's free, needs no account and reads the file inside your browser with DuckDB-WASM.

CSV and TSV files up to 1.5 GB open in full, and a bigger file loads partially with the note "Loaded the first N rows: the file is X, more than the browser can hold." The sniffer detects comma, semicolon, tab and pipe delimiters and the header row. A file that isn't UTF-8 is read as Latin-1, unless it holds Windows-only characters such as the euro sign or curly quotes, in which case it doesn't open.

Narrow the rows with the filter box (country:NL, price:>20, or -name:* for empty values) or by clicking a histogram bar in the Columns panel. To aggregate, type SQL into the same box; the table is called data:

sql
SELECT country, status, count(*) AS orders, sum(total) AS revenue
FROM data
WHERE status != 'cancelled'
GROUP BY country, status
ORDER BY revenue DESC

A SQL result shows and exports up to 1,000,000 rows, which fits in one sheet, while a filtered view exports every matching row. To keep every row inside Excel instead, choose Load To in the From Text/CSV dialog, pick Only Create Connection and tick Add this data to the Data Model.

Formula-safe CSV exports from rows.page

rows.page doesn't write .xlsx files. It exports your filtered view or SQL result as a CSV that Excel imports cleanly:

  • Comma-delimited with a header row.
  • UTF-8 without a BOM, so use the File Origin step above; there is no option for another delimiter, encoding or a BOM.
  • Text cells that start with =, +, -, @, a tab or a carriage return get a leading apostrophe so Excel doesn't run them as formulas.
  • Filtered views export every matching row; SQL results stop at 1,000,000 rows.

To hand over the data without a spreadsheet, press Share ("Upload and get a link") or push the file from a terminal. One push is capped at 100 MB, and the link expires after 7 days unless you press Keep it on the dataset page.

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

Convert CSV to .xlsx without Excel: DuckDB or pandas

To produce an .xlsx file in a script, DuckDB 1.2 and later writes one with its excel extension. This keeps a long order ID as text so Excel can't round it:

sql
INSTALL excel;
LOAD excel;
COPY (
  SELECT * REPLACE (CAST(order_id AS VARCHAR) AS order_id)
  FROM read_csv('data.csv')
) TO 'data.xlsx' (FORMAT xlsx, HEADER true);

DuckDB keeps a ZIP code such as 02134 as text on its own, and it refuses to write more than 1,048,576 rows to a sheet, header row included. In pandas (pip install pandas openpyxl), pass dtype for the columns that must stay text:

python
import pandas as pd

df = pd.read_csv('data.csv', dtype={'zip': str, 'order_id': str})
df.to_excel('data.xlsx', index=False)

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 do my 16-digit order IDs end in zeros in Excel?

Excel keeps 15 significant digits, so digits from the 16th on become 0 when the column loads as a number. Import the CSV with Data > Get Data > From Text/CSV and load the ID column as Text.

Why does Excel show é instead of é when I open a CSV?

The file is UTF-8 without a BOM, and Excel read it with another encoding on a double-click. Import it with Data > Get Data > From Text/CSV and choose 65001: Unicode (UTF-8) under File Origin.

Can rows.page export an .xlsx file?

No. rows.page does not read or write .xlsx or .xls files. It exports CSV (comma-delimited, UTF-8 without a BOM), Parquet, JSON, JSONL or Markdown (first 1,000 rows), and you save the CSV as .xlsx in Excel.

How do I open a CSV with more than 1,048,576 rows?

A sheet can't hold more. Load the file into Excel's Data Model (Load To, Only Create Connection, Add this data to the Data Model), or open it in rows.page, which reads CSV files up to 1.5 GB, and export a filtered or aggregated CSV that fits.

Does rows.page upload my CSV when I open it?

No. Opening a file is free, needs no account and happens inside your browser with DuckDB-WASM. The file is uploaded only if you press Share or push it with curl or the MCP server.