Skip to main content
Deno 2 is finally here 🎉️
Learn more

Deno

Deno is a runtime capable of running JS code including this library. There are a few different builds and recommended use cases as covered in this demo.

Due to ongoing stability and sync issues with the Deno registry, scripts should use the CDN build:

// @deno-types="https://cdn.sheetjs.com/xlsx-latest/package/types/index.d.ts"
import * as XLSX from 'https://cdn.sheetjs.com/xlsx-latest/package/xlsx.mjs';

/* load the codepage support library for extended support with older formats  */
import * as cptable from 'https://cdn.sheetjs.com/xlsx-latest/package/dist/cpexcel.full.mjs';
XLSX.set_cptable(cptable);

Reading and Writing Files

In general, the command-line flag --allow-read must be passed to enable file reading. The flag --allow-write must be passed to enable file writing.

Reading a File

const workbook = XLSX.readFile("test.xlsx");

Writing a File

Older versions of the library did not properly detect features from Deno, so the buffer export would return an array of bytes. Since Deno.writeFileSync does not handle byte arrays, user code must generate a Uint8Array first:

XLSX.writeFile(workbook, "test.xlsb");

Demos

Complete Examples

sheet2csv.ts is a complete command-line tool for generating CSV text from workbooks. Building the application is incredibly straightforward:

$ deno compile -r --allow-read sheet2csv.ts  # build the sheet2csv binary
$ ./sheet2csv test.xlsx                      # print the first worksheet as CSV
$ ./sheet2csv test.xlsx s5s                  # print worksheet "s5s" as CSV

The server demo includes a sample Deno server for parsing uploads and generating HTML TABLE previews.

Module Import Scenarios

All demos attempt to read a file and write a new file. doit.ts accepts the XLSX module as an argument.

  • x imports the ESM build without the codepage library:
// @deno-types="https://cdn.sheetjs.com/xlsx-latest/package/types/index.d.ts"
import * as XLSX from 'https://cdn.sheetjs.com/xlsx-latest/package/xlsx.mjs';
  • mjs imports the ESM build and the associated codepage library:
import * as XLSX from '../../xlsx.mjs';
/* recommended for reading XLS files */
import * as cptable from '../../dist/cptable.full.mjs';
XLSX.set_cptable(cptable);
  • node uses the node compatibility layer:
import { createRequire } from 'https://deno.land/std/node/module.ts';
const require = createRequire(import.meta.url);
const XLSX = require('../../');

Analytics