forked from sheetjs/docs.sheetjs.com
cli
This commit is contained in:
parent
60dca67f00
commit
b71c65775b
60
docz/docs/04-getting-started/03-demos/13-cli.md
Normal file
60
docz/docs/04-getting-started/03-demos/13-cli.md
Normal file
@ -0,0 +1,60 @@
|
||||
---
|
||||
sidebar_position: 13
|
||||
title: Command-Line Tools
|
||||
---
|
||||
|
||||
import current from '/version.js';
|
||||
|
||||
With the availability of JS engines and the success of server-side runtimes, it
|
||||
is natural to want 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
|
||||
|
||||
`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"
|
||||
/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */
|
||||
// @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) {
|
||||
console.error("usage: sheet2csv <filename> [sheetname]");
|
||||
Deno.exit(1);
|
||||
}
|
||||
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}`);
|
||||
Deno.exit(1);
|
||||
}
|
||||
|
||||
/* 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.
|
||||
|
||||
</details>
|
@ -34,8 +34,8 @@ The demo projects include small runnable examples and short explainers.
|
||||
|
||||
### Platforms and Integrations
|
||||
|
||||
- [`Command-Line Tools`](./cli)
|
||||
- [`NodeJS Server-Side Processing`](https://github.com/SheetJS/SheetJS/tree/master/demos/server/)
|
||||
- [`Deno`](https://github.com/SheetJS/SheetJS/tree/master/demos/deno/)
|
||||
- [`Electron`](https://github.com/SheetJS/SheetJS/tree/master/demos/electron/)
|
||||
- [`NW.js`](https://github.com/SheetJS/SheetJS/tree/master/demos/nwjs/)
|
||||
- [`Chrome / Chromium Extension`](https://github.com/SheetJS/SheetJS/tree/master/demos/chrome/)
|
||||
|
@ -173,9 +173,11 @@ import * as XLSX from 'https://cdn.sheetjs.com/xlsx-${current}/package/xlsx.mjs'
|
||||
|
||||
const workbook = XLSX.readFile("test.xlsx");`}</code></pre>
|
||||
|
||||
:::note
|
||||
|
||||
Applications reading files must be invoked with the `--allow-read` flag. The
|
||||
[`deno` demo](https://github.com/SheetJS/SheetJS/tree/master/demos/deno/) has more examples
|
||||
Applications reading files must be invoked with the `--allow-read` flag.
|
||||
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="bun" label="Bun">
|
||||
|
@ -217,8 +217,11 @@ import * as XLSX from 'https://cdn.sheetjs.com/xlsx-${current}/package/xlsx.mjs'
|
||||
|
||||
XLSX.writeFile(workbook, "test.xlsx");`}</code></pre>
|
||||
|
||||
Applications writing files must be invoked with the `--allow-write` flag. The
|
||||
[`deno` demo](https://github.com/SheetJS/SheetJS/tree/master/demos/deno/) has more examples
|
||||
:::note
|
||||
|
||||
Applications writing files must be invoked with the `--allow-write` flag.
|
||||
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="electron" label="Electron">
|
||||
@ -832,31 +835,76 @@ Readable Stream.
|
||||
- `XLSX.stream.to_html` is the streaming version of `XLSX.utils.sheet_to_html`.
|
||||
- `XLSX.stream.to_json` is the streaming version of `XLSX.utils.sheet_to_json`.
|
||||
|
||||
<details>
|
||||
<summary><b>nodejs convert to CSV and write file</b> (click to show)</summary>
|
||||
<Tabs>
|
||||
<TabItem value="nodejs" label="NodeJS">
|
||||
|
||||
In a CommonJS context, NodeJS Streams immediately work with SheetJS. This
|
||||
example reads a worksheet passed as an argument to the script, pulls the first
|
||||
worksheet, converts to CSV and writes to `out.csv`:
|
||||
|
||||
```js
|
||||
var output_file_name = "out.csv";
|
||||
var stream = XLSX.stream.to_csv(worksheet);
|
||||
const XLSX = require("xlsx");
|
||||
|
||||
const workbook = XLSX.readFile(process.argv[2]);
|
||||
const worksheet = workbook.Sheets[workbook.SheetNames[0]];
|
||||
// highlight-next-line
|
||||
const stream = XLSX.stream.to_csv(worksheet);
|
||||
|
||||
const output_file_name = "out.csv";
|
||||
// highlight-next-line
|
||||
stream.pipe(fs.createWriteStream(output_file_name));
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>nodejs write JSON stream to screen</b> (click to show)</summary>
|
||||
`stream.to_json` uses Object-mode streams. A `Transform` stream can be used to
|
||||
generate a normal stream for streaming to a file or the screen:
|
||||
|
||||
```js
|
||||
/* to_json returns an object-mode stream */
|
||||
// highlight-next-line
|
||||
var stream = XLSX.stream.to_json(worksheet, {raw:true});
|
||||
|
||||
/* the following stream converts JS objects to text via JSON.stringify */
|
||||
/* this Transform stream converts JS objects to text and prints to screen */
|
||||
var conv = new Transform({writableObjectMode:true});
|
||||
conv._transform = function(obj, e, cb){ cb(null, JSON.stringify(obj) + "\n"); };
|
||||
conv.pipe(process.stdout);
|
||||
|
||||
stream.pipe(conv); conv.pipe(process.stdout);
|
||||
// highlight-next-line
|
||||
stream.pipe(conv);
|
||||
```
|
||||
|
||||
</details>
|
||||
</TabItem>
|
||||
<TabItem value="deno" label="Deno">
|
||||
|
||||
Deno does not support NodeJS streams in normal execution, so a wrapper is used.
|
||||
This demo converts a worksheet to CSV and prints each row to the screen:
|
||||
|
||||
```ts
|
||||
// @deno-types="https://cdn.sheetjs.com/xlsx-latest/package/types/index.d.ts"
|
||||
import {utils, stream, set_cptable} from 'https://cdn.sheetjs.com/xlsx-latest/package/xlsx.mjs';
|
||||
|
||||
/* `Readable` will be compatible with how SheetJS uses `stream.Readable` */
|
||||
function NodeReadableCB(cb:(d:any)=>void) {
|
||||
var rd = {
|
||||
__done: false,
|
||||
_read: function() {},
|
||||
push: function(d: any) { if(!this.__done) cb(d); if(d == null) this.__done = true; },
|
||||
resume: function pump() {for(var i = 0; i < 10000 && !this.__done; ++i) rd._read(); if(!rd.__done) setTimeout(pump, 0); }
|
||||
};
|
||||
return rd;
|
||||
}
|
||||
function NodeReadable(rd: any) { return function() { return rd; }; }
|
||||
/* The callback gets each CSV row. It will be `null` when the stream is drained */
|
||||
const rt = NodeReadableCB((d: any) => { if(d != null) console.log(d); });
|
||||
const Readable = NodeReadable(rt);
|
||||
stream.set_readable(Readable);
|
||||
|
||||
/* wire up and start the stream */
|
||||
const rd = stream.to_csv(worksheet);
|
||||
rd.resume();
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
|
||||
<https://github.com/sheetjs/sheetaki> pipes write streams to nodejs response.
|
||||
|
Loading…
Reference in New Issue
Block a user