xsheetjs/demos/deno/README.md
2022-03-07 00:46:23 -08:00

2.7 KiB

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.

For user code, the sheetjs module can be used.

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.

Starting in version 0.18.1, this library will check for the Deno global and use Deno.readFileSync and Deno.writeFileSync behind the scenes.

For older versions, the API functions must be called from user code.

Reading a File

const filedata = Deno.readFileSync("test.xlsx");
const workbook = XLSX.read(filedata, {type: "buffer"});
/* DO SOMETHING WITH workbook HERE */

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:

const buf = XLSX.write(workbook, {type: "buffer", bookType: "xlsb"});
const u8: Uint8Array = new Uint8Array(buf);
Deno.writeFileSync("test.xlsb", u8);

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://deno.land/x/sheetjs/types/index.d.ts"
import * as XLSX from 'https://deno.land/x/sheetjs/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);
  • jspm imports the browser standalone script using JSPM:
import * as XLSX from 'https://jspm.dev/npm:xlsx!cjs';
  • 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