Parquet to Excel
How to open a Parquet file in Excel
Excel has no Parquet connector, and a sheet holds 1,048,576 rows by 16,384 columns. Open the .parquet file in rows.page (free, no signup), filter it down and export a CSV that Excel imports, or write a real .xlsx file with DuckDB 1.2+ or pandas. rows.page itself never writes .xlsx.
No file handy? Open NYC taxi trips, April 2019 (7.4M rows, 127 MB).
Why Excel cannot open Parquet directly
Power Query has a Parquet connector, but Microsoft lists it for Power BI and Power Query Online only, not Excel, and double-clicking a .parquet file doesn't open it either. Whatever route you take, the result has to fit one sheet: 1,048,576 rows by 16,384 columns.
| Route | Output | Row limit | Cost |
|---|---|---|---|
| rows.page | CSV (UTF-8, no BOM) | Filtered view: every matching row; SQL result: 1,000,000 | Free, no account |
DuckDB 1.2+ excel extension | .xlsx | 1,048,576 rows including the header, or an error | Free, open source |
pandas with openpyxl | .xlsx | Error when the DataFrame is bigger than a sheet | Free, open source |
Route 1: Convert Parquet to CSV in rows.page
rows.page opens .parquet and .pq files in your browser with DuckDB-WASM. Parquet isn't held to the 1.5 GB limit for text formats because it's read in place, and nothing is uploaded unless you press Share. rows.page doesn't write .xlsx, so you export a CSV and import that into Excel.
- Drop the
.parquetfile on rows.page. Rows load 100 at a time as you scroll. - Check each column's type, empty values and min and max in the Columns panel, and hide the columns you don't need.
- Cut the rows down to what fits in a sheet with the filter box (
country:NL,price:>20, or-name:*for empty values), a histogram bar, or SQL against thedatatable like the query below. - Open the Export menu and choose CSV. A filtered view exports every matching row without the hidden columns; a SQL result exports its own columns, up to 1,000,000 rows.
- In Excel, choose Data > Get Data > From File > From Text/CSV, pick the file, set File Origin to 65001: Unicode (UTF-8) and select Load.
SELECT * EXCLUDE (__rid)
FROM data
WHERE price > 20
LIMIT 500000Don't double-click the CSV. Excel only assumes UTF-8 when a CSV starts with a byte order mark (BOM), and rows.page writes UTF-8 without one, so accented text turns into junk such as é. Text cells that start with =, +, -, @, a tab or a carriage return get a leading apostrophe so Excel doesn't run them as formulas.
Route 2: Write a real .xlsx file with DuckDB
DuckDB 1.2 and later writes .xlsx files with its excel extension. Run this in the DuckDB CLI:
INSTALL excel;
LOAD excel;
COPY (SELECT * FROM 'data.parquet') TO 'data.xlsx' (FORMAT xlsx, HEADER true);The header counts toward the sheet limit: 1,048,575 data rows fit, and one more stops the export with Sheet row limit of '1048576' rows exceeded!. Add a WHERE clause or LIMIT 1048575 inside the SELECT to stay under it. Struct and list columns are written as text such as {'name': A, 'city': X} and [a, b].
Route 3: Convert Parquet to Excel with Python and pandas
pandas reads Parquet through pyarrow and writes .xlsx through openpyxl:
pip install pandas pyarrow openpyxlimport pandas as pd
df = pd.read_parquet('data.parquet')
df.to_excel('data.xlsx', index=False)to_excel raises This sheet is too large! when the DataFrame has more rows or columns than a sheet holds, so filter it first. Timestamps with a time zone stop it with Excel does not support datetimes with timezones; drop the zone with df['ts'] = df['ts'].dt.tz_localize(None). Struct cells are written as Python text such as {'name': 'A', 'city': 'X'}.
Gotchas when moving Parquet data into Excel
Parquet is typed and can nest data, while a sheet is a flat grid. Watch for these:
- Nested columns: rows.page flattens struct columns into dot-path columns such as
user.address.city, up to 8 levels deep and 200 fields per struct, and the CSV export keeps them as ordinary columns. In SQL, quote those names:"user.address.city". - Lists: the grid shows list values as chips, and the CSV export writes them as JSON text in a single cell.
- Timestamps: the CSV holds them as text such as
2024-01-01 12:00:00, with an offset such as+00when the column has a time zone. Check the type Power Query picks in the preview. - Row count: no route puts 2,000,000 rows on one sheet. Aggregate with SQL
GROUP BY, filter first, or load the CSV into Excel's Data Model with Load To, Only Create Connection and Add this data to the Data Model.
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
Does Power Query in Excel have a Parquet connector?
No. Microsoft lists the Power Query Parquet connector for Power BI and Power Query Online only. In Excel, import a CSV made from the Parquet file, or write an .xlsx file with DuckDB or pandas.
Does rows.page upload my Parquet file?
No. DuckDB-WASM reads the file inside your browser tab. It is uploaded only if you press Share, which returns a https://rows.page/<id> link.
How big a Parquet file can I open in rows.page?
Parquet isn't held to the 1.5 GB per-tab limit for CSV, TSV, JSON and JSONL, because DuckDB-WASM reads it in place. Sharing has its own limit: one push, from Share or curl, is capped at 100 MB on every plan, and Pro ($12 per month) and Max ($39 per month) accept up to 500 MB and 2 GB through the multipart upload API.
Why do accented characters look broken when I open the CSV in Excel?
rows.page writes UTF-8 without a BOM, and Excel only assumes UTF-8 when a CSV starts with one. Import the file with Data > Get Data > From File > 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, Parquet (zstd), JSON, JSONL and Markdown (first 1,000 rows); import the CSV into Excel and save it as an Excel Workbook.