Customer sheet
- Input
- Workbook Customers: name | zip | signup_date, row: Lee | text 02134 | date cell 2026-09-10.
- Output
- JSON: [{"name":"Lee","zip":"02134","signup_date":"2026-09-10T00:00:00.000Z"}]. The ZIP stays text because the cell was text.
XLSX to JSON runs through our table engine, returning an array of objects keyed by the selected sheet's header row.
From real runs
| Element | Result | What happens |
|---|---|---|
| Header row | Changed | Column labels from the header row become JSON object keys; blank or duplicate headers are normalized so records stay addressable. |
| Data rows | Kept | Each non-empty worksheet row becomes one object in the output array. |
| Trailing blank rows | Changed | Empty trailing rows are dropped so accidental formatting far below the table does not become empty JSON objects. |
| Dates | Changed | Excel date cells are emitted as ISO strings; cells that were text remain text. |
| Multiple sheets | Changed | The sheet option selects one worksheet; multiple sheets are not combined into a single JSON file automatically. |
| Merged cells | Changed | Only the top-left value of a merged range is available, which can create empty keys or cells around merged headers. |
| Formatting | Lost | Colors, filters, comments, formulas, and chart objects are not represented in JSON records. |
Column labels from the header row become JSON object keys; blank or duplicate headers are normalized so records stay addressable.
Each non-empty worksheet row becomes one object in the output array.
Empty trailing rows are dropped so accidental formatting far below the table does not become empty JSON objects.
Excel date cells are emitted as ISO strings; cells that were text remain text.
The sheet option selects one worksheet; multiple sheets are not combined into a single JSON file automatically.
Only the top-left value of a merged range is available, which can create empty keys or cells around merged headers.
Colors, filters, comments, formulas, and chart objects are not represented in JSON records.
We converted our Excel XLSX sample (17 KB) with Table engine on 2026-09-11. It took 1 ms and produced a 558 B JSON file, 97% smaller than the input. The engine raised 2 warnings, listed below.
Input · sample.xlsx · 17 KB
Workbook with 2 sheets (Pipeline, Notes); first sheet 5 rows, 25 cells, 0 formulas
Output · sample.json · 558 B
Array of 4 objects; keys: company, stage, arr, owner, close_date
First lines of the output
[
{
"company": "Northwind Traders",
"stage": "Proposal",
"arr": 48000,
"owner": "R. Ayers",
"close_date": "2026-10-14"
},
{
"company": "Contoso Ltd",
"stage": "Negotiation",
"arr": 120000,
"owner": "P. Ng",
"close_date": "2026-09-30"
},
{
"company": "Fabrikam",
"stage": "Qualified",
…pandas
python - <<'PY'
import pandas as pd
pd.read_excel("in.xlsx", sheet_name=0).to_json("out.json", orient="records", indent=2, date_format="iso")
PYSet sheet_name and header explicitly for workbooks with title rows or lookup tabs.
csvkit plus jq
in2csv --sheet Products in.xlsx > products.csv
python - <<'PY'
import pandas as pd
pd.read_csv("products.csv").to_json("products.json", orient="records", indent=2)
PYThe intermediate CSV step loses workbook-only features just like the conversion.
The HTTP API and the MCP server run the exact engine this page uses (Table engine); the response carries the same warnings the web converter shows. Check support first with GET /api/v1/pairs?from=xlsx&to=json.
curl -X POST https://filetypeconverters.com/api/v1/convert \
-H "Authorization: Bearer $FTC_API_KEY" \
-F "file=@input.xlsx" -F "from=xlsx" -F "to=json" \
-F 'options={"sheet":""}' \
--output output.json| Key | Applies to | Type | Default |
|---|---|---|---|
| sheet | Reading Excel XLSX | string | |
| headerRowIndex | Reading Excel XLSX | number | 0 |
| dateHandling | Reading Excel XLSX | date · string | date |
| delimiter | Writing JSON | string | , |
| newline | Writing JSON | · | |
| sheetName | Writing JSON | string | |
| dialect | Writing JSON | postgres · mysql · sqlite | postgres |
| tableName | Writing JSON | string | data |
| createTable | Writing JSON | boolean | true |
It creates an array of objects. Each row becomes one object and the selected header row supplies the object keys.
Yes. Use the sheet option to pick the worksheet you want before converting.
Empty trailing rows are dropped so formatting artifacts below the data do not become empty JSON objects.