forked from sheetjs/docs.sheetjs.com
		
	xlsx-cli
This commit is contained in:
		
							parent
							
								
									0ee20fd040
								
							
						
					
					
						commit
						f57d38c58b
					
				| @ -1,5 +1,6 @@ | ||||
| --- | ||||
| title: Webpack | ||||
| title: Packing Sheets with Webpack | ||||
| sidebar_label: Webpack | ||||
| pagination_prev: demos/net/index | ||||
| pagination_next: demos/mobile/index | ||||
| sidebar_custom_props: | ||||
| @ -9,6 +10,19 @@ sidebar_custom_props: | ||||
| import current from '/version.js'; | ||||
| import CodeBlock from '@theme/CodeBlock'; | ||||
| 
 | ||||
| [Webpack](https://webpack.js.org/) is a modern build tool for generating static | ||||
| sites. It has a robust JavaScript-powered plugin system[^1] | ||||
| 
 | ||||
| [SheetJS](https://sheetjs.com) is a JavaScript library for reading and writing | ||||
| data from spreadsheets. | ||||
| 
 | ||||
| This demo uses Webpack and SheetJS to pull data from a spreadsheet and display | ||||
| the content in an HTML table. We'll explore how to load SheetJS in a Webpack 5 | ||||
| Asset Plugin and generate data for use in webpages. | ||||
| 
 | ||||
| The ["Webpack 5 Demo"](#webpack-5-demo) creates a complete website powered by a | ||||
| XLSX spreadsheet. | ||||
| 
 | ||||
| :::info pass | ||||
| 
 | ||||
| This demo covers static asset imports. For processing files in the browser, the | ||||
| @ -17,15 +31,15 @@ importing the SheetJS library in a browser script. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| The [NodeJS Module](/docs/getting-started/installation/nodejs) can be imported | ||||
| from Webpack loader scripts. | ||||
| 
 | ||||
| ## Webpack 5 Asset Module | ||||
| 
 | ||||
| Webpack 5 supports asset modules. With a special option, the loader will receive | ||||
| NodeJS Buffers that can be parsed. The dev server will even watch the files and | ||||
| reload the page in development mode! | ||||
| 
 | ||||
| The [SheetJS NodeJS module](/docs/getting-started/installation/nodejs) can be | ||||
| imported from Webpack loader scripts. | ||||
| 
 | ||||
| The following diagram depicts the workbook waltz: | ||||
| 
 | ||||
| ```mermaid | ||||
| @ -100,11 +114,12 @@ module.exports = { | ||||
| 
 | ||||
| The SheetJS loader script must export a `raw` property that is set to `true`. | ||||
| 
 | ||||
| The base export is expected to be the loader function. That function receives | ||||
| the file contents as a Buffer, which can be parsed with `XLSX.read`. Typically | ||||
| this script is CommonJS so the `require` form should be used. | ||||
| The base export is expected to be the loader function. The loader receives the | ||||
| file bytes as a Buffer, which can be parsed with the SheetJS `read` method[^2]. | ||||
| `read` returns a SheetJS workbook object[^3]. | ||||
| 
 | ||||
| The loader in this demo will parse the first worksheet: | ||||
| The loader in this demo will parse the workbook, pull the first worksheet, and | ||||
| generate an array of row objects using the `sheet_to_json` method[^4]: | ||||
| 
 | ||||
| ```js title="sheetjs-loader.js" | ||||
| const XLSX = require("xlsx"); | ||||
| @ -144,7 +159,7 @@ document.body.appendChild(elt); | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was last tested on 2023 May 24 against Webpack 5.84.0 | ||||
| This demo was last tested on 2023 October 10 against Webpack 5.88.2 | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| @ -156,7 +171,7 @@ This demo was last tested on 2023 May 24 against Webpack 5.84.0 | ||||
| mkdir sheetjs-wp5 | ||||
| cd sheetjs-wp5 | ||||
| npm init -y | ||||
| npm install webpack@5.84.0 webpack-cli@5.1.1 webpack-dev-server@4.15.0 --save | ||||
| npm install webpack@5.88.2 webpack-cli@5.1.4 webpack-dev-server@4.15.1 --save | ||||
| mkdir -p dist | ||||
| mkdir -p src | ||||
| mkdir -p data | ||||
| @ -303,3 +318,8 @@ the file and save.  The page will not automatically update. | ||||
| To verify that the data was added to the page, append `main.js` to the URL | ||||
| (`http://localhost:8080/main.js`) and view the source.  The source will include | ||||
| president names.  It will not include SheetJS library references! | ||||
| 
 | ||||
| [^1]: See ["Plugins"](https://webpack.js.org/concepts/plugins/) in the Webpack documentation. | ||||
| [^2]: See [`read` in "Reading Files"](/docs/api/parse-options) | ||||
| [^3]: See ["Workbook Object"](/docs/csf/book) | ||||
| [^4]: See [`sheet_to_json` in "Utilities"](/docs/api/utilities/array#array-output) | ||||
|  | ||||
| @ -17,6 +17,14 @@ 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. | ||||
| 
 | ||||
| :::tip pass | ||||
| 
 | ||||
| The [`xlsx-cli`](https://cdn.sheetjs.com/xlsx-cli/) NodeJS script is available | ||||
| as a package on the SheetJS CDN. It is an easy-to-use command-line tool for | ||||
| translating files between supported spreadsheet file formats. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| ## NodeJS | ||||
| 
 | ||||
| There are a few popular tools for compiling NodeJS scripts to CLI programs. | ||||
| @ -53,7 +61,7 @@ This demo was tested in the following deployments: | ||||
| 
 | ||||
| | Architecture | Version      | Node Target | Date       | | ||||
| |:-------------|:-------------|:------------|:-----------| | ||||
| | `darwin-x64` | `4.0.0-rc.2` | `14.15.3`   | 2023-05-08 | | ||||
| | `darwin-x64` | `4.0.0-rc.2` | `14.15.3`   | 2023-10-10 | | ||||
| | `darwin-arm` | `4.0.0-rc.2` | `20.7.0`    | 2023-09-25 | | ||||
| | `win10-x64`  | `4.0.0-rc.2` | `14.15.3`   | 2023-10-09 | | ||||
| | `win11-arm`  | `4.0.0-rc.2` | `18.17.1`   | 2023-09-25 | | ||||
|  | ||||
| @ -61,6 +61,7 @@ program | ||||
|   .option('-F, --field-sep <sep>', 'CSV field separator', ",") | ||||
|   .option('-R, --row-sep <sep>', 'CSV row separator', "\n") | ||||
|   .option('-n, --sheet-rows <num>', 'Number of rows to process (0=all rows)') | ||||
|   .option('--date-format <string>', 'output date format, for example yyyy-mm-dd') | ||||
|   .option('--codepage <cp>', 'default to specified codepage when ambiguous') | ||||
|   .option('--sst', 'generate shared string table for XLS* formats') | ||||
|   .option('--compress', 'use compression when writing XLSX/M/B and ODS') | ||||
| @ -154,6 +155,7 @@ if(program.all) { | ||||
| } | ||||
| if(program.sparse) opts.dense = false; else opts.dense = true; | ||||
| if(program.codepage) opts.codepage = +program.codepage; | ||||
| if(program.dateFormat) opts.dateNF = program.dateFormat; | ||||
| 
 | ||||
| if(program.dev) { | ||||
|   opts.WTF = true; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user