forked from sheetjs/docs.sheetjs.com
		
	wsl
This commit is contained in:
		
							parent
							
								
									9865fa0037
								
							
						
					
					
						commit
						35a04a6dcf
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1 +1,3 @@ | ||||
| *.bak | ||||
| package-lock.json | ||||
| pnpm-lock.yaml | ||||
|  | ||||
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @ -1,6 +1,6 @@ | ||||
| .PHONY: build | ||||
| build: | ||||
| 	cd docz; pnpm build; cd .. | ||||
| 	cd docz; npx -y pnpm build; cd .. | ||||
| 	rm -rf docs | ||||
| 	mv docz/build/ docs | ||||
| 	cp CNAME docs | ||||
|  | ||||
| @ -262,61 +262,6 @@ stream.pipe(conv); conv.pipe(process.stdout); | ||||
| 
 | ||||
| </details> | ||||
| 
 | ||||
| <details> | ||||
|   <summary><b>Exporting NUMBERS files</b> (click to show)</summary> | ||||
| 
 | ||||
| The NUMBERS writer requires a fairly large base.  The supplementary `xlsx.zahl` | ||||
| scripts provide support.  `xlsx.zahl.js` is designed for standalone and NodeJS | ||||
| use, while `xlsx.zahl.mjs` is suitable for ESM. | ||||
| 
 | ||||
| _Browser_ | ||||
| 
 | ||||
| ```html | ||||
| <meta charset="utf8"> | ||||
| <script src="xlsx.full.min.js"></script> | ||||
| <script src="xlsx.zahl.js"></script> | ||||
| <script> | ||||
| var wb = XLSX.utils.book_new(); var ws = XLSX.utils.aoa_to_sheet([ | ||||
|   ["SheetJS", "<3","விரிதாள்"], | ||||
|   [72,,"Arbeitsblätter"], | ||||
|   [,62,"数据"], | ||||
|   [true,false,], | ||||
| ]); XLSX.utils.book_append_sheet(wb, ws, "Sheet1"); | ||||
| XLSX.writeFile(wb, "textport.numbers", {numbers: XLSX_ZAHL, compression: true}); | ||||
| </script> | ||||
| ``` | ||||
| 
 | ||||
| _Node_ | ||||
| 
 | ||||
| ```js | ||||
| var XLSX = require("./xlsx.flow"); | ||||
| var XLSX_ZAHL = require("./dist/xlsx.zahl"); | ||||
| var wb = XLSX.utils.book_new(); var ws = XLSX.utils.aoa_to_sheet([ | ||||
|   ["SheetJS", "<3","விரிதாள்"], | ||||
|   [72,,"Arbeitsblätter"], | ||||
|   [,62,"数据"], | ||||
|   [true,false,], | ||||
| ]); XLSX.utils.book_append_sheet(wb, ws, "Sheet1"); | ||||
| XLSX.writeFile(wb, "textport.numbers", {numbers: XLSX_ZAHL, compression: true}); | ||||
| ``` | ||||
| 
 | ||||
| _Deno_ | ||||
| 
 | ||||
| ```ts | ||||
| import * as XLSX from './xlsx.mjs'; | ||||
| import XLSX_ZAHL from './dist/xlsx.zahl.mjs'; | ||||
| 
 | ||||
| var wb = XLSX.utils.book_new(); var ws = XLSX.utils.aoa_to_sheet([ | ||||
|   ["SheetJS", "<3","விரிதாள்"], | ||||
|   [72,,"Arbeitsblätter"], | ||||
|   [,62,"数据"], | ||||
|   [true,false,], | ||||
| ]); XLSX.utils.book_append_sheet(wb, ws, "Sheet1"); | ||||
| XLSX.writeFile(wb, "textports.numbers", {numbers: XLSX_ZAHL, compression: true}); | ||||
| ``` | ||||
| 
 | ||||
| </details> | ||||
| 
 | ||||
| <https://github.com/sheetjs/sheetaki> pipes write streams to nodejs response. | ||||
| 
 | ||||
| ### Generating JSON and JS Data | ||||
|  | ||||
| @ -4,8 +4,13 @@ hide_table_of_contents: true | ||||
| title: Writing Files | ||||
| --- | ||||
| 
 | ||||
| import current from '/version.js'; | ||||
| 
 | ||||
| # Writing Options | ||||
| 
 | ||||
| import Tabs from '@theme/Tabs'; | ||||
| import TabItem from '@theme/TabItem'; | ||||
| 
 | ||||
| `XLSX.write(wb, write_opts)` attempts to write the workbook `wb` | ||||
| 
 | ||||
| `XLSX.writeFile(wb, filename, write_opts)` attempts to write `wb` to `filename`. | ||||
| @ -43,8 +48,88 @@ The write functions accept an options argument: | ||||
| - Due to a bug in the program, some features like "Text to Columns" will crash | ||||
|   Excel on worksheets where error conditions are ignored.  The writer will mark | ||||
|   files to ignore the error by default.  Set `ignoreEC` to `false` to suppress. | ||||
| - Due to the size of the data, the NUMBERS data is not included by default. The | ||||
|   included `xlsx.zahl.js` and `xlsx.zahl.mjs` scripts include the data. | ||||
| 
 | ||||
| <details open> | ||||
|   <summary><b>Exporting NUMBERS files</b> (click to show)</summary> | ||||
| 
 | ||||
| The NUMBERS writer requires a fairly large base.  The supplementary `xlsx.zahl` | ||||
| scripts provide support.  `xlsx.zahl.js` is designed for standalone and NodeJS | ||||
| use, while `xlsx.zahl.mjs` is suitable for ESM. | ||||
| 
 | ||||
| Adding NUMBERS export support involves two steps: | ||||
| 
 | ||||
| 1) Load the `xlsx.zahl` script | ||||
| 
 | ||||
| 2) Pass the payload into the `numbers` option to `write` or `writeFile`. | ||||
| 
 | ||||
| <Tabs> | ||||
|   <TabItem value="browser" label="Browser"> | ||||
| 
 | ||||
| <div><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.zahl.js`}>https://cdn.sheetjs.com/xlsx-{current}/package/dist/xlsx.zahl.js</a> is the URL for {current}</div> | ||||
| 
 | ||||
| <pre><code parentName="pre" {...{"className": "language-html"}}>{`\ | ||||
| <meta charset="utf8">\n\ | ||||
| <body>\n\ | ||||
| <script src="https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js"></script>\n\ | ||||
| <script src="https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.zahl.js"></script>\n\ | ||||
| <script>\n\ | ||||
| var wb = XLSX.utils.book_new(); var ws = XLSX.utils.aoa_to_sheet([\n\ | ||||
|   ["SheetJS", "<3","விரிதாள்"],\n\ | ||||
|   [72,,"Arbeitsblätter"],\n\ | ||||
|   [,62,"数据"],\n\ | ||||
|   [true,false,],\n\ | ||||
| ]); XLSX.utils.book_append_sheet(wb, ws, "Sheet1");\n\ | ||||
| XLSX.writeFile(wb, "textport.numbers", {numbers: XLSX_ZAHL_PAYLOAD, compression: true});\n\ | ||||
| </script>\n\ | ||||
| </body>`}</code></pre> | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="nodejs" label="NodeJS"> | ||||
| 
 | ||||
| After installing the package: | ||||
| 
 | ||||
| <pre><code parentName="pre" {...{"className": "language-bash"}}>{`\ | ||||
| $ npm install --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} | ||||
| </code></pre> | ||||
| 
 | ||||
| The scripts will be available at `xlsx/dist/xlsx.zahl` (CommonJS) and | ||||
| `xlsx/dist/xlsx.zahl.mjs` (ESM). | ||||
| 
 | ||||
| ```js | ||||
| var XLSX = require("xlsx"); | ||||
| var XLSX_ZAHL_PAYLOAD = require("xlsx/dist/xlsx.zahl"); | ||||
| var wb = XLSX.utils.book_new(); var ws = XLSX.utils.aoa_to_sheet([ | ||||
|   ["SheetJS", "<3","விரிதாள்"], | ||||
|   [72,,"Arbeitsblätter"], | ||||
|   [,62,"数据"], | ||||
|   [true,false,], | ||||
| ]); XLSX.utils.book_append_sheet(wb, ws, "Sheet1"); | ||||
| XLSX.writeFile(wb, "textport.numbers", {numbers: XLSX_ZAHL_PAYLOAD, compression: true}); | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="deno" label="Deno"> | ||||
| 
 | ||||
| <div><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.zahl.mjs`}>https://cdn.sheetjs.com/xlsx-{current}/package/dist/xlsx.zahl.mjs</a> is the URL for {current}</div> | ||||
| 
 | ||||
| <pre><code parentName="pre" {...{"className": "language-ts"}}>{`\ | ||||
| import * as XLSX from 'https://cdn.sheetjs.com/xlsx-${current}/package/xlsx.mjs';\n\ | ||||
| import XLSX_ZAHL_PAYLOAD from 'https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.zahl.mjs';\n\ | ||||
| 
 | ||||
| var wb = XLSX.utils.book_new(); var ws = XLSX.utils.aoa_to_sheet([\n\ | ||||
|   ["SheetJS", "<3","விரிதாள்"],\n\ | ||||
|   [72,,"Arbeitsblätter"],\n\ | ||||
|   [,62,"数据"],\n\ | ||||
|   [true,false,],\n\ | ||||
| ]); XLSX.utils.book_append_sheet(wb, ws, "Sheet1");\n\ | ||||
| XLSX.writeFile(wb, "textport.numbers", {numbers: XLSX_ZAHL_PAYLOAD, compression: true});\n\ | ||||
| `}</code></pre> | ||||
| 
 | ||||
|   </TabItem> | ||||
| </Tabs> | ||||
| 
 | ||||
| 
 | ||||
| </details> | ||||
| 
 | ||||
| ## Supported Output Formats | ||||
| 
 | ||||
|  | ||||
| @ -1,6 +1,5 @@ | ||||
| --- | ||||
| sidebar_position: 7 | ||||
| hide_table_of_contents: true | ||||
| --- | ||||
| 
 | ||||
| # Contributing | ||||
| @ -32,81 +31,135 @@ Folders: | ||||
| 
 | ||||
| After cloning the repo, running `make help` will display a list of commands. | ||||
| 
 | ||||
| ## Platform-Specific Details | ||||
| ## Platform-Specific Setup | ||||
| 
 | ||||
| import Tabs from '@theme/Tabs'; | ||||
| import TabItem from '@theme/TabItem'; | ||||
| 
 | ||||
| <Tabs> | ||||
|   <TabItem value="osx" label="OSX/Linux"> | ||||
|   <TabItem value="wsl" label="Windows WSL"> | ||||
| 
 | ||||
| The `xlsx.js` file is constructed from the files in the `bits` subdirectory. The | ||||
| build script (run `make`) will concatenate the individual bits to produce the | ||||
| script.  Before submitting a contribution, ensure that running make will produce | ||||
| the `xlsx.js` file exactly.  The simplest way to test is to add the script: | ||||
| The OSX/Linux workflow works in WSL.  Initial setup is involved: | ||||
| 
 | ||||
| ```bash | ||||
| $ git add xlsx.js | ||||
| $ make clean | ||||
| $ make | ||||
| $ git diff xlsx.js | ||||
| ``` | ||||
| 
 | ||||
| To produce the dist files, run `make dist`.  The dist files are updated in each | ||||
| version release and *should not be committed between versions*. | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="win" label="Windows"> | ||||
| 
 | ||||
| The included `make.cmd` script will build `xlsx.js` from the `bits` directory. | ||||
| Building is as simple as: | ||||
| 
 | ||||
| ```cmd | ||||
| > make | ||||
| ``` | ||||
| 
 | ||||
| To prepare development environment: | ||||
| 
 | ||||
| ```cmd | ||||
| > make init | ||||
| ``` | ||||
| 
 | ||||
| The full list of commands available in Windows are displayed in `make help`: | ||||
| 
 | ||||
| ``` | ||||
| make init -- install deps and global modules | ||||
| make lint -- run eslint linter | ||||
| make test -- run mocha test suite | ||||
| make misc -- run smaller test suite | ||||
| make book -- rebuild README and summary | ||||
| make help -- display this message | ||||
| ``` | ||||
| 
 | ||||
| As explained in [Test Files](./testing#test-files), on Windows the release ZIP file must | ||||
| be downloaded and extracted.  If Bash on Windows is available, it is possible | ||||
| to run the OSX/Linux workflow.  The following steps prepares the environment: | ||||
| 1) Install mercurial and subversion. | ||||
| 
 | ||||
| ```bash | ||||
| # Install support programs for the build and test commands | ||||
| sudo apt-get install make git subversion mercurial | ||||
| sudo add-apt-repository ppa:mercurial-ppa/releases | ||||
| sudo apt-get update | ||||
| sudo apt-get install mercurial subversion | ||||
| sudo add-apt-repository --remove ppa:mercurial-ppa/releases | ||||
| ``` | ||||
| 
 | ||||
| # Install nodejs and NPM within the WSL | ||||
| wget -qO- https://deb.nodesource.com/setup_8.x | sudo bash | ||||
| sudo apt-get install nodejs | ||||
| 2) Install NodeJS | ||||
| 
 | ||||
| ```bash | ||||
| # Install bootstrap NodeJS and NPM within the WSL | ||||
| curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash - | ||||
| sudo apt-get install -y nodejs | ||||
| 
 | ||||
| # CLOSE AND REOPEN SHELL BEFORE CONTINUING | ||||
| 
 | ||||
| # Switch to `n`-managed NodeJS | ||||
| sudo npm i -g n | ||||
| sudo n 16 | ||||
| ``` | ||||
| 
 | ||||
| 3) follow <https://github.com/paul-nelson-baker/git-openssl-shellscript> to | ||||
| build and install a version of Git with OpenSSL: | ||||
| 
 | ||||
| ```bash | ||||
| # Git does not support OpenSSL out of the box, must do this | ||||
| curl -LO https://github.com/paul-nelson-baker/git-openssl-shellscript/raw/main/compile-git-with-openssl.sh | ||||
| chmod +x compile-git-with-openssl.sh | ||||
| ./compile-git-with-openssl.sh | ||||
| ``` | ||||
| 
 | ||||
| 4) (For deno testing) Install deno: | ||||
| 
 | ||||
| ```bash | ||||
| curl -fsSL https://deno.land/install.sh | sh | ||||
| ``` | ||||
| 
 | ||||
| (instructions continued in the OSX/Linux part) | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="osx" label="OSX/Linux"> | ||||
| 
 | ||||
| Initial setup: | ||||
| 
 | ||||
| 0) Ensure mercurial, subversion, and NodeJS are installed. The WSL instructions | ||||
| will have installed these dependencies, so WSL users can skip to step 1. | ||||
| 
 | ||||
| On Linux: | ||||
| 
 | ||||
| ```bash | ||||
| sudo apt-get install mercurial subversion | ||||
| ``` | ||||
| 
 | ||||
| On MacOS, install using [Homebrew](https://brew.sh/): | ||||
| 
 | ||||
| ```bash | ||||
| brew install mercurial subversion | ||||
| ``` | ||||
| 
 | ||||
| NodeJS installers can be found at <https://nodejs.org/en/download/> | ||||
| 
 | ||||
| 1) Install NodeJS modules for building the scripts | ||||
| 
 | ||||
| ```bash | ||||
| # Install dev dependencies | ||||
| sudo npm install -g mocha voc blanket xlsjs | ||||
| npm install | ||||
| 
 | ||||
| # Install global dependencies | ||||
| sudo npm install -g mocha@2.5.3 voc @sheetjs/uglify-js | ||||
| ``` | ||||
| 
 | ||||
| 2) Initialize the test files: | ||||
| 
 | ||||
| ```bash | ||||
| make init | ||||
| ``` | ||||
| 
 | ||||
| This step may take a while as it will be downloading a number of test files. | ||||
| 
 | ||||
| 3) Run a short test, then run a build | ||||
| 
 | ||||
| ```bash | ||||
| # Short test | ||||
| make test_misc | ||||
| 
 | ||||
| # Full Build | ||||
| cd modules; make; cd .. | ||||
| make dist | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
| </Tabs> | ||||
| 
 | ||||
| ### Tests | ||||
| 
 | ||||
| The `test_misc` target (`make test_misc` on Linux/OSX / `make misc` on Windows) | ||||
| runs the targeted feature tests.  It should take 5-10 seconds to perform feature | ||||
| tests without testing against the entire test battery.  New features should be | ||||
| accompanied with tests for the relevant file formats and features. | ||||
| ## Development | ||||
| 
 | ||||
| The `xlsx.js` and `xlsx.mjs` files are constructed from the files in the `bits` | ||||
| subdirectory. The build script (run `make`) will concatenate the individual | ||||
| bits to produce the scripts. | ||||
| 
 | ||||
| To produce the dist files, run `make dist`.  The dist files are updated in each | ||||
| version release and *should not be committed between versions*. | ||||
| 
 | ||||
| **A note on Older Versions** | ||||
| 
 | ||||
| Some of the dependencies are wildly out of date.  While SheetJS aims to run in | ||||
| older versions of NodeJS and browsers, some libraries have chosen to break | ||||
| backwards compatibility.  The specific versions are used because they are known | ||||
| to work and known to produce consistent results. | ||||
| 
 | ||||
| 
 | ||||
| ## Tests | ||||
| 
 | ||||
| The `test_misc` target runs the targeted feature tests.  It should take 5-10 | ||||
| seconds to perform feature tests without testing against the full test battery. | ||||
| New features should be accompanied with tests for the relevant file formats. | ||||
| 
 | ||||
| For tests involving the read side, an appropriate feature test would involve | ||||
| reading an existing file and checking the resulting workbook object.  If a | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user