Convert Any Spreadsheet to JSON
with a Single Function Call

Parses XLSX, CSV, ODS, and 13+ other formats, converting them into clean JSON. Works in Node and the browser.

✓ Minimal dependencies✓ MIT License✓ TypeScript support
Compatible with:JavaScript integration guideReact integration guideAngular integration guideVue integration guide

Part of Jspreadsheet, trusted by the world's leading companies

Virgin MediaSamsungDeloitteJohnson & JohnsonGeneral ElectricMcKinsey & CompanyKawasakiBPComcastAsahi KaseiDenso WaveMoody'sVerizonKyoceraMizuhoNoritzLexisNexisTokio MarineMKTSMCMicrochip

From Any File to Clean JSON in 4 lines

Feed in any spreadsheet format, your code stays the same.

upload.jsjs
import tabularjs from 'tabularjs';

// Works with any format: .xlsx, .ods, .csv, .xls...
input.addEventListener('change', async (e) => {
  const { worksheets } = await tabularjs(e.target.files[0]);
  const [headers, ...rows] = worksheets[0].data;

  // Clean, structured data, ready to use
  renderTable(headers, rows);
});
✓ XLSX, XLS, ODS, CSV, TSV + 11 more✓ Same output, across all formats✓ Browser & Node.js

Parsing Spreadsheets Shouldn't Be Hard.

Most Excel parsing libraries add extra dependencies and license checks. Many user-submitted formats also require special handling, which can increase bundle size and slow down builds.

TabularJS supports 16+ spreadsheet formats with a single function and returns JSON. Two small dependencies, no complicated steps, and no license keys to manage.

What You Get

Stop Writing Format-Specific Parsers.

A single function supports Excel (.xls, .xlsx), OpenDocument (.ods), CSV, TSV, Lotus 1-2-3, SYLK, DIF, dBase, XML 2003, HTML tables, and more.

Keep Formulas Without Recalculating

Formulas from XLS, XLSX, ODS, SYLK, XML 2003, and HTML files are preserved intact. You don't need to decode or recreate them. They're ready to use in your JSON.

Ship Faster, With Less to Audit.

Only two small runtime dependencies (JSZip and an HTML table parser) and no native modules, so there is little in your supply chain to review and audits stay simple.

Same JSON Output, Across All Formats.

Regardless of the format you submit, the JSON structure will be the same. You don't need to write format-specific code. Just use the output as needed.

Styles & Merged Cells

For supported formats (XLSX, ODS), cell formatting, merged ranges, and comments are included automatically. No additional processing required.

Multiple Worksheets

If your spreadsheet has more than one tab, each tab will appear in the output array in the same order. You can iterate through and use any tab you want.

Metadata Included

TabularJS extracts column types, labels, and document-level metadata from formats that include them.

output.jsonjson
{
  "worksheets": [
    {
      "name": "Sheet1",
      "data": [
        ["Name",  "Department",  "Salary"],
        ["Alice", "Engineering", 95000],
        ["Bob",   "Marketing",   72000]
      ],
      "styles": { "A1": { "bold": true } },
      "mergeCells": { "A5:C5": 1 },
      "comments": { "B2": "Reviewed" }
    }
  ]
}

Thinking About Migrating from SheetJS?

If you need an MIT license, minimal dependencies, and a simpler API, TabularJS is worth a look.

No License Surprises

TabularJS uses the MIT license and will continue to do so. You can use it in both commercial and open-source projects without needing to check the license with every new release.

Nothing in Your node_modules

With no transitive packages, there are no unexpected npm audit warnings from code you didn't write. A single package, pure JavaScript.

upload.htmlhtml
<script src="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jsuites/dist/jsuites.min.css" />
<script src="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/index.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jspreadsheet-ce/dist/jspreadsheet.min.css" />
<script src="https://cdn.jsdelivr.net/npm/tabularjs/dist/index.js"></script>

<div id="spreadsheet"></div>
<input type="file" id="fileInput" />

<script>
document.getElementById('fileInput')
  .addEventListener('change', async (e) => {
    const file = e.target.files[0];
    const result = await tabularjs(file);
    // tabs: true shows every worksheet of the file
    jspreadsheet(
      document.getElementById('spreadsheet'),
      { ...result, tabs: true }
    );
  });
</script>
Integration

Direct Integration with JS Spreadsheets

TabularJS output works directly withJspreadsheet. You can import any spreadsheet file and quickly display it as an editable, real-time online spreadsheet. It's compatible withJspreadsheet CE(open source) andJspreadsheet Pro.

Start Parsing in Under a Minute

MIT License. Install from NPM or drop the CDN script into any HTML page.

bash
npm install tabularjs

JavaScript Components

TabularJS is part of a suite of JavaScript tools for building web applications.