Skip to main content
Ink·tab

xlsx · csv · json both directions

Turn an Excel sheet into JSON or CSV — or back. Everything stays in the browser.

Direction
Upload file· xlsx · xls · xlsm · ods · csv · up to 50MB
Drop a file here, or

Everything happens in your browser. Nothing is uploaded.

When to use it

A vendor sent an Excel sheet that needs to land in code (JSON, a database import). Or you have JSON / CSV data that an internal user wants as Excel.

Supported formats

  • Readingxlsx, xls, xlsm, ods, csv. One file at a time.
  • Writingxlsx, single sheet. You name the sheet.

Cell types

  • Numbers — preserved as-is. Integers, decimals, scientific notation.
  • Dates — exported to JSON as ISO 8601 strings (e.g. 2026-04-29T00:00:00.000Z), not Excel serial numbers — so the round trip is lossless.
  • Blank cellsnull in JSON, empty field in CSV.
  • Formulas — only the last computed value is read. The formula itself is dropped.

First-row-as-header

A toggle on the JSON output.

  • On (default) — row 1 becomes keys. { "id": ..., "name": ... }.
  • Off — keys default to col_1, col_2, ... For raw data dumps with no header row.

Large files

Up to 50MB is accepted. Anything over 10MB may briefly hang the tab during parse; over 100MB is not recommended on a laptop (the browser may show an unresponsive prompt).

Privacy

A vendor sales sheet, an internal HR table, a client roster — none of it leaves the page. The file lives briefly as an ArrayBuffer in memory and disappears when the tab closes.

Not the right tool when

  • You need formulas to survive — only values come through. If the formulas, macros, charts, or conditional formatting must remain alive, use Excel itself.
  • You want every sheet exported at once — one sheet per export. For multi-sheet files, switch the tab and download each one.
  • You need a visual conversion (xlsx → pdf) — table styling, paper layout, headers/footers belong to Excel's PDF export.

Excel files stay in your browser

A vendor sales sheet, an internal HR table, a client roster — none of it is uploaded. SheetJS is dynamically imported into the client bundle, and the file lives only briefly in memory as an ArrayBuffer; it disappears when you close the tab.

Frequently asked questions

Which formats are supported?
Reading: xlsx, xls, xlsm, ods, csv. Writing: xlsx (single sheet). The first-row-as-header toggle controls how each sheet maps into JSON keys.
Are Korean (Hangeul) cells preserved?
Inside xlsx, Hangeul is decoded as UTF-8 automatically. For CSVs in EUC-KR / CP949, SheetJS's encoding guess isn't always right — when possible, save the CSV as UTF-8 first. Outputs are always UTF-8.
How large a file can I open?
Up to 50MB. Files over 10MB strain browser memory and may hang the tab briefly during parse. Anything above 100MB is not recommended on a laptop.
How are multi-sheet files handled?
After parse, a row of sheet tabs appears. The output panel converts one sheet at a time; switching tabs updates the output immediately.
How are blank cells represented in JSON?
Blank cells become `null` (the JSON standard). Date cells become ISO 8601 strings (e.g. `2026-04-29T00:00:00.000Z`) so the round-trip is lossless.