forked from sheetjs/docs.sheetjs.com
		
	vtl
This commit is contained in:
		
							parent
							
								
									5e3369edda
								
							
						
					
					
						commit
						e455737c33
					
				| @ -89,9 +89,9 @@ XLSX.set_cptable(cpexcel); | ||||
| For server-side scripts, `bun build` can pre-optimize dependencies. The Bun | ||||
| builder requires a proper `package.json` that includes the SheetJS dependency. | ||||
| 
 | ||||
| :::note | ||||
| :::note Tested Deployments | ||||
| 
 | ||||
| This example was last tested on 2023 October 21 against BunJS 1.0.6. | ||||
| This example was last tested on 2023 November 05 against BunJS 1.0.8. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| @ -124,10 +124,14 @@ const url = "https://sheetjs.com/data/executive.json"; | ||||
| const raw_data = await (await fetch(url)).json(); | ||||
| 
 | ||||
| /* filter for the Presidents */ | ||||
| const prez = raw_data.filter((row) => row.terms.some((term) => term.type === "prez")); | ||||
| const prez = raw_data.filter(row => row.terms.some(term => term.type === "prez")); | ||||
| 
 | ||||
| /* sort by first presidential term */ | ||||
| prez.forEach(row => row.start = row.terms.find(term => term.type === "prez").start); | ||||
| prez.sort((l,r) => l.start.localeCompare(r.start)); | ||||
| 
 | ||||
| /* flatten objects */ | ||||
| const rows = prez.map((row) => ({ | ||||
| const rows = prez.map(row => ({ | ||||
|   name: row.name.first + " " + row.name.last, | ||||
|   birthday: row.bio.birthday | ||||
| })); | ||||
|  | ||||
| @ -7,10 +7,10 @@ pagination_next: demos/net/index | ||||
| import current from '/version.js'; | ||||
| import CodeBlock from '@theme/CodeBlock'; | ||||
| 
 | ||||
| :::note | ||||
| :::note Tested Deployments | ||||
| 
 | ||||
| This demo was tested against `vue3-table-lite 1.2.4`, VueJS `3.3.4`, ViteJS | ||||
| 4.4.7, and `@vitejs/plugin-vue` 4.2.3 on 2023 July 27 | ||||
| This demo was tested against `vue3-table-lite 1.3.9`, VueJS `3.3.7` and ViteJS | ||||
| `4.5.0` on 2023 November 03. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| @ -132,4 +132,4 @@ npm run dev | ||||
| 5) Load the displayed URL (typically `http://localhost:5173`) in a web browser. | ||||
| 
 | ||||
| When the page loads, it will try to fetch <https://sheetjs.com/pres.numbers> | ||||
| and display the data | ||||
| and display the data. Click "Export" to generate a workbook. | ||||
|  | ||||
| @ -185,7 +185,7 @@ export class SheetjsController { | ||||
| npx @nestjs/cli start | ||||
| ``` | ||||
| 
 | ||||
| :::note | ||||
| :::note pass | ||||
| 
 | ||||
| In the most recent test, the process failed with a message referencing Multer: | ||||
| 
 | ||||
|  | ||||
| @ -440,9 +440,20 @@ When this demo was last tested, Google Chrome did not add an entry to the | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| :::note | ||||
| :::note Tested Deployments | ||||
| 
 | ||||
| This demo was last tested on 2023 August 30 in Google Chrome. | ||||
| This browser demo was tested in the following environments: | ||||
| 
 | ||||
| | Browser     | Date       | | ||||
| |:------------|:-----------| | ||||
| | Chrome 119  | 2023-11-04 | | ||||
| 
 | ||||
| Some lesser-used browsers do not support File System Access API: | ||||
| 
 | ||||
| | Browser     | Date       | | ||||
| |:------------|:-----------| | ||||
| | Safari 17.0 | 2023-11-04 | | ||||
| | Firefox 119 | 2023-11-04 | | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
|  | ||||
| @ -7,6 +7,8 @@ pagination_next: demos/bigdata/index | ||||
| --- | ||||
| 
 | ||||
| import current from '/version.js'; | ||||
| import Tabs from '@theme/Tabs'; | ||||
| import TabItem from '@theme/TabItem'; | ||||
| import CodeBlock from '@theme/CodeBlock'; | ||||
| 
 | ||||
| [Mathematica](https://mathematica.com) is a software system for mathematics and | ||||
| @ -19,9 +21,9 @@ This demo uses SheetJS to pull data from a spreadsheet for further analysis | ||||
| within Mathematica. We'll explore how to run an external tool to generate CSV | ||||
| data from opaque spreadsheets and parse the data from Mathematica. | ||||
| 
 | ||||
| :::note | ||||
| :::note Tested Deployments | ||||
| 
 | ||||
| This demo was last tested by SheetJS users on 2023 August 21 in Mathematica 13. | ||||
| This demo was last tested by SheetJS users on 2023 November 04 in Mathematica 13. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| @ -74,6 +76,35 @@ _Complete Function_ | ||||
| The following function reads a file, parses the first worksheet and returns a | ||||
| Dataset object assuming one header row. | ||||
| 
 | ||||
| <Tabs groupId="os"> | ||||
|   <TabItem value="unix" label="Linux/MacOS"> | ||||
| 
 | ||||
| ```mathematica title="Complete Function" | ||||
| (* Import file stored in the Documents folder (e.g. C:\Users\Me\Documents) *) | ||||
| SheetJSImportFileEE[filename_]:=Module[{csv}, ( | ||||
|   (* This was required in local testing *) | ||||
|   RegisterExternalEvaluator["NodeJS","/usr/local/bin/node"]; | ||||
| 
 | ||||
|   (* Generate CSV from first sheet *) | ||||
|   csv:=ExternalEvaluate["NodeJS", StringJoin[ | ||||
|     (* module installed in home directory *) | ||||
|     "var XLSX = require('xlsx');", | ||||
|     (* read specified filename *) | ||||
|     "var wb = XLSX.readFile('",filename,"');", | ||||
|     (* grab first worksheet *) | ||||
|     "var ws = wb.Sheets[wb.SheetNames[0]];", | ||||
|     (* convert to CSV *) | ||||
|     "XLSX.utils.sheet_to_csv(ws)" | ||||
|   ]]; | ||||
| 
 | ||||
|   (* Parse CSV into a dataset *) | ||||
|   Return[ImportString[csv, "Dataset", "HeaderLines"->1]]; | ||||
| )] | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="win" label="Windows"> | ||||
| 
 | ||||
| ```mathematica title="Complete Function" | ||||
| (* Import file stored in the Documents folder (e.g. C:\Users\Me\Documents) *) | ||||
| SheetJSImportFileEE[filename_]:=Module[{csv}, ( | ||||
| @ -93,19 +124,22 @@ SheetJSImportFileEE[filename_]:=Module[{csv}, ( | ||||
|   ]]; | ||||
| 
 | ||||
|   (* Parse CSV into a dataset *) | ||||
|   ImportString[csv, "Dataset", "HeaderLines"->1]; | ||||
|   Return[ImportString[csv, "Dataset", "HeaderLines"->1]]; | ||||
| )] | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
| </Tabs> | ||||
| 
 | ||||
| <details open><summary><b>How to run the example</b> (click to hide)</summary> | ||||
| 
 | ||||
| :::note | ||||
| :::note Tested Deployments | ||||
| 
 | ||||
| This example was last tested on 2023 September 13 with Mathematica 13.3. | ||||
| This example was last tested on 2023 November 04 with Mathematica 13.3. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| 0) Install NodeJS. When the demo was tested, version `18.14.1` was installed. | ||||
| 0) Install NodeJS. When the demo was tested, version `20.9.0` was installed. | ||||
| 
 | ||||
| 1) Install dependencies in the Home folder (`~` or `$HOME` or `%HOMEPATH%`): | ||||
| 
 | ||||
| @ -116,11 +150,25 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz zeromq@ | ||||
| 2) Open a new Mathematica Notebook and register NodeJS. When the example was | ||||
| tested in Windows, the commands were: | ||||
| 
 | ||||
| <Tabs groupId="os"> | ||||
|   <TabItem value="unix" label="Linux/MacOS"> | ||||
| 
 | ||||
| ```mathematica | ||||
| RegisterExternalEvaluator["NodeJS","/usr/local/bin/node"] | ||||
| FindExternalEvaluators["NodeJS"] | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="win" label="Windows"> | ||||
| 
 | ||||
| ```mathematica | ||||
| RegisterExternalEvaluator["NodeJS","C:\\Program Files\\nodejs\\node.exe"] | ||||
| FindExternalEvaluators["NodeJS"] | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
| </Tabs> | ||||
| 
 | ||||
| The second argument to `RegisterExternalEvaluator` should be the path to the | ||||
| `node` or `node.exe` binary. | ||||
| 
 | ||||
| @ -143,6 +191,8 @@ to the base folder as shown in the previous step. | ||||
| SheetJSImportFileEE["pres.numbers"] | ||||
| ``` | ||||
| 
 | ||||
|  | ||||
| 
 | ||||
| </details> | ||||
| 
 | ||||
| ### Command-Line Tools | ||||
| @ -183,21 +233,17 @@ flowchart LR | ||||
| 
 | ||||
| ## Complete Demo | ||||
| 
 | ||||
| :::info pass | ||||
| 
 | ||||
| This demo was tested in macOS.  The path names will differ in other platforms. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| 1) Create the standalone `xlsx-cli` binary[^14]: | ||||
| 
 | ||||
| <CodeBlock language="bash">{`\ | ||||
| cd /tmp | ||||
| npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz exit-on-epipe commander@2 | ||||
| curl -LO https://docs.sheetjs.com/cli/xlsx-cli.js | ||||
| npx nexe -t 14.15.3 xlsx-cli.js`} | ||||
| </CodeBlock> | ||||
| 
 | ||||
| <Tabs groupId="os"> | ||||
|   <TabItem value="unix" label="Linux/MacOS"> | ||||
| 
 | ||||
| 2) Move the generated `xlsx-cli` to a fixed location in `/usr/local/bin`: | ||||
| 
 | ||||
| ```bash | ||||
| @ -205,6 +251,20 @@ mkdir -p /usr/local/bin | ||||
| mv xlsx-cli /usr/local/bin/ | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="win" label="Windows"> | ||||
| 
 | ||||
| 2) Find the current directory: | ||||
| 
 | ||||
| ```bash | ||||
| cd | ||||
| ``` | ||||
| 
 | ||||
| The generated binary will be `xlsx-cli.exe` in the displayed path. | ||||
| 
 | ||||
|   </TabItem> | ||||
| </Tabs> | ||||
| 
 | ||||
| ### Reading a Local File | ||||
| 
 | ||||
| 3) In a new Mathematica notebook, run the following snippet: | ||||
| @ -212,10 +272,34 @@ mv xlsx-cli /usr/local/bin/ | ||||
| ```mathematica | ||||
| SheetJSImportFile[x_] := ImportString[Block[{Print}, ExternalEvaluate[ | ||||
|   "Shell" -> "StandardOutput", | ||||
|   // highlight-next-line | ||||
|   "/usr/local/bin/xlsx-cli " <> x | ||||
| ]], "Dataset", "HeaderLines" -> 1] | ||||
| ``` | ||||
| 
 | ||||
| <Tabs groupId="os"> | ||||
|   <TabItem value="unix" label="Linux/MacOS"> | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="win" label="Windows"> | ||||
| 
 | ||||
| Change `/usr/local/bin/xlsx-cli` in the string to the path to the generated | ||||
| `xlsx-cli.exe` binary. For example, if the path in step 2 was | ||||
| `C:\Users\Me\Documents\`, then the code should be: | ||||
| 
 | ||||
| ```mathematica | ||||
| SheetJSImportFile[x_] := ImportString[Block[{Print}, ExternalEvaluate[ | ||||
|   "Shell" -> "StandardOutput", | ||||
|   // highlight-next-line | ||||
|   "C:\\Users\\Me\\Documents\\xlsx-cli.exe " <> x | ||||
| ]], "Dataset", "HeaderLines" -> 1] | ||||
| ``` | ||||
| 
 | ||||
| The `\` characters must be doubled. | ||||
| 
 | ||||
|   </TabItem> | ||||
| </Tabs> | ||||
| 
 | ||||
| 4) Download <https://sheetjs.com/pres.numbers> and save to Downloads folder: | ||||
| 
 | ||||
| ```bash | ||||
| @ -232,6 +316,8 @@ data = SheetJSImportFile["~/Downloads/pres.numbers"] | ||||
| 
 | ||||
| The result should be displayed in a concise table. | ||||
| 
 | ||||
|  | ||||
| 
 | ||||
| ### Reading from a URL | ||||
| 
 | ||||
| `FetchURL`[^15] downloads a file from a specified URL and returns a path to the | ||||
| @ -253,6 +339,8 @@ SheetJSImportURL[x_] := Module[{path},( | ||||
| data = SheetJSImportURL["https://sheetjs.com/pres.numbers"] | ||||
| ``` | ||||
| 
 | ||||
|  | ||||
| 
 | ||||
| [^1]: See [the `ExternalEvaluate` Node.js example](https://reference.wolfram.com/language/ref/ExternalEvaluate.html#:~:text=Evaluate%20a%20basic%20math%20function%20in%20JavaScript%20using%20Node.js%3A) in the Mathematica documentation. | ||||
| [^2]: See [`RegisterExternalEvaluator`](https://reference.wolfram.com/language/ref/RegisterExternalEvaluator.html) in the Mathematica documentation. | ||||
| [^3]: See [`ExternalEvaluate`](https://reference.wolfram.com/language/ref/ExternalEvaluate.html) in the Mathematica documentation. | ||||
|  | ||||
| @ -229,7 +229,7 @@ curl -LO https://docs.sheetjs.com/duk/sheetjs.duk.c | ||||
| gcc -std=c99 -Wall -osheetjs.duk sheetjs.duk.c duktape.c -lm | ||||
| ``` | ||||
| 
 | ||||
| :::note | ||||
| :::note pass | ||||
| 
 | ||||
| GCC may generate a warning: | ||||
| 
 | ||||
|  | ||||
| @ -356,7 +356,7 @@ while the "CLI Test" demonstrates other concepts using the `hermes` CLI tool. | ||||
| 
 | ||||
| ### Integration Example | ||||
| 
 | ||||
| :::note | ||||
| :::note Tested Deployments | ||||
| 
 | ||||
| This demo was tested in the following deployments: | ||||
| 
 | ||||
| @ -374,6 +374,8 @@ fork, which powers React Native for Windows, does have built-in support[^5] | ||||
| |:-------------|:-----------|:-----------| | ||||
| | `win10-x64`  | `930456b`  | 2023-10-28 | | ||||
| 
 | ||||
| The ["Windows Example"](#windows-example) covers `hermes-windows`. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| 0) Install [dependencies](https://hermesengine.dev/docs/building-and-running/#dependencies) | ||||
| @ -627,18 +629,56 @@ contents of the first sheet as CSV rows. | ||||
| 
 | ||||
| ### CLI Test | ||||
| 
 | ||||
| :::note | ||||
| :::note Tested Deployments | ||||
| 
 | ||||
| This demo was last tested on 2023 August 27 against Hermes version `0.11.0`. | ||||
| This demo was last tested on 2023 November 04 against Hermes version `0.11.0`. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| Due to limitations of the standalone binary, this demo will encode a test file | ||||
| as a Base64 string and directly add it to an amalgamated script. | ||||
| 
 | ||||
| 0) Install the `hermes` command line tool | ||||
| #### Install CLI | ||||
| 
 | ||||
| 1) Download the SheetJS Standalone script and the test file. Save both files in | ||||
| 0) Install the Hermes command line tools: | ||||
| 
 | ||||
| ```bash | ||||
| npx jsvu install hermes@0.11.0 | ||||
| ``` | ||||
| 
 | ||||
| When prompted, select the appropriate operating system. | ||||
| 
 | ||||
| 1) Inspect the output of the installer. Look for "Installing binary" lines: | ||||
| 
 | ||||
| ```text pass | ||||
| ❯ Extracting… | ||||
| // highlight-next-line | ||||
| Installing binary to ~/.jsvu/engines/hermes-0.11.0/hermes-0.11.0… | ||||
| Installing symlink at ~/.jsvu/bin/hermes-0.11.0 pointing to ~/.jsvu/engines/hermes-0.11.0/hermes-0.11.0… | ||||
| Installing binary to ~/.jsvu/engines/hermes-0.11.0/hermes-0.11.0-compiler… | ||||
| Installing symlink at ~/.jsvu/bin/hermes-0.11.0-compiler pointing to ~/.jsvu/engines/hermes-0.11.0/hermes-0.11.0-compiler… | ||||
| ``` | ||||
| 
 | ||||
| The first "Installing binary" line mentions the path to the `hermes` tool. | ||||
| 
 | ||||
| #### Setup Project | ||||
| 
 | ||||
| 2) Create a new project folder: | ||||
| 
 | ||||
| ```bash | ||||
| mkdir sheetjs-hermes-cli | ||||
| cd sheetjs-hermes-cli | ||||
| ``` | ||||
| 
 | ||||
| 3) Copy the binary from Step 1 into the current folder. For example, on macOS: | ||||
| 
 | ||||
| ```bash | ||||
| cp ~/.jsvu/engines/hermes-0.11.0/hermes-0.11.0 . | ||||
| ``` | ||||
| 
 | ||||
| #### Create Script | ||||
| 
 | ||||
| 4) Download the SheetJS Standalone script and the test file. Save both files in | ||||
| the project directory: | ||||
| 
 | ||||
| <ul> | ||||
| @ -651,13 +691,13 @@ curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js | ||||
| curl -LO https://sheetjs.com/pres.numbers`} | ||||
| </CodeBlock> | ||||
| 
 | ||||
| 2) Bundle the test file and create `payload.js`: | ||||
| 5) Bundle the test file and create `payload.js`: | ||||
| 
 | ||||
| ```bash | ||||
| node -e "fs.writeFileSync('payload.js', 'var payload = \"' + fs.readFileSync('pres.numbers').toString('base64') + '\";')" | ||||
| ``` | ||||
| 
 | ||||
| 3) Create support scripts: | ||||
| 6) Create support scripts: | ||||
| 
 | ||||
| - `global.js` creates a `global` variable and defines a fake `console`: | ||||
| 
 | ||||
| @ -673,19 +713,21 @@ var wb = XLSX.read(payload, {type:'base64'}); | ||||
| console.log(XLSX.utils.sheet_to_csv(wb.Sheets[wb.SheetNames[0]])); | ||||
| ``` | ||||
| 
 | ||||
| 4) Create the amalgamation `xlsx.hermes.js`: | ||||
| 7) Create the amalgamation `sheetjs.hermes.js`: | ||||
| 
 | ||||
| ```bash | ||||
| cat global.js xlsx.full.min.js payload.js hermes.js > xlsx.hermes.js | ||||
| cat global.js xlsx.full.min.js payload.js hermes.js > sheetjs.hermes.js | ||||
| ``` | ||||
| 
 | ||||
| The final script defines `global` before loading the standalone library.  Once | ||||
| ready, it will read the bundled test data and print the contents as CSV. | ||||
| 
 | ||||
| 5) Run the script using the Hermes standalone binary: | ||||
| #### Testing | ||||
| 
 | ||||
| 8) Run the script using the Hermes standalone binary: | ||||
| 
 | ||||
| ```bash | ||||
| hermes xlsx.hermes.js | ||||
| ./hermes-0.11.0 sheetjs.hermes.js | ||||
| ``` | ||||
| 
 | ||||
| If successful, the script will print CSV data from the test file. | ||||
|  | ||||
| @ -1,5 +1,7 @@ | ||||
| --- | ||||
| title: C++ + ChakraCore | ||||
| title: Sheets in ChakraCore | ||||
| sidebar_label: C++ + ChakraCore | ||||
| description: Process structured data in C++ programs. Seamlessly integrate spreadsheets into your program by pairing ChakraCore and SheetJS. Handle the most complex files without breaking a sweat. | ||||
| pagination_prev: demos/bigdata/index | ||||
| pagination_next: solutions/input | ||||
| --- | ||||
| @ -11,12 +13,19 @@ import CodeBlock from '@theme/CodeBlock'; | ||||
| 
 | ||||
| ChakraCore is an embeddable JS engine written in C++. | ||||
| 
 | ||||
| The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone) | ||||
| can be parsed and evaluated in a ChakraCore context. | ||||
| [SheetJS](https://sheetjs.com) is a JavaScript library for reading and writing | ||||
| data from spreadsheets. | ||||
| 
 | ||||
| This demo uses Hermes and SheetJS to pull data from a spreadsheet and print CSV | ||||
| rows. We'll explore how to load SheetJS in a ChakraCore context and process | ||||
| spreadsheets from a C++ program. | ||||
| 
 | ||||
| The ["Integration Example"](#integration-example) section includes a complete | ||||
| command-line tool for reading data from files. | ||||
| 
 | ||||
| ## Integration Details | ||||
| 
 | ||||
| _Initialize ChakraCore_ | ||||
| ### Initialize ChakraCore | ||||
| 
 | ||||
| ChakraCore provides a `global` object through `JsGetGlobalObject`: | ||||
| 
 | ||||
| @ -47,7 +56,10 @@ example shows structured validation and controlled memory usage. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| _Load SheetJS Scripts_ | ||||
| ### Load SheetJS Scripts | ||||
| 
 | ||||
| [SheetJS Standalone scripts](/docs/getting-started/installation/standalone) can | ||||
| be parsed and evaluated in a ChakraCore context. | ||||
| 
 | ||||
| The main library can be loaded by reading the script from the file system and | ||||
| evaluating in the ChakraCore context: | ||||
| @ -114,13 +126,13 @@ while the "CLI Test" demonstrates other concepts using the `ch` CLI tool. | ||||
| 
 | ||||
| ### Integration Example | ||||
| 
 | ||||
| :::note | ||||
| :::note Tested Deployments | ||||
| 
 | ||||
| This demo was tested in the following deployments: | ||||
| 
 | ||||
| | Architecture | Git Commit | Date       | | ||||
| |:-------------|:-----------|:-----------| | ||||
| | `darwin-x64` | `c3ead3f`  | 2023-08-26 | | ||||
| | `darwin-x64` | `c3ead3f`  | 2023-11-04 | | ||||
| | `darwin-arm` | `c3ead3f`  | 2023-10-19 | | ||||
| | `win10-x64`  | `c3ead3f`  | 2023-10-28 | | ||||
| | `linux-x64`  | `c3ead3f`  | 2023-10-11 | | ||||
| @ -164,7 +176,7 @@ All commands in this demo should be run in a "Native Tools Command Prompt". | ||||
| 1) Download ChakraCore: | ||||
| 
 | ||||
| ```bash | ||||
| git clone https://github.com/Microsoft/ChakraCore.git | ||||
| git clone https://github.com/chakra-core/ChakraCore.git | ||||
| cd ChakraCore | ||||
| git checkout c3ead3f | ||||
| cd .. | ||||
| @ -364,7 +376,7 @@ If successful, the program will print the contents of the first sheet as CSV. | ||||
| 
 | ||||
| ### CLI Test | ||||
| 
 | ||||
| :::note | ||||
| :::note Tested Deployments | ||||
| 
 | ||||
| This demo was last tested on 2023-10-28 against `ch` commit `c3ead3f`. | ||||
| 
 | ||||
|  | ||||
| @ -120,7 +120,7 @@ This demo was tested in the following deployments: | ||||
| 
 | ||||
| | Architecture | Date       | | ||||
| |:-------------|:-----------| | ||||
| | `darwin-x64` | 2023-08-31 | | ||||
| | `darwin-x64` | 2023-11-03 | | ||||
| | `darwin-arm` | 2023-10-20 | | ||||
| | `win10-x64`  | 2023-10-28 | | ||||
| | `win11-arm`  | 2023-09-26 | | ||||
|  | ||||
| @ -369,4 +369,4 @@ the `w` text if available. When programmatically changing values, the `w` text | ||||
| should be deleted before attempting to export. Utilities will regenerate the `w` | ||||
| text from the number format (`cell.z`) and the raw value if possible. | ||||
| 
 | ||||
| [^1]: On 2023 September 14, [the "Review guidelines for customizing a number format" page](https://support.microsoft.com/en-us/office/review-guidelines-for-customizing-a-number-format-c0a1d1fa-d3f4-4018-96b7-9c9354dd99f5) in the Excel documentation covered custom number format minutiae. | ||||
| [^1]: On 2023 November 04, [the "Review guidelines for customizing a number format" page](https://support.microsoft.com/en-us/office/review-guidelines-for-customizing-a-number-format-c0a1d1fa-d3f4-4018-96b7-9c9354dd99f5) in the Excel documentation covered custom number format minutiae. | ||||
							
								
								
									
										
											BIN
										
									
								
								docz/static/mathematica/SheetJSImportFile.png
									
									
									
									
									
										Normal file
									
								
							
							
								
									
								
								
								
								
								
									
									
								
							
						
						
									
										
											BIN
										
									
								
								docz/static/mathematica/SheetJSImportFile.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 131 KiB | 
							
								
								
									
										
											BIN
										
									
								
								docz/static/mathematica/SheetJSImportFileEE.png
									
									
									
									
									
										Normal file
									
								
							
							
								
									
								
								
								
								
								
									
									
								
							
						
						
									
										
											BIN
										
									
								
								docz/static/mathematica/SheetJSImportFileEE.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 116 KiB | 
							
								
								
									
										
											BIN
										
									
								
								docz/static/mathematica/SheetJSImportURL.png
									
									
									
									
									
										Normal file
									
								
							
							
								
									
								
								
								
								
								
									
									
								
							
						
						
									
										
											BIN
										
									
								
								docz/static/mathematica/SheetJSImportURL.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 141 KiB | 
| @ -16,6 +16,8 @@ const sheets = ref<string[]>([]); | ||||
| const workBook = ref<DataSet>({} as DataSet); | ||||
| const rows = ref<Row[]>([]); | ||||
| const columns = ref<Column[]>([]); | ||||
| const loading = ref<boolean>(true); | ||||
| const paging = ref<boolean>(true); | ||||
| 
 | ||||
| const exportTypes: string[] = ["xlsx", "xlsb", "csv", "html"]; | ||||
| 
 | ||||
| @ -60,12 +62,14 @@ const makeDisplay = (col: number): RowCB => (row: Row) => `<span | ||||
| }; | ||||
| 
 | ||||
| async function importAB(ab: ArrayBuffer, name: string): Promise<void> { | ||||
|   loading.value = true; | ||||
|   const data = read(ab); | ||||
| 
 | ||||
|   currFileName.value = name; | ||||
|   currSheet.value = data.SheetNames?.[0]; | ||||
|   sheets.value = data.SheetNames; | ||||
|   workBook.value = data.Sheets; | ||||
|   loading.value = false; | ||||
| 
 | ||||
|   selectSheet(currSheet.value); | ||||
| } | ||||
| @ -91,9 +95,10 @@ function selectSheet(sheet: string): void { | ||||
| 
 | ||||
|   resetCell(); | ||||
| 
 | ||||
|   rows.value = newRows; | ||||
|   columns.value = newCols; | ||||
|   currSheet.value = sheet; | ||||
|   columns.value = newCols; | ||||
|   rows.value = newRows; | ||||
|   paging.value = newRows.length > 50 | ||||
| } | ||||
| 
 | ||||
| /* Download from https://sheetjs.com/pres.numbers */ | ||||
| @ -129,7 +134,7 @@ onMounted(async() => { | ||||
|       {{ sheet }} | ||||
|     </span> | ||||
|   </div> | ||||
|   <vue-table-lite :is-static-mode="true" :page-size="50" :columns="columns" :rows="rows"></vue-table-lite> | ||||
|   <vue-table-lite :is-loading="loading" :page-size="50" :columns="columns" :is-hide-paging="paging" :rows="rows"></vue-table-lite> | ||||
| </template> | ||||
| 
 | ||||
| <style> | ||||
| @ -216,4 +221,3 @@ onMounted(async() => { | ||||
|   color: white; | ||||
| } | ||||
| </style> | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user