What the converter reads
Any .xlsx or .xlsm workbook saved by Excel, LibreOffice, Google Sheets, Numbers or a reporting library works, and so does a .csv file. The file is unzipped and parsed in the browser with no third-party library, so it also works offline.
Older formats cannot be read. A .xls file from Excel 97–2003 uses a binary format; open it in Excel or LibreOffice and save it as Excel Workbook (.xlsx). A password-protected workbook is encrypted, so remove the password in Excel first. Binary workbooks (.xlsb) and OpenDocument (.ods) files get the same advice: save as .xlsx. Files whose contents would expand beyond 200 MB are refused before they can exhaust the tab’s memory.
Sheets, headers and empty rows
The Sheet menu lists every worksheet; hidden sheets are marked but can still be converted. Chart sheets have no cells and are left out.
With First row is a header, the cells of that row become the keys of each object. Exports often start with a title or a blank line, so the Header row box picks which row holds the column names; rows above it are ignored. A blank header cell above a column with data is named after its column letter (C), and repeated names get a suffix (units, units_2), so no value is lost to a key collision. Without a header, keys are the column letters.
Skip empty rows drops rows with no values, which spreadsheets accumulate between blocks of data. Turn it off when the position of each row matters.
The output is either an array of objects, one per row with every column present (empty cells are null), or an array of arrays, which keeps the grid exactly as it is, header row included.
How cell values become JSON
- Numbers come out as JSON numbers with the digits Excel shows in its formula bar. Excel stores numbers as doubles and displays at most 15 significant digits, so a stored
0.30000000000000004becomes0.3, and no extra rounding happens on the way. - Dates are numbers with a date format in Excel. The converter reads each cell’s number format and writes
2024-03-11,2024-03-11T09:30:00or09:30:00to match what the cell displays. Workbooks using the 1904 date system (old Mac files) are detected, and Excel’s fictional 29 February 1900 is reproduced the way Excel shows it. - Text comes from shared strings, inline strings and rich-text runs joined together; phonetic guides that Japanese workbooks store alongside text are skipped.
- Booleans are
trueandfalse. Error values such as#N/Aor#DIV/0!are kept as strings and counted in a note. - Formulas give the result Excel saved with the file. A workbook generated by a program that never calculated it has no saved results, so those cells are
nulland a note says how many. - Merged cells hold their value in the top-left cell only, exactly as Excel stores them; the other cells of the range are empty.
CSV files are typed more simply: values that look like JSON numbers become numbers (but 007 keeps its zeros as text), true and false become booleans and empty fields become null.
Using the result
Copy puts the JSON on the clipboard, Download .json saves it with the workbook’s name, and Open in JSON formatter carries it to the JSON formatter, where you can query it, view it as a tree or validate it against a schema. To go back to a spreadsheet later, use JSON to Excel. If your CSV comes from Excel and shows garbled accents, the CSV and Excel encoding guide explains why.
Examples
Product list from CSV
Prices and the true/false column are typed, and the quoted comma inside a product name is kept as part of the text.
sku,name,price,in_stock
KB-104,Mechanical keyboard,129.90,true
MS-220,Wireless mouse,39,false
CB-007,"USB-C cable, 2 m",9.5,true
[
{
"sku": "KB-104",
"name": "Mechanical keyboard",
"price": 129.90,
"in_stock": true
},
{
"sku": "MS-220",
"name": "Wireless mouse",
"price": 39,
"in_stock": false
},
{
"sku": "CB-007",
"name": "USB-C cable, 2 m",
"price": 9.5,
"in_stock": true
}
]
Export with a title row and duplicate headers
With Header row set to 1 the title becomes a key, blank headers become column letters and the empty second row is skipped. Set Header row to 3 to use region, units and units_2 as keys instead.
Monthly sales export,,
,,
region,units,units
North,120,98
South,,77
[
{
"Monthly sales export": "region",
"B": "units",
"C": "units"
},
{
"Monthly sales export": "North",
"B": 120,
"C": 98
},
{
"Monthly sales export": "South",
"B": null,
"C": 77
}
]
Common errors and how to fix them
| Error | Cause | Fix |
|---|---|---|
This is an old binary Excel file (.xls, Excel 97–2003) | The file uses the binary format Excel used before 2007, which is a different format from .xlsx, not just another file extension. | Open it in Excel or LibreOffice, choose Save As → Excel Workbook (.xlsx), and open the new file. |
The workbook is password-protected | Excel encrypts the whole file when a password is required to open it, so its cells cannot be read without that password. | Open it in Excel, remove the password under File → Info → Protect Workbook, save, and try again. |
formula cells have no saved result | The workbook was written by a program that stored formulas without calculating them. | Open the file in Excel or LibreOffice once and save it, so the results are stored next to the formulas. |
The workbook expands to more than 200 MB of XML | The sheet is extremely large, or the file is a deliberately crafted zip bomb. | Split the workbook or export only the sheet you need, for example as CSV. |
Frequently asked questions
Is the spreadsheet uploaded anywhere?
No. The file is read into memory in this tab and parsed by a background worker; nothing is sent over the network.
Why do my dates come out as numbers?
Only cells formatted as dates are converted. If a date column shows numbers such as 45362 in Excel itself, apply a date format to it and save before converting.
Why is a long ID shorter or different in the JSON?
Excel already rounded it when the value was typed or imported, because Excel numbers keep 15 significant digits. Format the column as Text in Excel before entering IDs to keep every digit.
Can I convert every sheet at once?
Convert one sheet at a time: choose each in the Sheet menu and copy or download its JSON. Switching sheets is instant because the workbook is only read once.
Does it read .xlsm files with macros?
Yes. The cells are read and the macros are ignored; they are never run.