forked from sheetjs/docs.sheetjs.com
		
	contributing
This commit is contained in:
		
							parent
							
								
									57312901e1
								
							
						
					
					
						commit
						3f137265cc
					
				| @ -196,7 +196,7 @@ These demos have been tested with Dojo Toolkit `1.10.4` and `1.17.3`. | ||||
| The official Google CDN is out of date. This is a known CDN bug. | ||||
| 
 | ||||
| The script <https://docs.sheetjs.com/dojo/dojo.js> was fetched from the official | ||||
| `1.17.3` uncompresssed release artifact[^2] on 2023-08-16. | ||||
| `1.17.3` uncompressed release artifact[^2] on 2023-08-16. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
|  | ||||
| @ -293,9 +293,11 @@ function SheetJSFetchUL() { | ||||
| 
 | ||||
| ### jQuery | ||||
| 
 | ||||
| `jQuery.ajax` (`$.ajax`) does not support binary data out of the box. A custom | ||||
| `ajaxTransport` can add required functionality. SheetJS users have reported | ||||
| success with `jquery.binarytransport.js` in IE10. | ||||
| [jQuery](https://jquery.com/) is a JavaScript library that includes helpers for | ||||
| performing "Ajax" network requests. `jQuery.ajax` (`$.ajax`) does not support | ||||
| binary data out of the box[^1]. A custom `ajaxTransport` can add support. | ||||
| 
 | ||||
| SheetJS users have reported success with `jquery.binarytransport.js`[^2] in IE10. | ||||
| 
 | ||||
| After including the main `jquery.js` and `jquery.binarytransport.js` scripts, | ||||
| `$.ajax` will support `dataType: "binary"` and `processData: false`. | ||||
| @ -344,8 +346,8 @@ are still relevant. | ||||
| 
 | ||||
| #### axios | ||||
| 
 | ||||
| The `axios` library presents a Promise interface. Setting `responseType` to | ||||
| `arraybuffer` ensures the return type is an ArrayBuffer: | ||||
| [`axios`](https://axios-http.com/) presents a Promise based interface. Setting | ||||
| `responseType` to `arraybuffer` ensures the return type is an ArrayBuffer: | ||||
| 
 | ||||
| ```js | ||||
| async function workbook_dl_axios(url) { | ||||
| @ -446,17 +448,22 @@ function SheetJSAxiosUL() { | ||||
| 
 | ||||
| #### superagent | ||||
| 
 | ||||
| The `superagent` library usage mirrors XHR: | ||||
| [`superagent`](https://github.com/visionmedia/superagent) is a network request | ||||
| library with a "Fluent Interface"[^3]. Calling the `responseType` method with | ||||
| `"arraybuffer"` will ensure the final response object is an `ArrayBuffer`: | ||||
| 
 | ||||
| ```js | ||||
| /* set up an async GET request with superagent */ | ||||
| superagent.get(url).responseType('arraybuffer').end(function(err, res) { | ||||
|   /* parse the data when it is received */ | ||||
|   var data = new Uint8Array(res.body); | ||||
|   var workbook = XLSX.read(data, {type:"array"}); | ||||
| superagent | ||||
|   .get(url) | ||||
|   .responseType('arraybuffer') | ||||
|   .end(function(err, res) { | ||||
|     /* parse the data when it is received */ | ||||
|     var data = new Uint8Array(res.body); | ||||
|     var workbook = XLSX.read(data, {type:"array"}); | ||||
| 
 | ||||
|   /* DO SOMETHING WITH workbook HERE */ | ||||
| }); | ||||
|     /* DO SOMETHING WITH workbook HERE */ | ||||
|   }); | ||||
| ``` | ||||
| 
 | ||||
| <details><summary><b>Live Download demo</b> (click to show)</summary> | ||||
| @ -582,7 +589,7 @@ https.get('https://sheetjs.com/pres.numbers', function(res) { | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was last tested on 2023 May 21 against NodeJS `18.16.0` | ||||
| This demo was last tested on 2023 August 29 against NodeJS `20.5.1` | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| @ -616,7 +623,7 @@ async function parse_from_url(url) { | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was last tested on 2023 May 21 against NodeJS `18.16.0` | ||||
| This demo was last tested on 2023 August 29 against NodeJS `20.5.1` | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| @ -675,7 +682,7 @@ var url = 'https://sheetjs.com/pres.numbers'; | ||||
| request(url, {encoding: null}, function(err, res, data) { | ||||
|   if(err || res.statusCode !== 200) return; | ||||
| 
 | ||||
|   /* if the request was succesful, parse the data */ | ||||
|   /* if the request was successful, parse the data */ | ||||
|   // highlight-next-line | ||||
|   var wb = XLSX.read(data); | ||||
| 
 | ||||
| @ -689,7 +696,7 @@ request(url, {encoding: null}, function(err, res, data) { | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was last tested on 2023 May 21 against request `2.88.2` | ||||
| This demo was last tested on 2023 August 29 against request `2.88.2` | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| @ -725,14 +732,14 @@ async function workbook_dl_axios(url) { | ||||
| 
 | ||||
| :::note | ||||
| 
 | ||||
| This demo was last tested on 2023 May 21 against Axios `1.4.0` | ||||
| This demo was last tested on 2023 August 29 against Axios `1.5.0` | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| 1) Install the [NodeJS module](/docs/getting-started/installation/nodejs) | ||||
| 
 | ||||
| <CodeBlock language="bash">{`\ | ||||
| npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz axios@1.4.0`} | ||||
| npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz axios@1.5.0`} | ||||
| </CodeBlock> | ||||
| 
 | ||||
| 2) Save the following to `SheetJSAxios.js`: | ||||
| @ -765,3 +772,7 @@ Other demos show network operations in special platforms: | ||||
| 
 | ||||
| - [React Native "Fetching Remote Data"](/docs/demos/mobile/reactnative#fetching-remote-data) | ||||
| - [NativeScript "Fetching Remote Files"](/docs/demos/mobile/nativescript#fetching-remote-files) | ||||
| 
 | ||||
| [^1]: See [`dataType` in `jQuery.ajax`](https://api.jquery.com/jQuery.ajax/#:~:text=the%20%27dataType%27%20parameter.-,dataType,-(default%3A%20Intelligent) in the official jQuery documentation. | ||||
| [^2]: See [the official `jquery.binarytransport.js` repo](https://github.com/henrya/js-jquery/tree/master/BinaryTransport) for more details. | ||||
| [^3]: See ["Fluent interface"](https://en.wikipedia.org/wiki/Fluent_interface) on Wikipedia. | ||||
| @ -340,7 +340,7 @@ manually open the `SheetJSNS` app. | ||||
| 
 | ||||
| The app can be tested with the following sequence in the simulator: | ||||
| 
 | ||||
| - Tap "Export File".  A dialog will print where the file was written. Typicaly | ||||
| - Tap "Export File". A dialog will print where the file was written. Typically | ||||
| the URL is `/data/user/0/org.nativescript.SheetJSNS/files/SheetJSNS.xls` | ||||
| 
 | ||||
| - Pull the file from the simulator: | ||||
|  | ||||
| @ -18,7 +18,7 @@ For other APIs, user code can pass data to `XLSX.read` or use data generated by | ||||
| This demo looks at various web APIs.  More specific approaches for deployments | ||||
| like mobile apps are covered in their respective demos. | ||||
| 
 | ||||
| :::note | ||||
| :::note pass | ||||
| 
 | ||||
| Some snippets are also available in the "Common Use Cases" section: | ||||
| 
 | ||||
| @ -27,7 +27,9 @@ Some snippets are also available in the "Common Use Cases" section: | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| :::warning | ||||
| ## Web Browsers | ||||
| 
 | ||||
| :::warning pass | ||||
| 
 | ||||
| Not all web APIs are supported in all browsers.  For example, Firefox does not | ||||
| support the "File System Access API". | ||||
| @ -37,7 +39,7 @@ client browser. Some APIs do not give any feedback. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| ## Binary Data | ||||
| ### Binary Data | ||||
| 
 | ||||
| Modern browser APIs typically use typed arrays or `Blob` or `File` structures. | ||||
| 
 | ||||
| @ -120,7 +122,7 @@ const u8 = XLSX.write(workbook, { type: "buffer", bookType: "xlsx" }); | ||||
| const blob = new Blob([u8], { type: "application/vnd.ms-excel" }); | ||||
| ``` | ||||
| 
 | ||||
| ## HTML5 Download Attribute | ||||
| ### HTML5 Download Attribute | ||||
| 
 | ||||
| _Writing Files_ | ||||
| 
 | ||||
| @ -173,7 +175,7 @@ includes a live demo. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| ## File API | ||||
| ### File API | ||||
| 
 | ||||
| _Reading Files_ | ||||
| 
 | ||||
| @ -193,7 +195,7 @@ async function handleFileAsync(e) { | ||||
| input_dom_element.addEventListener("change", handleFileAsync, false); | ||||
| ``` | ||||
| 
 | ||||
| ## HTML Drag and Drop API | ||||
| ### HTML Drag and Drop API | ||||
| 
 | ||||
| _Reading Files_ | ||||
| 
 | ||||
| @ -221,7 +223,7 @@ drop_dom_element.addEventListener("dragover", suppress, false); | ||||
| drop_dom_element.addEventListener("dragenter", suppress, false); | ||||
| ``` | ||||
| 
 | ||||
| ## File System Access API | ||||
| ### File System Access API | ||||
| 
 | ||||
| :::caution Limited Browser Support | ||||
| 
 | ||||
| @ -235,7 +237,8 @@ the feature in version 86.  Safari did not support File System Access API. | ||||
| This live example reads a file then tries to save as XLSX. | ||||
| 
 | ||||
| ```jsx live | ||||
| function SheetJSRoundTripFileSystemAPI() { return ( <button onClick={async () => { | ||||
| function SheetJSRoundTripFileSystemAPI() { return window.showSaveFilePicker ? ( | ||||
| <button onClick={async () => { | ||||
|   /* Show picker and get data */ | ||||
|   const [rFile] = await window.showOpenFilePicker({ | ||||
|     types: [{ | ||||
| @ -264,7 +267,8 @@ function SheetJSRoundTripFileSystemAPI() { return ( <button onClick={async () => | ||||
|   /* close stream to commit file */ | ||||
|   wstream.close(); | ||||
| 
 | ||||
| }}>Click to read then save as XLSX</button> ) } | ||||
| }}>Click to read then save as XLSX</button> | ||||
|   ) : ( <b>This browser does not support File System Access API</b> ); } | ||||
| ``` | ||||
| 
 | ||||
| </details> | ||||
| @ -323,7 +327,7 @@ wstream.write(XLSX.write(wb, { bookType: ext, type: "buffer" })) | ||||
| wstream.close(); | ||||
| ``` | ||||
| 
 | ||||
| ## File and Directory Entries API | ||||
| ### File and Directory Entries API | ||||
| 
 | ||||
| :::caution Deprecated | ||||
| 
 | ||||
| @ -355,7 +359,7 @@ window.requestFileSystem(window.PERSISTENT, 0, (fs) => { | ||||
| }); | ||||
| ``` | ||||
| 
 | ||||
| ## Internet Explorer | ||||
| ### Internet Explorer | ||||
| 
 | ||||
| Internet Explorer offered proprietary APIs that were not adopted by Chromium. | ||||
| 
 | ||||
|  | ||||
| @ -265,6 +265,7 @@ This demo was tested in the following deployments: | ||||
| | `darwin-x64` | `2788d71`  | 2023-07-24 | | ||||
| | `darwin-arm` | `2788d71`  | 2023-06-05 | | ||||
| | `linux-x64`  | `2788d71`  | 2023-06-02 | | ||||
| | `linux-arm`  | `2788d71`  | 2023-08-29 | | ||||
| | `win10-x64`  | `2788d71`  | 2023-07-24 | | ||||
| 
 | ||||
| When the demo was tested, commit `2788d71` corresponded to the latest release. | ||||
| @ -40,7 +40,7 @@ These instructions were tested on the following platforms: | ||||
| | Platform                      | Test Date  | | ||||
| |:------------------------------|:-----------| | ||||
| | Linux (Steam Deck Holo 3.4.8) | 2023-07-12 | | ||||
| | Linux (Ubuntu 18.04 AArch64)  | 2023-04-13 | | ||||
| | Linux (Debian 11 AArch64)     | 2023-08-29 | | ||||
| | MacOS 10.13 (x64)             | 2023-04-04 | | ||||
| | MacOS 13.0 (ARM64)            | 2023-04-13 | | ||||
| | Windows 10 (x64) + WSL Ubuntu | 2023-07-23 | | ||||
| @ -277,16 +277,17 @@ 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 | ||||
| 3) Run a build and verify with a short test: | ||||
| 
 | ||||
| ```bash | ||||
| # Short test | ||||
| make test_misc | ||||
| 
 | ||||
| # Full Build | ||||
| cd modules; make clean; make; cd .. | ||||
| make | ||||
| make dist | ||||
| 
 | ||||
| # Short test | ||||
| make test_misc | ||||
| 
 | ||||
| # Reset repo | ||||
| git checkout -- . | ||||
| ``` | ||||
| @ -374,8 +375,30 @@ The `xlsx.js` and `xlsx.mjs` files are constructed from the files in the `bits` | ||||
| subfolder. 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*. | ||||
| When changing the `.js` scripts in `bits`, the following sequence rebuilds the | ||||
| `xlsx.js` and `xlsx.mjs` scripts: | ||||
| 
 | ||||
| ```bash | ||||
| make | ||||
| ``` | ||||
| 
 | ||||
| When changing the `.ts` scripts in `modules`, the following sequence rebuilds | ||||
| the `xlsx.js` and `xlsx.mjs` scripts: | ||||
| 
 | ||||
| ```bash | ||||
| cd modules; make clean; make; cd .. | ||||
| ``` | ||||
| 
 | ||||
| To produce the dist files, run `make dist`. | ||||
| 
 | ||||
| :::info pass | ||||
| 
 | ||||
| The various `xlsx.*` scripts in the base folder and the files in the `dist` | ||||
| folder are updated on each version release. | ||||
| 
 | ||||
| **They should not be committed between versions!** | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| ## Tests | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user