When an Excel workbook has one sheet, the JSON output is an array of row objects. When it has several sheets, the output is an object whose keys are the sheet names and whose values are those arrays. Formulas export their calculated values, and dates export as ISO 8601 date-time strings.
Knowing these rules up front helps you write the code that reads the file. Each case below shows what the Excel to JSON converter produces.
On this page
Key takeaways
- One sheet produces an array; several sheets produce an object keyed by sheet name.
- Formulas export the value Excel last calculated, not the formula text.
- Date cells become ISO 8601 strings; check one date against your time zone.
- Blank headers get placeholder keys and duplicate headers get a numbered suffix.
Steps shown in the video
- Click Choose Excel Files and select your workbook
- Your file is listed with its size
- Click Convert to JSON
- Download your .json file
One sheet vs several sheets
[
{ "name": "Ana", "team": "Sales" }
]{
"People": [ { "name": "Ana", "team": "Sales" } ],
"Teams": [ { "team": "Sales", "lead": "Ben" } ]
}Sheet names become keys exactly as written, including spaces, so data["Q1 Sales"] is how you would read a sheet called Q1 Sales in JavaScript. Empty sheets appear as empty arrays.
What happens to formulas?
Each formula cell exports the value Excel stored the last time it calculated the workbook. A cell containing =B2*C2 that shows 49.8 exports as 49.8. The formula itself is not included, because JSON consumers almost always need the result.
If a workbook was saved by a tool that does not store calculated values, open it in Excel, let it recalculate and save it before converting.
How are dates exported?
JSON has no date type, so real Excel date cells are written as ISO 8601 strings such as "2026-10-09T00:00:00.000Z". Any code can parse that format. Dates typed as text in Excel stay text, exactly as entered.
Blank, duplicate and messy headers
| Header row | JSON key |
|---|---|
| name | name |
| Unit Price (€) | Unit Price (€) |
| (blank) | A placeholder such as __EMPTY |
| name (second time) | name_1 |
The first row of each sheet is always treated as the header. If your sheet starts with a title or a logo row, delete it so the real column names are in row 1.
Empty cells, merged cells and booleans
- Empty cells become null.
- Merged cells keep their value in the top-left cell only; the other cells of the merge are empty and become null. Unmerge and fill down before converting if every row needs the value.
- TRUE and FALSE cells become JSON booleans.
- Numbers keep the full stored value, not the rounded number shown on screen.
For the basic steps, read how to convert Excel to JSON. To turn edited JSON back into a workbook, use JSON to Excel.
Reading the multi-sheet output in code
const data = await fetch("/workbook.json").then((r) => r.json());
const sheets = Array.isArray(data) ? { Sheet1: data } : data;
for (const [name, rows] of Object.entries(sheets)) {
console.log(name, rows.length, "rows");
}This pattern handles both shapes, a single array or an object of sheets, so your code keeps working if someone adds a second sheet to the workbook later.
Excel to JSON details: FAQ
How are multiple Excel sheets exported to JSON?
As one object whose keys are the sheet names and whose values are arrays of row objects.
Does Excel to JSON keep formulas?
No. It exports the calculated values, which is what most applications need.
What format are dates in?
ISO 8601 strings, such as 2026-10-09T00:00:00.000Z. Check one value against your sheet in case of a time zone shift.
Why does my JSON have keys like __EMPTY?
A column in the header row has no name. Add a header to that column and convert again.
Why do numbers have more decimals than in Excel?
The JSON contains the stored value. Excel's display format may round it on screen.
Know the shape before you code
Sheets become keys, formulas become values and dates become ISO strings. With those rules in mind, you can prepare the workbook once and read the JSON without surprises.