Bun
Tarballs are available on https://cdn.sheetjs.com.
https://cdn.sheetjs.com/xlsx-0.20.1/xlsx-0.20.1.tgz is the URL for version 0.20.1
Great open source software grows with user tests and reports. Any issues should be reported to the Bun project for further diagnosis.
Installation
Tarballs can be directly installed with bun install
1:
bun install https://cdn.sheetjs.com/xlsx-0.20.1/xlsx-0.20.1.tgz
Watch the repo or subscribe to the RSS feed to be notified when new versions are released!
At the time of writing bun install
does not support vendored tarballs2.
Usage
Bun supports both "CommonJS" and "ESM" modules.
It is strongly recommended to use CommonJS in Bun.
CommonJS require
By default, the module supports require
and it will automatically add support
for streams and file system access:
const { readFile } = require("xlsx");
const wb = readFile("pres.numbers"); // works!
ESM import
When importing the library using ESM import
statements, the native NodeJS
modules are not loaded. They must be added manually:
import * as XLSX from 'xlsx';
/* load 'fs' for readFile and writeFile support */
import * as fs from 'fs';
XLSX.set_fs(fs);
/* load 'stream' for stream support */
import { Readable } from 'stream';
XLSX.stream.set_readable(Readable);
/* load the codepage support library for extended support with older formats */
import * as cpexcel from 'xlsx/dist/cpexcel.full.mjs';
XLSX.set_cptable(cpexcel);
Bundling
For server-side scripts, bun build
can pre-optimize dependencies. The Bun
builder requires a proper package.json
that includes the SheetJS dependency.
This example was last tested on 2023 November 05 against BunJS 1.0.8.
0) Create a new project:
mkdir sheetjs-bun-dle
cd sheetjs-bun-dle
echo "{}" >> package.json
1) Install the library:
bun install https://cdn.sheetjs.com/xlsx-0.20.1/xlsx-0.20.1.tgz
2) Save the following script to bun.js
:
import * as XLSX from 'xlsx';
import * as fs from 'fs';
XLSX.set_fs(fs);
/* fetch JSON data and parse */
const url = "https://sheetjs.com/data/executive.json";
const raw_data = await (await fetch(url)).json();
/* filter for the Presidents */
const prez = raw_data.filter(row => row.terms.some(term => term.type === "prez"));
/* sort by first presidential term */
prez.forEach(row => row.start = row.terms.find(term => term.type === "prez").start);
prez.sort((l,r) => l.start.localeCompare(r.start));
/* flatten objects */
const rows = prez.map(row => ({
name: row.name.first + " " + row.name.last,
birthday: row.bio.birthday
}));
/* generate worksheet and workbook */
const worksheet = XLSX.utils.json_to_sheet(rows);
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, "Dates");
/* fix headers */
XLSX.utils.sheet_add_aoa(worksheet, [["Name", "Birthday"]], { origin: "A1" });
/* calculate column width */
const max_width = rows.reduce((w, r) => Math.max(w, r.name.length), 10);
worksheet["!cols"] = [ { wch: max_width } ];
/* create an XLSX file and try to save to Presidents.xlsx */
XLSX.writeFile(workbook, "Presidents.xlsx");
3) Bundle the script with bun build
:
bun build --target=bun bun.js --outfile=app.js
This procedure will generate app.js
.
4) Remove the node_modules
directory and package.json
file:
rm package.json
rm -rf ./node_modules
5) Run the script:
bun app.js
If the script succeeded, the file Presidents.xlsx
will be created. That file
can be opened in a spreadsheet editor.
- Bun releases before the official 1.0.0 release did not support tarball dependencies. If a pre-1.0.0 release must be used, the ES Module script can be vendored or the NodeJS module can be installed with a NodeJS-compatible package manager.↩
- See the relevant issue in the Bun issue tracker↩