2022-07-31 23:45:34 +00:00
|
|
|
---
|
|
|
|
title: Command-Line Tools
|
2023-02-15 06:00:28 +00:00
|
|
|
pagination_prev: demos/cloudata/index
|
2023-02-13 04:07:25 +00:00
|
|
|
pagination_next: demos/engines/index
|
2022-07-31 23:45:34 +00:00
|
|
|
---
|
|
|
|
|
|
|
|
import current from '/version.js';
|
2022-08-01 08:15:50 +00:00
|
|
|
import Tabs from '@theme/Tabs';
|
|
|
|
import TabItem from '@theme/TabItem';
|
2022-07-31 23:45:34 +00:00
|
|
|
|
2022-08-25 08:22:28 +00:00
|
|
|
With the availability of JS engines and the success of server-side platforms,
|
|
|
|
it is feasible to build command-line tools for various workflows.
|
2022-07-31 23:45:34 +00:00
|
|
|
|
|
|
|
This demo covers a number of strategies for building standalone processors. The
|
|
|
|
goal is to generate CSV output from an arbitrary spreadsheet file.
|
|
|
|
|
|
|
|
## Deno
|
|
|
|
|
|
|
|
`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`.
|
|
|
|
|
|
|
|
<details><summary><b>Complete Example</b> (click to show)</summary>
|
|
|
|
|
|
|
|
1) Save the following script to `sheet2csv.ts`:
|
|
|
|
|
|
|
|
```ts title="sheet2csv.ts"
|
2022-10-20 18:47:20 +00:00
|
|
|
/*! sheetjs (C) 2013-present SheetJS -- https://sheetjs.com */
|
2022-07-31 23:45:34 +00:00
|
|
|
// @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';
|
|
|
|
import * as cptable from 'https://cdn.sheetjs.com/xlsx-latest/package/dist/cpexcel.full.mjs';
|
|
|
|
XLSX.set_cptable(cptable);
|
|
|
|
|
|
|
|
/* Read and parse workbook */
|
|
|
|
const filename = Deno.args[0];
|
|
|
|
if(!filename) {
|
2022-08-01 08:15:50 +00:00
|
|
|
console.error("usage: sheet2csv <filename> [sheetname]");
|
|
|
|
Deno.exit(1);
|
2022-07-31 23:45:34 +00:00
|
|
|
}
|
|
|
|
const workbook = XLSX.readFile(filename);
|
|
|
|
|
|
|
|
/* Find worksheet */
|
|
|
|
const sheetname = Deno.args[1] || workbook.SheetNames[0];
|
|
|
|
if(!workbook.Sheets[sheetname]) {
|
2022-08-01 08:15:50 +00:00
|
|
|
console.error(`error: workbook missing sheet ${sheetname}`);
|
|
|
|
Deno.exit(1);
|
2022-07-31 23:45:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Generate CSV and print to stdout */
|
|
|
|
console.log(XLSX.utils.sheet_to_csv(workbook.Sheets[sheetname]));
|
|
|
|
```
|
|
|
|
|
|
|
|
2) Build `sheet2csv` with `deno compile`:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
deno compile -r --allow-read sheet2csv.ts
|
|
|
|
```
|
|
|
|
|
|
|
|
`sheet2csv` is a generated executable that you can run.
|
|
|
|
|
2022-08-01 08:15:50 +00:00
|
|
|
</details>
|
|
|
|
|
|
|
|
## NodeJS
|
|
|
|
|
2022-08-25 08:22:28 +00:00
|
|
|
There are a few popular tools for compiling NodeJS scripts to CLI programs.
|
2022-08-01 08:15:50 +00:00
|
|
|
|
|
|
|
The demo script presents a friendly command line interface including flags:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
$ ./xlsx-cli -h
|
|
|
|
Usage: xlsx-cli [options] <file> [sheetname]
|
|
|
|
|
|
|
|
Options:
|
|
|
|
-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`](pathname:///cli/xlsx-cli.js)
|
|
|
|
|
|
|
|
2) Install the dependencies:
|
|
|
|
|
|
|
|
<Tabs>
|
|
|
|
<TabItem value="npm" label="npm">
|
|
|
|
<pre><code parentName="pre" {...{"className": "language-bash"}}>{`\
|
|
|
|
npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz exit-on-epipe commander@2`}
|
|
|
|
</code></pre>
|
|
|
|
</TabItem>
|
|
|
|
<TabItem value="pnpm" label="pnpm">
|
|
|
|
<pre><code parentName="pre" {...{"className": "language-bash"}}>{`\
|
|
|
|
pnpm install https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz exit-on-epipe commander@2`}
|
|
|
|
</code></pre>
|
|
|
|
</TabItem>
|
|
|
|
<TabItem value="yarn" label="Yarn" default>
|
|
|
|
<pre><code parentName="pre" {...{"className": "language-bash"}}>{`\
|
|
|
|
yarn add https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz exit-on-epipe commander@2`}
|
|
|
|
</code></pre>
|
|
|
|
</TabItem>
|
|
|
|
</Tabs>
|
|
|
|
|
|
|
|
3) Follow tooling steps:
|
|
|
|
|
|
|
|
<Tabs>
|
|
|
|
<TabItem value="nexe" label="Nexe">
|
|
|
|
|
|
|
|
3) Run `nexe` and manually specify NodeJS version 14.15.3
|
|
|
|
|
|
|
|
```bash
|
|
|
|
npx nexe -t 14.15.3 xlsx-cli.js
|
|
|
|
```
|
|
|
|
|
|
|
|
This generates `xlsx-cli` or `xlsx-cli.exe` depending on platform.
|
|
|
|
|
|
|
|
</TabItem>
|
|
|
|
<TabItem value="pkg" label="pkg">
|
|
|
|
|
|
|
|
3) Run `pkg`:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
npx pkg xlsx-cli.js
|
|
|
|
```
|
|
|
|
|
|
|
|
This generates `xlsx-cli-linux`, `xlsx-cli-macos`, and `xlsx-cli-win.exe` .
|
|
|
|
|
|
|
|
</TabItem>
|
|
|
|
</Tabs>
|