| 
									
										
										
										
											2022-07-31 23:45:34 +00:00
										 |  |  | --- | 
					
						
							|  |  |  | title: Command-Line Tools | 
					
						
							| 
									
										
										
										
											2023-02-28 11:40:44 +00:00
										 |  |  | pagination_prev: demos/mobile/index | 
					
						
							|  |  |  | pagination_next: demos/data/index | 
					
						
							|  |  |  | sidebar_custom_props: | 
					
						
							|  |  |  |   cli: true | 
					
						
							| 
									
										
										
										
											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'; | 
					
						
							| 
									
										
										
										
											2023-05-07 13:58:36 +00:00
										 |  |  | import CodeBlock from '@theme/CodeBlock'; | 
					
						
							| 
									
										
										
										
											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. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-01 08:15:50 +00:00
										 |  |  | ## 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) | 
					
						
							|  |  |  | ... | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-09 08:08:01 +00:00
										 |  |  | <details><summary><b>Tested Deployments</b> (click to show)</summary> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This demo was tested in the following deployments: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | **`pkg`** | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | | Architecture | Version | Node Target | Date       | | 
					
						
							|  |  |  | |:-------------|:--------|:------------|:-----------| | 
					
						
							|  |  |  | | `darwin-x64` | `5.8.1` | `18.5.0`    | 2023-05-08 | | 
					
						
							|  |  |  | | `win32-x64`  | `5.8.1` | `18.5.0`    | 2023-05-08 | | 
					
						
							|  |  |  | | `linux-x64`  | `5.8.1` | `18.5.0`    | 2023-05-08 | | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | **`nexe`** | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | | Architecture | Version      | Node Target | Date       | | 
					
						
							|  |  |  | |:-------------|:-------------|:------------|:-----------| | 
					
						
							|  |  |  | | `darwin-x64` | `4.0.0-rc.2` | `14.15.3`   | 2023-05-08 | | 
					
						
							|  |  |  | | `win32-x64`  | `4.0.0-rc.2` | `14.15.3`   | 2023-05-08 | | 
					
						
							|  |  |  | | `linux-x64`  | `4.0.0-rc.2` | `14.15.3`   | 2023-05-08 | | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | **`boxednode`** | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | | Architecture | Version | Node Target | Date       | | 
					
						
							|  |  |  | |:-------------|:--------|:------------|:-----------| | 
					
						
							|  |  |  | | `darwin-x64` | `2.0.1` | `20.1.0`    | 2023-05-08 | | 
					
						
							|  |  |  | | `linux-x64`  | `2.0.1` | `20.1.0`    | 2023-05-08 | | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | </details> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 0) Download the test file <https://sheetjs.com/pres.numbers>: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | curl -LO https://sheetjs.com/pres.numbers | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-01 08:15:50 +00:00
										 |  |  | 1) Download [`xlsx-cli.js`](pathname:///cli/xlsx-cli.js) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-09 08:08:01 +00:00
										 |  |  | ```bash | 
					
						
							|  |  |  | curl -LO https://docs.sheetjs.com/cli/xlsx-cli.js | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-01 08:15:50 +00:00
										 |  |  | 2) Install the dependencies: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-07 13:58:36 +00:00
										 |  |  | <Tabs groupId="pm"> | 
					
						
							| 
									
										
										
										
											2022-08-01 08:15:50 +00:00
										 |  |  |   <TabItem value="npm" label="npm"> | 
					
						
							| 
									
										
										
										
											2023-05-07 13:58:36 +00:00
										 |  |  | <CodeBlock language="bash">{`\ | 
					
						
							| 
									
										
										
										
											2022-08-01 08:15:50 +00:00
										 |  |  | npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz exit-on-epipe commander@2`} | 
					
						
							| 
									
										
										
										
											2023-05-07 13:58:36 +00:00
										 |  |  | </CodeBlock> | 
					
						
							| 
									
										
										
										
											2022-08-01 08:15:50 +00:00
										 |  |  |   </TabItem> | 
					
						
							|  |  |  |   <TabItem value="pnpm" label="pnpm"> | 
					
						
							| 
									
										
										
										
											2023-05-07 13:58:36 +00:00
										 |  |  | <CodeBlock language="bash">{`\ | 
					
						
							| 
									
										
										
										
											2022-08-01 08:15:50 +00:00
										 |  |  | pnpm install https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz exit-on-epipe commander@2`} | 
					
						
							| 
									
										
										
										
											2023-05-07 13:58:36 +00:00
										 |  |  | </CodeBlock> | 
					
						
							| 
									
										
										
										
											2022-08-01 08:15:50 +00:00
										 |  |  |   </TabItem> | 
					
						
							|  |  |  |   <TabItem value="yarn" label="Yarn" default> | 
					
						
							| 
									
										
										
										
											2023-05-07 13:58:36 +00:00
										 |  |  | <CodeBlock language="bash">{`\ | 
					
						
							| 
									
										
										
										
											2022-08-01 08:15:50 +00:00
										 |  |  | yarn add https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz exit-on-epipe commander@2`} | 
					
						
							| 
									
										
										
										
											2023-05-07 13:58:36 +00:00
										 |  |  | </CodeBlock> | 
					
						
							| 
									
										
										
										
											2022-08-01 08:15:50 +00:00
										 |  |  |   </TabItem> | 
					
						
							|  |  |  | </Tabs> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 3) Follow tooling steps: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <Tabs> | 
					
						
							|  |  |  |   <TabItem value="nexe" label="Nexe"> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-28 11:40:44 +00:00
										 |  |  | Run `nexe` and manually specify NodeJS version 14.15.3 | 
					
						
							| 
									
										
										
										
											2022-08-01 08:15:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```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"> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-28 11:40:44 +00:00
										 |  |  | Run `pkg`: | 
					
						
							| 
									
										
										
										
											2022-08-01 08:15:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | npx pkg xlsx-cli.js | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This generates `xlsx-cli-linux`, `xlsx-cli-macos`, and `xlsx-cli-win.exe` . | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-09 08:08:01 +00:00
										 |  |  |   </TabItem> | 
					
						
							|  |  |  |   <TabItem value="boxednode" label="boxednode"> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Run `boxednode`: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | npx boxednode@2.0.1 -s xlsx-cli.js -t xlsx-cli | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-01 08:15:50 +00:00
										 |  |  |   </TabItem> | 
					
						
							|  |  |  | </Tabs> | 
					
						
							| 
									
										
										
										
											2023-05-09 08:08:01 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 4) Run the generated program, passing `pres.numbers` as the argument.  For | 
					
						
							|  |  |  | example, on an Intel Mac, `nexe` generates `xlsx-cli` so the command is: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | ./xlsx-cli pres.numbers | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-25 01:36:15 +00:00
										 |  |  | ## V8
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The [V8](/docs/demos/engines/v8) demo covers standalone programs that embed the | 
					
						
							|  |  |  | V8 engine. This demo uses the Rust integration to generate a command line tool. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <details><summary><b>Tested Deployments</b> (click to show)</summary> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This demo was last tested in the following deployments: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | | Architecture | V8 Version   | Date       | | 
					
						
							|  |  |  | |:-------------|:-------------|:-----------| | 
					
						
							|  |  |  | | `darwin-x64` | `11.4.183.2` | 2023-05-22 | | 
					
						
							|  |  |  | | `linux-x64`  | `11.4.183.2` | 2023-05-23 | | 
					
						
							|  |  |  | | `win32-x64`  | `11.4.183.2` | 2023-05-23 | | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | </details> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 0) Make a new folder for the project: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | mkdir sheetjs2csv | 
					
						
							|  |  |  | cd sheetjs2csv | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 1) Download the following scripts: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - [`Cargo.toml`](pathname:///cli/Cargo.toml) | 
					
						
							|  |  |  | - [`snapshot.rs`](pathname:///cli/snapshot.rs) | 
					
						
							|  |  |  | - [`sheet2csv.rs`](pathname:///cli/sheet2csv.rs) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | curl -LO https://docs.sheetjs.com/cli/Cargo.toml | 
					
						
							|  |  |  | curl -LO https://docs.sheetjs.com/cli/snapshot.rs | 
					
						
							|  |  |  | curl -LO https://docs.sheetjs.com/cli/sheet2csv.rs | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 2) Download the [standalone build](/docs/getting-started/installation/standalone): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <CodeBlock language="bash">{`\ | 
					
						
							|  |  |  | curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`} | 
					
						
							|  |  |  | </CodeBlock> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 3) Build the V8 snapshot: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | cargo build --bin snapshot | 
					
						
							|  |  |  | cargo run --bin snapshot | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 4) Build `sheet2csv` (`sheet2csv.exe` in Windows): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | cargo build --release --bin sheet2csv | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 5) Download the test file <https://sheetjs.com/pres.numbers>: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | curl -LO https://sheetjs.com/pres.numbers | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 6) Test the application: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <Tabs groupId="os"> | 
					
						
							|  |  |  |   <TabItem value="unix" label="Linux/MacOS"> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | mv target/release/sheet2csv . | 
					
						
							|  |  |  | ./sheet2csv pres.numbers | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   </TabItem> | 
					
						
							|  |  |  |   <TabItem value="win" label="Windows"> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | mv target/release/sheet2csv.exe . | 
					
						
							|  |  |  | ./sheet2csv pres.numbers | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   </TabItem> | 
					
						
							|  |  |  | </Tabs> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-09 08:08:01 +00:00
										 |  |  | ## 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`. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <https://docs.sheetjs.com/cli/sheet2csv.ts> can be compiled and run from Deno. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <details><summary><b>Tested Deployments</b> (click to show)</summary> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This demo was last tested in the following deployments: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | | Architecture | Version  | Date       | | 
					
						
							|  |  |  | |:-------------|:---------|:-----------| | 
					
						
							|  |  |  | | `darwin-x64` | `1.33.2` | 2023-05-08 | | 
					
						
							|  |  |  | | `win32-x64`  | `1.33.2` | 2023-05-08 | | 
					
						
							|  |  |  | | `linux-x64`  | `1.33.2` | 2023-05-08 | | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | </details> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 0) Download the test file <https://sheetjs.com/pres.numbers>: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | curl -LO https://sheetjs.com/pres.numbers | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 1) Test the script with `deno run`: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | deno run -r --allow-read https://docs.sheetjs.com/cli/sheet2csv.ts pres.numbers | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If this worked, the program will print a CSV of the first worksheet. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 2) Compile and run `sheet2csv`: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | deno compile -r --allow-read https://docs.sheetjs.com/cli/sheet2csv.ts | 
					
						
							|  |  |  | ./sheet2csv pres.numbers | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Dedicated Engines
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The following demos for JS engines produce standalone programs: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - [Duktape](/docs/demos/engines/duktape) | 
					
						
							| 
									
										
										
										
											2023-05-23 06:28:14 +00:00
										 |  |  | - [ChakraCore](/docs/demos/engines/chakra) | 
					
						
							|  |  |  | - [QuickJS](/docs/demos/engines/quickjs) | 
					
						
							| 
									
										
										
										
											2023-05-09 08:08:01 +00:00
										 |  |  | - [Goja](/docs/demos/engines/goja) | 
					
						
							|  |  |  | - [JavaScriptCore](/docs/demos/engines/jsc) |