forked from sheetjs/docs.sheetjs.com
		
	
		
			
	
	
		
			187 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			187 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								title: Spreadsheet Tools with Nexe
							 | 
						||
| 
								 | 
							
								sidebar_label: nexe
							 | 
						||
| 
								 | 
							
								pagination_prev: demos/desktop/index
							 | 
						||
| 
								 | 
							
								pagination_next: demos/data/index
							 | 
						||
| 
								 | 
							
								sidebar_custom_props:
							 | 
						||
| 
								 | 
							
								  summary: Prebuilt NodeJS packages
							 | 
						||
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import current from '/version.js';
							 | 
						||
| 
								 | 
							
								import Tabs from '@theme/Tabs';
							 | 
						||
| 
								 | 
							
								import TabItem from '@theme/TabItem';
							 | 
						||
| 
								 | 
							
								import CodeBlock from '@theme/CodeBlock';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export const r = {style: {color:"red"}};
							 | 
						||
| 
								 | 
							
								export const B = {style: {fontWeight:"bold"}};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								`nexe`[^1] is a tool for generating command-line tools that embed scripts.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[SheetJS](https://sheetjs.com) is a JavaScript library for reading and writing
							 | 
						||
| 
								 | 
							
								data from spreadsheets.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This demo uses `nexe` and SheetJS to create a standalone CLI tool for parsing
							 | 
						||
| 
								 | 
							
								spreadsheets and converting to other formats.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:::info pass
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The latest prebuilt package matches NodeJS version `14.15.3`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								`nexe` can build the required packages for newer NodeJS versions.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:::
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:::note Tested Deployments
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This demo was tested in the following deployments:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								| Architecture | Version      | NodeJS    | Source    | Date       |
							 | 
						||
| 
								 | 
							
								|:-------------|:-------------|:----------|:----------|:-----------|
							 | 
						||
| 
								 | 
							
								| `darwin-x64` | `4.0.0-rc.6` | `14.15.3` | Pre-built | 2024-05-28 |
							 | 
						||
| 
								 | 
							
								| `darwin-arm` | `4.0.0-rc.6` | `18.20.3` | Compiled  | 2024-05-25 |
							 | 
						||
| 
								 | 
							
								| `win10-x64`  | `4.0.0-rc.4` | `14.15.3` | Pre-built | 2024-04-18 |
							 | 
						||
| 
								 | 
							
								| `win11-arm`  | `4.0.0-rc.6` | `20.10.0` | Compiled  | 2024-05-28 |
							 | 
						||
| 
								 | 
							
								| `linux-x64`  | `4.0.0-rc.4` | `14.15.3` | Pre-built | 2024-03-21 |
							 | 
						||
| 
								 | 
							
								| `linux-arm`  | `4.0.0-rc.6` | `18.20.3` | Compiled  | 2024-05-26 |
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:::
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Integration Details
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The [SheetJS NodeJS module](/docs/getting-started/installation/nodejs) can be
							 | 
						||
| 
								 | 
							
								required from scripts. `nexe` will automatically handle packaging.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Script Requirements
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Scripts that exclusively use SheetJS libraries and NodeJS built-in modules can
							 | 
						||
| 
								 | 
							
								be bundled using `nexe`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The demo script [`xlsx-cli.js`](pathname:///cli/xlsx-cli.js) runs in NodeJS. It
							 | 
						||
| 
								 | 
							
								is a simple command-line tool for reading and writing spreadsheets.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Complete Example
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								0) Download the test file https://docs.sheetjs.com/pres.numbers:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```bash
							 | 
						||
| 
								 | 
							
								curl -o pres.numbers https://docs.sheetjs.com/pres.numbers
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								1) Download [`xlsx-cli.js`](pathname:///cli/xlsx-cli.js)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```bash
							 | 
						||
| 
								 | 
							
								curl -o xlsx-cli.js https://docs.sheetjs.com/cli/xlsx-cli.js
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								2) Install the dependencies:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<Tabs groupId="pm">
							 | 
						||
| 
								 | 
							
								  <TabItem value="npm" label="npm">
							 | 
						||
| 
								 | 
							
								<CodeBlock language="bash">{`\
							 | 
						||
| 
								 | 
							
								npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz exit-on-epipe commander@2`}
							 | 
						||
| 
								 | 
							
								</CodeBlock>
							 | 
						||
| 
								 | 
							
								  </TabItem>
							 | 
						||
| 
								 | 
							
								  <TabItem value="pnpm" label="pnpm">
							 | 
						||
| 
								 | 
							
								<CodeBlock language="bash">{`\
							 | 
						||
| 
								 | 
							
								pnpm install --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz exit-on-epipe commander@2`}
							 | 
						||
| 
								 | 
							
								</CodeBlock>
							 | 
						||
| 
								 | 
							
								  </TabItem>
							 | 
						||
| 
								 | 
							
								  <TabItem value="yarn" label="Yarn" default>
							 | 
						||
| 
								 | 
							
								<CodeBlock language="bash">{`\
							 | 
						||
| 
								 | 
							
								yarn add https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz exit-on-epipe commander@2`}
							 | 
						||
| 
								 | 
							
								</CodeBlock>
							 | 
						||
| 
								 | 
							
								  </TabItem>
							 | 
						||
| 
								 | 
							
								</Tabs>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								3) Create the standalone program:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```bash
							 | 
						||
| 
								 | 
							
								npx nexe -t 14.15.3 xlsx-cli.js
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<details open>
							 | 
						||
| 
								 | 
							
								  <summary><b>Building from source (click to hide)</b></summary>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								When the demo was tested on ARM targets, the Nexe pre-built packages were
							 | 
						||
| 
								 | 
							
								missing. For unsupported NodeJS versions, packages must be built from source:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<Tabs groupId="os">
							 | 
						||
| 
								 | 
							
								  <TabItem value="unix" label="Linux/MacOS">
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```bash
							 | 
						||
| 
								 | 
							
								npx nexe xlsx-cli.js --build --python=$(which python3) --make="-j8"
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  </TabItem>
							 | 
						||
| 
								 | 
							
								  <TabItem value="win" label="Windows">
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								On Windows x64, the `--build` flag suffices:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```bash
							 | 
						||
| 
								 | 
							
								npx nexe xlsx-cli.js --build --make="-j8"
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								On Windows ARM, the target `windows-arm64-20.10.0` must be specified:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```bash
							 | 
						||
| 
								 | 
							
								npx nexe xlsx-cli.js --build --make="-j8" --target=windows-arm64-20.10.0
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								**`vcbuild.bat` issues**
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The Windows ARM build may fail with a `vcbuild.bat` error:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								Error: vcbuild.bat nosign release arm64 exited with code: 1
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Pass the `-v` flag for more details. In the most recent test, the error stemmed
							 | 
						||
| 
								 | 
							
								from a Python version mismatch:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								Node.js configure: found Python 2.7.18
							 | 
						||
| 
								 | 
							
								Please use python3.11 or python3.10 or python3.9 or python3.8 or python3.7 or python3.6
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The resolved version of Python can be found with
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cmd
							 | 
						||
| 
								 | 
							
								where python
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								In the most recent test, a Python 2 version appeared first. This was fixed by
							 | 
						||
| 
								 | 
							
								finding the Python 3 location and prepending it to `PATH`:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```cmd
							 | 
						||
| 
								 | 
							
								set PATH="C:\correct\path\to\python\three";%PATH%
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  </TabItem>
							 | 
						||
| 
								 | 
							
								</Tabs>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</details>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This generates `xlsx-cli` or `xlsx-cli.exe` depending on platform.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								5) Run the generated program, passing `pres.numbers` as the argument:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<Tabs groupId="os">
							 | 
						||
| 
								 | 
							
								  <TabItem value="unix" label="Linux/MacOS">
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```bash
							 | 
						||
| 
								 | 
							
								./xlsx-cli pres.numbers
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  </TabItem>
							 | 
						||
| 
								 | 
							
								  <TabItem value="win" label="Windows">
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```powershell
							 | 
						||
| 
								 | 
							
								.\xlsx-cli.exe pres.numbers
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  </TabItem>
							 | 
						||
| 
								 | 
							
								</Tabs>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[^1]: The project does not have a website. The [source repository](https://github.com/nexe/nexe) is publicly available.
							 | 
						||
| 
								 | 
							
								[^2]: The NodeJS website hosts [prebuilt installers](https://nodejs.org/en/download/prebuilt-installer).
							 |