forked from sheetjs/docs.sheetjs.com
		
	v8
This commit is contained in:
		
							parent
							
								
									18bfc66fac
								
							
						
					
					
						commit
						79aacab553
					
				| @ -113,10 +113,11 @@ This demo was tested in the following environments: | ||||
| 
 | ||||
| | OS and Version | Arch | NW.js    | Date       | | ||||
| |:---------------|:-----|:---------|:-----------| | ||||
| | macOS 13.4.1   | x64  | `0.78.0` | 2023-07-27 | | ||||
| | Windows 10     | x64  | `0.78.0` | 2023-07-27 | | ||||
| | Windows 10     | ARM  | `0.80.0` | 2023-09-25 | | ||||
| | Linux (HoloOS) | x64  | `0.78.0` | 2023-07-27 | | ||||
| | macOS 13.5.2   | x64  | `0.78.1` | 2023-09-27 | | ||||
| | macOS 13.5.2   | ARM  | `0.78.1` | 2023-09-27 | | ||||
| | Windows 10     | x64  | `0.78.1` | 2023-09-27 | | ||||
| | Windows 11     | ARM  | `0.78.1` | 2023-09-27 | | ||||
| | Linux (HoloOS) | x64  | `0.78.1` | 2023-09-27 | | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| @ -129,7 +130,7 @@ This demo was tested in the following environments: | ||||
|   "version": "0.0.0", | ||||
|   "main": "index.html", | ||||
|   "dependencies": { | ||||
|     "nw": "~0.80.0", | ||||
|     "nw": "0.78.1", | ||||
|     "xlsx": "https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz" | ||||
|   } | ||||
| }`} | ||||
| @ -150,7 +151,11 @@ In the terminal window, the download can be performed with: | ||||
| curl -LO https://docs.sheetjs.com/nwjs/index.html | ||||
| ``` | ||||
| 
 | ||||
| 3) Run `npm i` to install dependencies | ||||
| 3) Install dependencies: | ||||
| 
 | ||||
| ```bash | ||||
| npm i | ||||
| ``` | ||||
| 
 | ||||
| 4) To verify the app works, run in the test environment: | ||||
| 
 | ||||
| @ -164,7 +169,7 @@ the file input element to select a spreadsheet and clicking the export button. | ||||
| 5) To build a standalone app, run the builder: | ||||
| 
 | ||||
| ```bash | ||||
| npx -p nw-builder nwbuild --mode=build --glob=false --outDir=../out ./ | ||||
| npx -p nw-builder nwbuild --mode=build --version=0.78.1 --glob=false --outDir=../out ./ | ||||
| ``` | ||||
| 
 | ||||
| This will generate the standalone app in the `..\build\sheetjs-nwjs\` folder. | ||||
| This will generate the standalone app in the `..\out\` folder. | ||||
| @ -260,7 +260,9 @@ This demo was tested in the following environments: | ||||
| | macOS 13.4.0   | x64  | `v1.4.0` | 2023-06-25 | | ||||
| | macOS 13.4.1   | ARM  | `v1.4.0` | 2023-06-29 | | ||||
| | Windows 10     | x64  | `v1.4.1` | 2023-07-30 | | ||||
| | Windows 11     | ARM  | `v1.4.1` | 2023-09-26 | | ||||
| | Linux (HoloOS) | x64  | `v1.4.1` | 2023-07-30 | | ||||
| | Linux (Debian) | ARM  | `v1.4.1` | 2023-09-26 | | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
|  | ||||
| @ -345,6 +345,7 @@ This demo was last tested in the following deployments: | ||||
| | `darwin-x64` | `1.33.2` | 2023-05-08 | | ||||
| | `darwin-arm` | `1.34.1` | 2023-06-05 | | ||||
| | `win10-x64`  | `1.33.2` | 2023-05-08 | | ||||
| | `win11-arm`  | `1.37.0` | 2023-09-26 | | ||||
| | `linux-x64`  | `1.33.2` | 2023-05-08 | | ||||
| | `linux-arm`  | `1.36.3` | 2023-08-30 | | ||||
| 
 | ||||
|  | ||||
| @ -5,6 +5,8 @@ pagination_next: solutions/input | ||||
| --- | ||||
| 
 | ||||
| import current from '/version.js'; | ||||
| import Tabs from '@theme/Tabs'; | ||||
| import TabItem from '@theme/TabItem'; | ||||
| import CodeBlock from '@theme/CodeBlock'; | ||||
| 
 | ||||
| Duktape is an embeddable JS engine written in C. It has been ported to a number | ||||
| @ -120,6 +122,7 @@ This demo was tested in the following deployments: | ||||
| | `darwin-x64` | `2.7.0` | 2023-07-24 | | ||||
| | `darwin-arm` | `2.7.0` | 2023-06-05 | | ||||
| | `win10-x64`  | `2.7.0` | 2023-07-24 | | ||||
| | `win11-arm`  | `2.7.0` | 2023-09-26 | | ||||
| | `linux-x64`  | `2.7.0` | 2023-09-22 | | ||||
| | `linux-arm`  | `2.7.0` | 2023-08-30 | | ||||
| 
 | ||||
| @ -163,16 +166,42 @@ curl -LO https://docs.sheetjs.com/duk/sheetjs.duk.c | ||||
| 
 | ||||
| 3) Compile standalone `sheetjs.duk` binary | ||||
| 
 | ||||
| <Tabs groupId="os"> | ||||
|   <TabItem value="unix" label="Linux/MacOS"> | ||||
| 
 | ||||
| ```bash | ||||
| gcc -std=c99 -Wall -osheetjs.duk sheetjs.duk.c duktape.c -lm | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="win" label="Windows"> | ||||
| 
 | ||||
| ```powershell | ||||
| cl sheetjs.duk.c duktape.c /I .\ | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
| </Tabs> | ||||
| 
 | ||||
| 4) Run the demo: | ||||
| 
 | ||||
| <Tabs groupId="os"> | ||||
|   <TabItem value="unix" label="Linux/MacOS"> | ||||
| 
 | ||||
| ```bash | ||||
| ./sheetjs.duk pres.numbers | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="win" label="Windows"> | ||||
| 
 | ||||
| ```bash | ||||
| .\sheetjs.duk.exe pres.numbers | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
| </Tabs> | ||||
| 
 | ||||
| If the program succeeded, the CSV contents will be printed to console and the | ||||
| file `sheetjsw.xlsb` will be created.  That file can be opened with Excel. | ||||
| 
 | ||||
| @ -128,6 +128,7 @@ This demo was tested in the following deployments: | ||||
| | `11.8.82`     | `darwin-arm` | macOS 13.5.1 | `clang 14.0.3`   | 2023-08-26 | | ||||
| | `11.8.82`     | `win10-x64`  | Windows 10   | `CL 19.37.32822` | 2023-08-26 | | ||||
| | `11.8.82`     | `linux-x64`  | HoloOS 3.4.8 | `gcc 12.2.0`     | 2023-08-26 | | ||||
| | `11.8.82`     | `linux-arm`  | Debian 11    | `gcc 10.2.1`     | 2023-09-26 | | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| @ -435,7 +436,7 @@ fatal: cannot set up tracking information; starting point 'refs/tags/11.8.82' is | ||||
| 6) Build the static library. | ||||
| 
 | ||||
| <Tabs groupId="triple"> | ||||
|   <TabItem value="darwin-x64" label="Intel Mac / Linux"> | ||||
|   <TabItem value="darwin-x64" label="Intel Mac"> | ||||
| 
 | ||||
| ```bash | ||||
| tools/dev/v8gen.py x64.release.sample | ||||
| @ -443,11 +444,38 @@ ninja -C out.gn/x64.release.sample v8_monolith | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="darwin-arm" label="Apple Silicon"> | ||||
|   <TabItem value="darwin-arm" label="ARM64 Mac"> | ||||
| 
 | ||||
| ```bash | ||||
| tools/dev/v8gen.py arm64.release.sample | ||||
| ninja -C out.gn/arm64.release.sample v8_monolith | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="linux-x64" label="Linux x64"> | ||||
| 
 | ||||
| ```bash | ||||
| tools/dev/v8gen.py x64.release.sample | ||||
| ninja -C out.gn/x64.release.sample v8_monolith | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="linux-arm" label="Linux ARM"> | ||||
| 
 | ||||
| ```bash | ||||
| tools/dev/v8gen.py arm64.release.sample | ||||
| ``` | ||||
| 
 | ||||
| Append the following line to `out.gn/arm64.release.sample/args.gn`: | ||||
| 
 | ||||
| ```text title="out.gn/arm64.release.sample/args.gn (add to file)" | ||||
| is_clang = false | ||||
| ``` | ||||
| 
 | ||||
| Run the build: | ||||
| 
 | ||||
| ```bash | ||||
| ninja -C out.gn/arm64.release.sample v8_monolith | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
| @ -504,7 +532,7 @@ treat_warnings_as_errors = false | ||||
| 7) Ensure the sample `hello-world` compiles and runs: | ||||
| 
 | ||||
| <Tabs groupId="triple"> | ||||
|   <TabItem value="darwin-x64" label="Intel Mac / Linux"> | ||||
|   <TabItem value="darwin-x64" label="Intel Mac"> | ||||
| 
 | ||||
| ```bash | ||||
| g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -lv8_monolith \ | ||||
| @ -514,7 +542,27 @@ g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -lv8_monolith | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="darwin-arm" label="Apple Silicon"> | ||||
|   <TabItem value="darwin-arm" label="ARM64 Mac"> | ||||
| 
 | ||||
| ```bash | ||||
| g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -lv8_monolith \ | ||||
|     -lv8_libbase -lv8_libplatform -ldl -Lout.gn/arm64.release.sample/obj/ -pthread \ | ||||
|     -std=c++17 -DV8_COMPRESS_POINTERS=1 -DV8_ENABLE_SANDBOX | ||||
| ./hello_world | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="linux-x64" label="Linux x64"> | ||||
| 
 | ||||
| ```bash | ||||
| g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -lv8_monolith \ | ||||
|     -lv8_libbase -lv8_libplatform -ldl -Lout.gn/x64.release.sample/obj/ -pthread \ | ||||
|     -std=c++17 -DV8_COMPRESS_POINTERS=1 -DV8_ENABLE_SANDBOX | ||||
| ./hello_world | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="linux-arm" label="Linux ARM"> | ||||
| 
 | ||||
| ```bash | ||||
| g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -lv8_monolith \ | ||||
| @ -572,7 +620,7 @@ cp ~/dev/v8/v8/samples/hello-world.cc . | ||||
| 10) Create symbolic links to the `include` headers and `obj` library folders: | ||||
| 
 | ||||
| <Tabs groupId="triple"> | ||||
|   <TabItem value="darwin-x64" label="Intel Mac / Linux"> | ||||
|   <TabItem value="darwin-x64" label="Intel Mac"> | ||||
| 
 | ||||
| ```bash | ||||
| ln -s ~/dev/v8/v8/include | ||||
| @ -580,7 +628,23 @@ ln -s ~/dev/v8/v8/out.gn/x64.release.sample/obj | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="darwin-arm" label="Apple Silicon"> | ||||
|   <TabItem value="darwin-arm" label="ARM64 Mac"> | ||||
| 
 | ||||
| ```bash | ||||
| ln -s ~/dev/v8/v8/include | ||||
| ln -s ~/dev/v8/v8/out.gn/arm64.release.sample/obj | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="linux-x64" label="Linux x64"> | ||||
| 
 | ||||
| ```bash | ||||
| ln -s ~/dev/v8/v8/include | ||||
| ln -s ~/dev/v8/v8/out.gn/x64.release.sample/obj | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="linux-arm" label="Linux ARM"> | ||||
| 
 | ||||
| ```bash | ||||
| ln -s ~/dev/v8/v8/include | ||||
| @ -164,16 +164,17 @@ This demo was tested in the following deployments: | ||||
| | Architecture | Jint Version      | Date       | | ||||
| |:-------------|:------------------|:-----------| | ||||
| | `darwin-x64` | `3.0.0-beta-2051` | 2023-09-16 | | ||||
| | `darwin-arm` | `3.0.0-beta-2051` | 2023-09-26 | | ||||
| | `win10-x64`  | `3.0.0-beta-2051` | 2023-09-16 | | ||||
| | `win11-arm`  | `3.0.0-beta-2051` | 2023-09-26 | | ||||
| | `linux-x64`  | `3.0.0-beta-2051` | 2023-09-22 | | ||||
| | `linux-arm`  | `3.0.0-beta-2051` | 2023-09-26 | | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| 0) Install .NET[^5] | ||||
| 
 | ||||
| ### Platform Configuration | ||||
| 
 | ||||
| 1) Set the `DOTNET_CLI_TELEMETRY_OPTOUT` environment variable to `1`. | ||||
| 0) Set the `DOTNET_CLI_TELEMETRY_OPTOUT` environment variable to `1`. | ||||
| 
 | ||||
| <details open><summary><b>How to disable telemetry</b> (click to hide)</summary> | ||||
| 
 | ||||
| @ -206,6 +207,20 @@ Click "OK" in each window (3 windows) and restart your computer. | ||||
| 
 | ||||
| </details> | ||||
| 
 | ||||
| 1) Install .NET | ||||
| 
 | ||||
| <details><summary><b>Installation Notes</b> (click to show)</summary> | ||||
| 
 | ||||
| For macOS x64 and ARM64, install with Homebrew: `brew install dotnet@6` | ||||
| 
 | ||||
| For Steam Deck Holo and other Arch Linux x64 distributions, the `dotnet-sdk` and | ||||
| `dotnet-runtime` packages should be installed using `pacman`. | ||||
| 
 | ||||
| <https://dotnet.microsoft.com/en-us/download/dotnet/6.0> is the official source | ||||
| for Windows and ARM64 Linux versions. | ||||
| 
 | ||||
| </details> | ||||
| 
 | ||||
| 2) Open a new Terminal window in macOS or PowerShell window in Windows. | ||||
| 
 | ||||
| ### Base Project | ||||
| @ -213,7 +228,6 @@ Click "OK" in each window (3 windows) and restart your computer. | ||||
| 3) Create a new folder `SheetJSJint` and a new project using the `dotnet` tool: | ||||
| 
 | ||||
| ```bash | ||||
| rm -rf SheetJSJint | ||||
| mkdir SheetJSJint | ||||
| cd SheetJSJint | ||||
| dotnet new console --framework net6.0 | ||||
| @ -331,14 +345,17 @@ If the `using Jint;` directive is omitted, the build will fail: | ||||
| 
 | ||||
| ### Standalone Application | ||||
| 
 | ||||
| 8) Find the runtime identifier (RID) for your platform[^6]. The RID values for | ||||
| 8) Find the runtime identifier (RID) for your platform[^5]. The RID values for | ||||
| tested platforms are listed below: | ||||
| 
 | ||||
| | Platform         | RID         | | ||||
| |:-----------------|:------------| | ||||
| | Intel Mac        | `osx-x64`   | | ||||
| | Windows 10 (x64) | `win10-x64` | | ||||
| | Linux (x64)      | `linux-x64` | | ||||
| | Platform         | RID           | | ||||
| |:-----------------|:--------------| | ||||
| | Intel Mac        | `osx-x64`     | | ||||
| | ARM64 Mac        | `osx-arm64`   | | ||||
| | Windows 10 (x64) | `win10-x64`   | | ||||
| | Windows 11 (ARM) | `win-arm64`   | | ||||
| | Linux (x64)      | `linux-x64`   | | ||||
| | Linux (ARM)      | `linux-arm64` | | ||||
| 
 | ||||
| 9) Build the standalone application. Replace `$RID` with the real value in: | ||||
| 
 | ||||
| @ -355,6 +372,15 @@ For Intel Mac, the RID is `osx-x64` and the command is | ||||
| 
 | ||||
| ```bash | ||||
| dotnet publish -c Release -r osx-x64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="darwin-arm" label="ARM64 Mac"> | ||||
| 
 | ||||
| For Apple Silicon, the RID is `osx-arm64` and the command is | ||||
| 
 | ||||
| ```bash | ||||
| dotnet publish -c Release -r osx-arm64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
| @ -364,6 +390,15 @@ For x64 Linux, the RID is `linux-x64` and the command is | ||||
| 
 | ||||
| ```bash | ||||
| dotnet publish -c Release -r linux-x64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="linux-arm" label="Linux ARM"> | ||||
| 
 | ||||
| For x64 Linux, the RID is `linux-arm64` and the command is | ||||
| 
 | ||||
| ```bash | ||||
| dotnet publish -c Release -r linux-arm64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
| @ -373,6 +408,15 @@ For Windows 10 x64, the RID is `win10-x64` and the command is: | ||||
| 
 | ||||
| ```powershell | ||||
| dotnet publish -c Release -r win10-x64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="win11-arm" label="Windows ARM"> | ||||
| 
 | ||||
| For Windows 11 ARM64, the RID is `win-arm64` and the command is: | ||||
| 
 | ||||
| ```powershell | ||||
| dotnet publish -c Release -r win-arm64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
| @ -394,6 +438,15 @@ For Intel Mac, the RID is `osx-x64` and the command is: | ||||
| 
 | ||||
| ```bash | ||||
| cp bin/Release/net6.0/osx-x64/publish/SheetJSJint . | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="darwin-arm" label="ARM64 Mac"> | ||||
| 
 | ||||
| For Apple Silicon, the RID is `osx-arm64` and the command is: | ||||
| 
 | ||||
| ```bash | ||||
| cp bin/Release/net6.0/osx-arm64/publish/SheetJSJint . | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
| @ -403,6 +456,15 @@ For x64 Linux, the RID is `linux-x64` and the command is | ||||
| 
 | ||||
| ```bash | ||||
| cp bin/Release/net6.0/linux-x64/publish/SheetJSJint . | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="linux-arm" label="Linux ARM"> | ||||
| 
 | ||||
| For x64 Linux, the RID is `linux-arm64` and the command is | ||||
| 
 | ||||
| ```bash | ||||
| cp bin/Release/net6.0/linux-arm64/publish/SheetJSJint . | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
| @ -412,6 +474,15 @@ For Windows 10 x64, the RID is `win10-x64` and the command is: | ||||
| 
 | ||||
| ```powershell | ||||
| copy .\bin\Release\net6.0\win10-x64\publish\SheetJSJint.exe . | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="win11-arm" label="Windows ARM"> | ||||
| 
 | ||||
| For Windows 11 ARM64, the RID is `win-arm64` and the command is: | ||||
| 
 | ||||
| ```powershell | ||||
| copy .\bin\Release\net6.0\win-arm64\publish\SheetJSJint.exe . | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
| @ -442,5 +513,4 @@ copy .\bin\Release\net6.0\win10-x64\publish\SheetJSJint.exe . | ||||
| [^2]: See [`read` in "Reading Files"](/docs/api/parse-options) | ||||
| [^3]: See [`write` in "Writing Files"](/docs/api/write-options) | ||||
| [^4]: See ["Supported Output Formats" in "Writing Files"](/docs/api/write-options#supported-output-formats) for details on `bookType` | ||||
| [^5]: At the time of writing, <https://dotnet.microsoft.com/en-us/download> is the official endpoint. For Steam Deck Holo and other Arch Linux distributions, the `dotnet-sdk` and `dotnet-runtime` packages should be installed using `pacman`. | ||||
| [^6]: See [".NET RID Catalog"](https://learn.microsoft.com/en-us/dotnet/core/rid-catalog) in the .NET documentation | ||||
| [^5]: See [".NET RID Catalog"](https://learn.microsoft.com/en-us/dotnet/core/rid-catalog) in the .NET documentation | ||||
| @ -97,7 +97,7 @@ This demo was tested in the following deployments: | ||||
| | `darwin-x64` | `28ee0ee`  | `1.19.3`   | 2023-06-05 | | ||||
| | `darwin-arm` | `28ee0ee`  | `1.20.4`   | 2023-06-05 | | ||||
| | `win10-x64`  | `81d7606`  | `1.20.2`   | 2023-08-27 | | ||||
| | `win10-arm`  | `fc55792`  | `1.21.1`   | 2023-09-25 | | ||||
| | `win11-arm`  | `fc55792`  | `1.21.1`   | 2023-09-25 | | ||||
| | `linux-x64`  | `81d7606`  | `1.21.0`   | 2023-08-27 | | ||||
| | `linux-arm`  | `3dbe69d`  | `1.21.1`   | 2023-08-30 | | ||||
| 
 | ||||
| @ -137,7 +137,7 @@ brew install icu4c cmake | ||||
| ``` | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="darwin-arm" label="Apple Silicon"> | ||||
|   <TabItem value="darwin-arm" label="ARM64 Mac"> | ||||
| 
 | ||||
| ```bash | ||||
| brew install icu4c cmake | ||||
| @ -201,7 +201,7 @@ cd .. | ||||
| ::: | ||||
| 
 | ||||
|   </TabItem> | ||||
|   <TabItem value="darwin-arm" label="Apple Silicon"> | ||||
|   <TabItem value="darwin-arm" label="ARM64 Mac"> | ||||
| 
 | ||||
| :::info pass | ||||
| 
 | ||||
| @ -117,6 +117,7 @@ This demo was tested in the following deployments: | ||||
| | `darwin-x64` | 2023-08-31 | | ||||
| | `darwin-arm` | 2023-07-05 | | ||||
| | `win10-x64`  | 2023-08-31 | | ||||
| | `win11-arm`  | 2023-09-26 | | ||||
| | `linux-x64`  | 2023-07-05 | | ||||
| | `linux-arm`  | 2023-08-30 | | ||||
| 
 | ||||
| @ -78,20 +78,7 @@ further detail. | ||||
| 
 | ||||
| Browsers have strict memory limits and large spreadsheets can exceed the limits. | ||||
| 
 | ||||
| <details><summary><b>Technical Limitations</b> (click to show)</summary> | ||||
| 
 | ||||
| V8 (Node/Chrome) have a maximum string length that has changed over the years. | ||||
| Node 16 and Chrome 106 enforce a limit of 536870888 characters. This issue will | ||||
| manifest with error messages such as `Invalid string length`. | ||||
| 
 | ||||
| There are memory bottlenecks associated with string addresses. A number of bugs | ||||
| have been reported to the V8 and Chromium projects on this subject. While those | ||||
| bugs are being resolved, for sheets containing hundreds of thousands of rows, | ||||
| dense mode worksheets should be used. | ||||
| 
 | ||||
| </details> | ||||
| 
 | ||||
| The API functions support [dense mode](/docs/csf/sheet#dense-mode): | ||||
| For large worksheets, use [dense worksheets](/docs/csf/sheet#dense-mode): | ||||
| 
 | ||||
| ```js | ||||
| var wb = XLSX.read(data, {dense: true}); // creates a dense-mode sheet | ||||
| @ -103,6 +90,48 @@ server with NodeJS or some other server-side technology. | ||||
| 
 | ||||
| If the files are small, please [report to our issue tracker](https://git.sheetjs.com/sheetjs/sheetjs/issues) | ||||
| 
 | ||||
| :::info pass | ||||
| 
 | ||||
| Sparse worksheets historically were more performant in small sheets. Due to a | ||||
| [2014 bug in V8](https://bugs.chromium.org/p/v8/issues/detail?id=3175) and a | ||||
| [2017 regression in V8](https://bugs.chromium.org/p/v8/issues/detail?id=6696) | ||||
| (the JavaScript engine powering Node and Chrome), large sparse worksheets will | ||||
| crash the web browser. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| #### "Invalid String Length" or ERR_STRING_TOO_LONG | ||||
| 
 | ||||
| V8 (Node/Chrome) have a maximum string length that has changed over the years. | ||||
| Node 16 and Chrome 106 enforce a limit of `0x1fffffe8` (536870888) characters. | ||||
| [A 2017 V8 discussion](https://bugs.chromium.org/p/v8/issues/detail?id=6148) | ||||
| explains some of the background behind the V8 decision. | ||||
| 
 | ||||
| XLSX and ODS are ZIP-based formats that store worksheets in XML entries. In | ||||
| worksheets with over 100M cells, the XML strings may exceed the V8 limit! | ||||
| 
 | ||||
| Depending on the environment, this issue may result in missing worksheets; error | ||||
| messages such as `Invalid string length`, `ERR_STRING_TOO_LONG`, or | ||||
| `Cannot create a string longer than 0x1fffffe8 characters`; or browser crashes. | ||||
| 
 | ||||
| A number of bugs have been reported to the V8 and Chromium projects on this | ||||
| subject, some of which have been open for nearly a decade. | ||||
| 
 | ||||
| Please [leave a note](https://git.sheetjs.com/sheetjs/sheetjs/issues) including | ||||
| worksheet sizes (number of rows/columns and file size) and environment (browser | ||||
| or NodeJS or other platform). | ||||
| 
 | ||||
| :::tip pass | ||||
| 
 | ||||
| The "Excel Binary Workbook" XLSB format uses a binary representation. The XLSB | ||||
| parser is not affected by this issue. | ||||
| 
 | ||||
| XLSB files are typically smaller than equivalent XLSX files. There are other | ||||
| Excel performance benefits to XLSB, so it is strongly recommended to use XLSB | ||||
| when possible. | ||||
| 
 | ||||
| ::: | ||||
| 
 | ||||
| #### Invalid HTML: could not find table | ||||
| 
 | ||||
| Data can be fetched and parsed by the library: | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user