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