Skip to main content

Command-Line Tools

With the availability of JS engines and the success of server-side platforms, it is feasible to build command-line tools for various workflows.

This demo covers a number of strategies for building standalone processors. The goal is to generate CSV output from an arbitrary spreadsheet file.


deno compile generates a standalone executable that includes the entire JS runtime as well as user JS code.

When compiling, the --allow-read option must be specified to allow the script to read files from the filesystem with Deno.readFileSync.

Complete Example (click to show)

1) Save the following script to sheet2csv.ts:

/*! sheetjs (C) 2013-present SheetJS -- */
// @deno-types=""
import * as XLSX from '';
import * as cptable from '';

/* Read and parse workbook */
const filename = Deno.args[0];
if(!filename) {
console.error("usage: sheet2csv <filename> [sheetname]");
const workbook = XLSX.readFile(filename);

/* Find worksheet */
const sheetname = Deno.args[1] || workbook.SheetNames[0];
if(!workbook.Sheets[sheetname]) {
console.error(`error: workbook missing sheet ${sheetname}`);

/* Generate CSV and print to stdout */

2) Build sheet2csv with deno compile:

deno compile -r --allow-read sheet2csv.ts

sheet2csv is a generated executable that you can run.


There are a few popular tools for compiling NodeJS scripts to CLI programs.

The demo script presents a friendly command line interface including flags:

$ ./xlsx-cli -h
Usage: xlsx-cli [options] <file> [sheetname]

-V, --version output the version number
-f, --file <file> use specified workbook
-s, --sheet <sheet> print specified sheet (default first sheet)

1) Download xlsx-cli.js

2) Install the dependencies:

yarn add exit-on-epipe [email protected]

3) Follow tooling steps:

Run nexe and manually specify NodeJS version 14.15.3

npx nexe -t 14.15.3 xlsx-cli.js

This generates xlsx-cli or xlsx-cli.exe depending on platform.