Compare commits
No commits in common. "master" and "master" have entirely different histories.
@ -99,7 +99,7 @@ tables in <https://docs.sheetjs.com/docs/demos/engines/>. The component script
|
||||
### Formats Graph
|
||||
|
||||
The formats graph and legend are written in the DOT language. Rebuilding the
|
||||
graphs will require Graphviz and the "Indie Flower" font.
|
||||
graphs will require Graphviz (`brew install graphviz` on macOS)
|
||||
|
||||
## Live Demos
|
||||
|
||||
|
@ -36,13 +36,12 @@ This demo was tested in the following configurations:
|
||||
| Platform | Architecture | Date |
|
||||
|:------------------------------------------------------------------|:-------------|:-----------|
|
||||
| NVIDIA RTX 5090 (32 GB VRAM) + Ryzen Z1 Extreme (24 GB RAM) | `win11-x64` | 2025-06-17 |
|
||||
| NVIDIA RTX 5090 (32 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `linux-x64` | 2025-06-20 |
|
||||
| NVIDIA RTX 4090 (24 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `win11-x64` | 2025-04-17 |
|
||||
| NVIDIA RTX 4090 (24 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `linux-x64` | 2025-06-20 |
|
||||
| NVIDIA RTX 4090 (24 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `linux-x64` | 2025-01-28 |
|
||||
| AMD RX 7900 XTX (24 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `win11-x64` | 2025-06-20 |
|
||||
| AMD RX 7900 XTX (24 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `linux-x64` | 2025-06-21 |
|
||||
| AMD RX 7900 XTX (24 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `linux-x64` | 2025-01-29 |
|
||||
| Intel Arc B580 (12 GB VRAM) + Ryzen Z1 Extreme (24 GB RAM) | `win11-x64` | 2025-06-20 |
|
||||
| Intel Arc B580 (12 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `linux-x64` | 2025-06-21 |
|
||||
| Intel Arc B580 (12 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `linux-x64` | 2025-02-08 |
|
||||
| Apple M4 Max 16-Core CPU + 40-Core GPU (48 GB unified memory) | `darwin-arm` | 2025-03-06 |
|
||||
| Apple M3 Ultra 28-Core CPU + 60-Core GPU (96 GB unified memory) | `darwin-arm` | 2025-06-24 |
|
||||
| Apple M2 Max 12-Core CPU + 30-Core GPU (32 GB unified memory) | `darwin-arm` | 2025-03-25 |
|
||||
@ -56,7 +55,6 @@ SheetJS users have verified this demo in other configurations:
|
||||
|:---------------------------------------------------------------------|:-------------|:------------|
|
||||
| NVIDIA L40 (48 GB VRAM) + i9-13900K (32 GB RAM) | `linux-x64` | LangChainJS |
|
||||
| NVIDIA RTX 4080 SUPER (16 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `win11-x64` | LangChainJS |
|
||||
| NVIDIA RTX 4080 SUPER (16 GB VRAM) + Ryzen Z2 Go (32 GB RAM) | `linux-x64` | LangChainJS |
|
||||
| NVIDIA RTX 4070 Ti SUPER (16 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `win11-x64` | LangChainJS |
|
||||
| NVIDIA RTX 4070 Ti (12 GB VRAM) + Ryzen 7 5800x (64 GB RAM) | `win11-x64` | LangChainJS |
|
||||
| NVIDIA RTX 4060 (8 GB VRAM) + Ryzen 7 5700g (32 GB RAM) | `win11-x64` | LangChainJS |
|
||||
@ -753,7 +751,7 @@ Intel ARC GPUs require the Intel Extension for PyTorch (IPEX) and a special
|
||||
version of Ollama that ships with the associated LLM Library (IPEX-LLM).
|
||||
|
||||
<details>
|
||||
<summary><b>ARC Instructions on Windows</b> (click to show)</summary>
|
||||
<summary><b>ARC Instructions</b> (click to show)</summary>
|
||||
|
||||
These instructions are based on the official Intel recommendations.
|
||||
|
||||
@ -810,26 +808,6 @@ This window should be kept open throughout the demo.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>ARC Instructions on Linux</b> (click to show)</summary>
|
||||
|
||||
These instructions are based on the official Intel recommendations.
|
||||
|
||||
A) Install the dependencies from the [Battlemage quickstart](https://github.com/intel/ipex-llm/blob/main/docs/mddocs/Quickstart/bmg_quickstart.md#11-install-prerequisites)
|
||||
|
||||
B) Download and extract the [Ollama Portable Zip](https://github.com/intel/ipex-llm/blob/main/docs/mddocs/Quickstart/ollama_portable_zip_quickstart.md#linux-quickstart).
|
||||
|
||||
C) When this demo was last tested, the computer had an AMD processor. To force
|
||||
Ollama to use the GPU, uncomment the "single GPU" line in `start-ollama.sh`:
|
||||
|
||||
```bash title="start-ollama.sh (uncomment line)"
|
||||
export ONEAPI_DEVICE_SELECTOR=level_zero:0
|
||||
```
|
||||
|
||||
D) Run the `start-ollama.sh` script from the extracted folder.
|
||||
|
||||
</details>
|
||||
|
||||
:::
|
||||
|
||||
After installing dependencies, start a new terminal session.
|
||||
|
@ -37,20 +37,12 @@ This demo focuses on VueJS concepts. Other demos cover general deployments:
|
||||
[The "Frameworks" section](/docs/getting-started/installation/frameworks) covers
|
||||
installation with Yarn and other package managers.
|
||||
|
||||
In modern sites, the library can be imported directly from JS or JSX code:
|
||||
The library can be imported directly from JS or JSX code with:
|
||||
|
||||
```js
|
||||
import { read, utils, writeFile } from 'xlsx';
|
||||
```
|
||||
|
||||
In projects that use CommonJS, the library can be loaded with `require`:
|
||||
|
||||
```js
|
||||
var XLSX = require("xlsx");
|
||||
```
|
||||
|
||||
["Legacy Deployments"](#legacy-deployments) covers integration strategies for
|
||||
sites that require standalone scripts.
|
||||
|
||||
## Internal State
|
||||
|
||||
@ -349,29 +341,28 @@ function exportFile() {
|
||||
<td>{{ row.Name }}</td>
|
||||
<td>{{ row.Index }}</td>
|
||||
</tr>
|
||||
</tbody><tfoot><tr><td colSpan={2}>
|
||||
</tbody><tfoot><td colSpan={2}>
|
||||
<button @click="exportFile">Export XLSX</button>
|
||||
</td></tr></tfoot></table>
|
||||
</td></tfoot></table>
|
||||
</template>
|
||||
```
|
||||
|
||||
<details open>
|
||||
<summary><b>How to run the example</b> (click to hide)</summary>
|
||||
|
||||
<Tabs groupId="starter">
|
||||
<TabItem name="vite" value="ViteJS">
|
||||
|
||||
:::note Tested Deployments
|
||||
|
||||
This demo was tested in the following environments:
|
||||
|
||||
| VueJS | Deployment | Date |
|
||||
|:---------|:----------------|:-----------|
|
||||
| `3.5.17` | ViteJS `7.0.0` | 2025-06-29 |
|
||||
| `3.5.17` | NuxtJS `3.17.5` | 2025-06-29 |
|
||||
| VueJS | ViteJS | Date |
|
||||
|:---------|:---------|:-----------|
|
||||
| `3.5.13` | `6.1.0` | 2025-02-15 |
|
||||
|
||||
:::
|
||||
|
||||
<Tabs groupId="starter">
|
||||
<TabItem name="vite" value="ViteJS">
|
||||
|
||||
1) Create a new site:
|
||||
|
||||
```bash
|
||||
@ -387,7 +378,7 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz
|
||||
npm run dev`}
|
||||
</CodeBlock>
|
||||
|
||||
3) Access the "Local" URL (typically `http://localhost:5173`) in a web browser.
|
||||
3) Open a web browser and access the displayed URL (`http://localhost:5173`)
|
||||
|
||||
4) Replace `src/App.vue` with the `src/SheetJSVueAoO.vue` example.
|
||||
|
||||
@ -415,10 +406,20 @@ and test the page.
|
||||
</TabItem>
|
||||
<TabItem name="nuxt" value="NuxtJS">
|
||||
|
||||
:::note Tested Deployments
|
||||
|
||||
This demo was tested in the following environments:
|
||||
|
||||
| VueJS | NuxtJS | Date |
|
||||
|:---------|:---------|:-----------|
|
||||
| `3.5.13` | `3.15.0` | 2025-01-02 |
|
||||
|
||||
:::
|
||||
|
||||
1) Create a new site:
|
||||
|
||||
```bash
|
||||
npx nuxi@latest init sheetjs-nuxt --packageManager npm --no-install --no-gitInit -M ,
|
||||
npx nuxi@latest init sheetjs-nuxt --packageManager npm --no-install --no-gitInit
|
||||
```
|
||||
|
||||
2) Install the SheetJS dependency and start the dev server:
|
||||
@ -430,7 +431,7 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz
|
||||
npm run dev`}
|
||||
</CodeBlock>
|
||||
|
||||
3) Access the "Local" URL (typically `http://localhost:3000`) in a web browser.
|
||||
3) Open a web browser and access the displayed URL (`http://localhost:3000`)
|
||||
|
||||
4) Replace `app.vue` with the `src/SheetJSVueAoO.vue` example.
|
||||
|
||||
@ -510,20 +511,19 @@ function exportFile() {
|
||||
<details open>
|
||||
<summary><b>How to run the example</b> (click to hide)</summary>
|
||||
|
||||
<Tabs groupId="starter">
|
||||
<TabItem name="vite" value="ViteJS">
|
||||
|
||||
:::note Tested Deployments
|
||||
|
||||
This demo was tested in the following environments:
|
||||
|
||||
| VueJS | Deployment | Date |
|
||||
|:---------|:----------------|:-----------|
|
||||
| `3.5.17` | ViteJS `7.0.0` | 2025-06-29 |
|
||||
| `3.5.17` | NuxtJS `3.17.5` | 2025-06-29 |
|
||||
| VueJS | ViteJS | Date |
|
||||
|:---------|:--------|:-----------|
|
||||
| `3.5.13` | `6.0.7` | 2025-01-02 |
|
||||
|
||||
:::
|
||||
|
||||
<Tabs groupId="starter">
|
||||
<TabItem name="vite" value="ViteJS">
|
||||
|
||||
1) Create a new site:
|
||||
|
||||
```bash
|
||||
@ -539,7 +539,7 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz
|
||||
npm run dev`}
|
||||
</CodeBlock>
|
||||
|
||||
3) Access the "Local" URL (typically `http://localhost:5173`) in a web browser.
|
||||
3) Open a web browser and access the displayed URL (`http://localhost:5173`)
|
||||
|
||||
4) Replace `src/App.vue` with the `src/SheetJSVueHTML.vue` example.
|
||||
|
||||
@ -567,10 +567,20 @@ and test the page.
|
||||
</TabItem>
|
||||
<TabItem name="nuxt" value="NuxtJS">
|
||||
|
||||
:::note Tested Deployments
|
||||
|
||||
This demo was tested in the following environments:
|
||||
|
||||
| VueJS | NuxtJS | Date |
|
||||
|:---------|:---------|:-----------|
|
||||
| `3.5.13` | `3.15.0` | 2025-01-02 |
|
||||
|
||||
:::
|
||||
|
||||
1) Create a new site:
|
||||
|
||||
```bash
|
||||
npx nuxi@latest init sheetjs-nuxt --packageManager npm --no-install --no-gitInit -M ,
|
||||
npx nuxi@latest init sheetjs-nuxt --packageManager npm --no-install --no-gitInit
|
||||
```
|
||||
|
||||
2) Install the SheetJS dependency and start the dev server:
|
||||
@ -582,7 +592,7 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz
|
||||
npm run dev`}
|
||||
</CodeBlock>
|
||||
|
||||
3) Access the "Local" URL (typically `http://localhost:3000`) in a web browser.
|
||||
3) Open a web browser and access the displayed URL (`http://localhost:3000`)
|
||||
|
||||
4) Replace `app.vue` with the `src/SheetJSVueHTML.vue` example.
|
||||
|
||||
|
@ -204,24 +204,23 @@ This demo was tested in the following environments:
|
||||
|
||||
| `esbuild` | Date |
|
||||
|:----------|:-----------|
|
||||
| `0.25.5` | 2025-06-20 |
|
||||
| `0.24.2` | 2025-06-20 |
|
||||
| `0.23.1` | 2025-06-20 |
|
||||
| `0.22.0` | 2025-06-20 |
|
||||
| `0.21.5` | 2025-06-20 |
|
||||
| `0.20.2` | 2025-06-20 |
|
||||
| `0.19.12` | 2025-06-20 |
|
||||
| `0.18.20` | 2025-06-20 |
|
||||
| `0.17.19` | 2025-06-20 |
|
||||
| `0.16.17` | 2025-06-20 |
|
||||
| `0.15.18` | 2025-06-20 |
|
||||
| `0.14.54` | 2025-06-20 |
|
||||
| `0.13.15` | 2025-06-20 |
|
||||
| `0.12.29` | 2025-06-20 |
|
||||
| `0.11.23` | 2025-06-20 |
|
||||
| `0.10.2` | 2025-06-20 |
|
||||
| `0.9.7` | 2025-06-20 |
|
||||
| `0.9.1` | 2025-06-20 |
|
||||
| `0.24.2` | 2025-01-07 |
|
||||
| `0.23.1` | 2025-01-07 |
|
||||
| `0.22.0` | 2025-01-07 |
|
||||
| `0.21.5` | 2025-01-07 |
|
||||
| `0.20.2` | 2025-01-07 |
|
||||
| `0.19.12` | 2025-01-07 |
|
||||
| `0.18.20` | 2025-01-07 |
|
||||
| `0.17.19` | 2025-01-07 |
|
||||
| `0.16.17` | 2025-01-07 |
|
||||
| `0.15.18` | 2025-01-07 |
|
||||
| `0.14.54` | 2025-01-07 |
|
||||
| `0.13.15` | 2025-01-07 |
|
||||
| `0.12.29` | 2025-01-07 |
|
||||
| `0.11.23` | 2025-01-07 |
|
||||
| `0.10.2` | 2025-01-07 |
|
||||
| `0.9.7` | 2025-01-07 |
|
||||
| `0.9.1` | 2025-01-07 |
|
||||
|
||||
:::
|
||||
|
||||
|
@ -242,7 +242,7 @@ This demo was tested in the following environments:
|
||||
| Android 34 | Pixel 3a | `0.76.8` | `darwin-arm` | 2025-03-26 |
|
||||
| iOS 18.3 | iPhone 16 Pro | `0.76.8` | `darwin-arm` | 2025-03-26 |
|
||||
| Android 35 | Pixel 9 Pro XL | `0.79.2` | `win11-x64` | 2025-06-08 |
|
||||
| Android 36 | Pixel 9 | `0.79.2` | `linux-x64` | 2025-07-06 |
|
||||
| Android 35 | Pixel 9 | `0.76.5` | `linux-x64` | 2025-01-02 |
|
||||
|
||||
:::
|
||||
|
||||
@ -259,22 +259,12 @@ Make sure you can run a basic test app on your phone/simulator before continuing
|
||||
<details>
|
||||
<summary><b>Installation Notes</b> (click to show)</summary>
|
||||
|
||||
**Java JDK**
|
||||
|
||||
On the Steam Deck, JDK17 was installed using `pacman`:
|
||||
|
||||
```bash
|
||||
sudo pacman -Syu jdk17-openjdk
|
||||
```
|
||||
|
||||
Debian and Ubuntu require the `openjdk-17-jdk` package:
|
||||
|
||||
```bash
|
||||
sudo apt install openjdk-17-jdk
|
||||
```
|
||||
|
||||
**Android Studio for Linux**
|
||||
|
||||
[The Android Studio tarball](https://developer.android.com/studio) was
|
||||
downloaded and extracted. After extracting:
|
||||
|
||||
@ -286,8 +276,6 @@ cd ./android-studio/bin
|
||||
In Android Studio, select "SDK Manager" and switch to the "SDK Tools" tab. Check
|
||||
"Show Package Details" and install "Android SDK Command-line Tools (latest)".
|
||||
|
||||
**Environment Variables for Linux**
|
||||
|
||||
When this demo was last tested, the following environment variables were used:
|
||||
|
||||
```bash
|
||||
@ -402,8 +390,8 @@ the interactive CLI tool:
|
||||
npx react-native start
|
||||
```
|
||||
|
||||
Once the dev server is ready, the terminal will display a few options. Press
|
||||
<kbd>r</kbd> to relaod the app.
|
||||
Once the dev server is ready, the terminal will display a few options. Press `a`
|
||||
to run on Android.
|
||||
|
||||
:::
|
||||
|
||||
@ -1144,7 +1132,7 @@ This demo was tested in the following environments:
|
||||
| Android 34 | Pixel 3a | `0.76.5` | `darwin-arm` | 2025-01-05 |
|
||||
| iOS 18.2 | iPhone 16 Pro | `0.76.5` | `darwin-arm` | 2025-01-05 |
|
||||
| Android 35 | Pixel 9 Pro XL | `0.76.5` | `win11-x64` | 2025-06-08 |
|
||||
| Android 36 | Pixel 9 | `0.76.5` | `linux-x64` | 2025-07-06 |
|
||||
| Android 35 | Pixel 9 | `0.76.5` | `linux-x64` | 2025-01-02 |
|
||||
|
||||
:::
|
||||
|
||||
@ -1229,20 +1217,6 @@ The app should look like the following screenshot:
|
||||
|
||||

|
||||
|
||||
:::info pass
|
||||
|
||||
On Linux, the command may silently stall. It is strongly recommended to launch
|
||||
the interactive CLI tool:
|
||||
|
||||
```bash
|
||||
npx react-native start
|
||||
```
|
||||
|
||||
Once the dev server is ready, the terminal will display a few options. Press
|
||||
<kbd>r</kbd> to relaod the app.
|
||||
|
||||
:::
|
||||
|
||||
:::caution pass
|
||||
|
||||
In some test runs on Windows, the build failed with an error:
|
||||
|
@ -66,7 +66,7 @@ This demo was tested in the following environments:
|
||||
| Android 35 | Pixel 9 Pro XL | `8.9.2` | `darwin-x64` | 2025-05-06 |
|
||||
| iOS 18.4 | iPhone 16 Pro Max | `8.9.2` | `darwin-x64` | 2025-05-06 |
|
||||
| Android 35 | Pixel 9 | `8.9.2` | `win11-x64` | 2025-06-08 |
|
||||
| Android 36 | Pixel 9 | `8.9.2` | `linux-x64` | 2025-07-06 |
|
||||
| Android 35 | Pixel 9 | `8.8.3` | `linux-x64` | 2025-01-02 |
|
||||
|
||||
:::
|
||||
|
||||
@ -611,7 +611,7 @@ adb root
|
||||
adb pull /data/user/0/org.nativescript.SheetJSNS/files/SheetJSNS.xls SheetJSNS.xls
|
||||
```
|
||||
|
||||
If the emulator cannot be rooted, the following workaround should be used:
|
||||
If the emulator cannot be rooted, the following command works in macOS:
|
||||
|
||||
```bash
|
||||
adb shell "run-as org.nativescript.SheetJSNS cat /data/user/0/org.nativescript.SheetJSNS/files/SheetJSNS.xls" > SheetJSNS.xls
|
||||
@ -655,7 +655,7 @@ id | name | role
|
||||
adb push SheetJSNS.xls /data/user/0/org.nativescript.SheetJSNS/files/SheetJSNS.xls
|
||||
```
|
||||
|
||||
If the emulator cannot be rooted, raw byte operations work in macOS and Linux:
|
||||
If the emulator cannot be rooted, the following command works in macOS:
|
||||
|
||||
```bash
|
||||
dd if=SheetJSNS.xls | adb shell "run-as org.nativescript.SheetJSNS dd of=/data/user/0/org.nativescript.SheetJSNS/files/SheetJSNS.xls"
|
||||
|
@ -54,7 +54,7 @@ This demo was tested in the following environments:
|
||||
| Android 34 | Pixel 3a | `7.1.0` / `7.0.0` | `darwin-arm` | 2025-03-30 |
|
||||
| iOS 18.2 | iPhone 16 Pro Max | `7.1.0` / `7.0.0` | `darwin-arm` | 2025-03-30 |
|
||||
| Android 35 | Pixel 9 Pro XL | `7.3.0` / `7.1.1` | `win11-x64` | 2025-06-08 |
|
||||
| Android 36 | Pixel 9 | `7.4.1` / `7.1.2` | `linux-x64` | 2025-07-06 |
|
||||
| Android 35 | Pixel 9 | `6.2.0` / `6.0.2` | `linux-x64` | 2025-01-02 |
|
||||
|
||||
:::
|
||||
|
||||
@ -212,16 +212,12 @@ iOS development is only supported on macOS.
|
||||
|
||||
:::
|
||||
|
||||
<details open>
|
||||
<details>
|
||||
<summary><b>Installation Notes</b> (click to show)</summary>
|
||||
|
||||
For Android development, CapacitorJS requires a Java version compatible with the
|
||||
expected Gradle version:
|
||||
|
||||
| CapacitorJS | Gradle | Java |
|
||||
|:------------|:---------|:-----|
|
||||
| `6.2.0` | `8.2.1` | 20 |
|
||||
| `7.4.1` | `8.11.1` | 21 |
|
||||
expected Gradle version. When this demo was tested against CapacitorJS `6.2.0`,
|
||||
Java 20 was required to support Gradle `8.2.1`.
|
||||
|
||||
</details>
|
||||
|
||||
@ -253,22 +249,6 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz
|
||||
npm i --save @capacitor/core @capacitor/cli @capacitor/filesystem`}
|
||||
</CodeBlock>
|
||||
|
||||
:::warning pass
|
||||
|
||||
When this demo was last tested, parts of the official project required ViteJS 6
|
||||
and other parts required ViteJS 7. The install failed.
|
||||
|
||||
**This is a bug in the Svelte integration!**
|
||||
|
||||
Until the bug is fixed, the `--force` option should be used:
|
||||
|
||||
<CodeBlock language="bash">{`\
|
||||
npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz --force
|
||||
npm i --save @capacitor/core @capacitor/cli @capacitor/filesystem --force`}
|
||||
</CodeBlock>
|
||||
|
||||
:::
|
||||
|
||||
4) Create CapacitorJS structure:
|
||||
|
||||
```bash
|
||||
@ -278,7 +258,7 @@ npm run build
|
||||
|
||||
:::note pass
|
||||
|
||||
If prompted to create an Ionic account, Press <kbd>N</kbd> to opt out.
|
||||
If prompted to create an Ionic account, type `N` and press <kbd>Enter</kbd>.
|
||||
|
||||
:::
|
||||
|
||||
@ -297,22 +277,6 @@ npm i --save @capacitor/android
|
||||
npx cap add android
|
||||
```
|
||||
|
||||
:::warning pass
|
||||
|
||||
When this demo was last tested, parts of the official project required ViteJS 6
|
||||
and other parts required ViteJS 7. The install failed.
|
||||
|
||||
**This is a bug in the Svelte integration!**
|
||||
|
||||
Until the bug is fixed, the `--force` option should be used:
|
||||
|
||||
```bash
|
||||
npm i --save @capacitor/android --force
|
||||
npx cap add android
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
:::caution pass
|
||||
|
||||
If the wrong Java version is installed, the last command will fail with a
|
||||
|
@ -211,7 +211,7 @@ This demo was tested in the following environments:
|
||||
| macOS 14.5 | `darwin-arm` | `35.1.2` | 2025-03-30 |
|
||||
| Windows 11 | `win11-x64` | `33.2.1` | 2025-02-11 |
|
||||
| Windows 11 | `win11-arm` | `33.2.1` | 2025-02-23 |
|
||||
| Linux (Ubuntu) | `linux-x64` | `35.1.2` | 2025-07-06 |
|
||||
| Linux (HoloOS) | `linux-x64` | `33.2.1` | 2025-01-02 |
|
||||
| Linux (Debian) | `linux-arm` | `33.2.1` | 2025-02-16 |
|
||||
|
||||
:::
|
||||
@ -284,28 +284,6 @@ npx -y electron .
|
||||
|
||||
The app will run.
|
||||
|
||||
:::info pass
|
||||
|
||||
In some Linux deployments, the command will fail with a sandbox error:
|
||||
|
||||
```
|
||||
The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now.
|
||||
```
|
||||
|
||||
The workaround is to temporarily disable the sandbox restriction:
|
||||
|
||||
```bash
|
||||
sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
|
||||
```
|
||||
|
||||
After testing, the restriction can be re-enabled with a similar command:
|
||||
|
||||
```bash
|
||||
sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=1
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
4) To build a standalone app, run the builder:
|
||||
|
||||
```bash
|
||||
|
@ -125,7 +125,7 @@ This demo was tested in the following environments:
|
||||
| macOS 14.5 | `darwin-arm` | `0.94.0` | 2025-03-30 | |
|
||||
| Windows 11 | `win11-x64` | `0.100.0` | 2025-05-27 | |
|
||||
| Windows 11 | `win11-arm` | `0.94.0` | 2025-02-23 | |
|
||||
| Linux (Ubuntu) | `linux-x64` | `0.101.2` | 2025-07-06 | |
|
||||
| Linux (HoloOS) | `linux-x64` | `0.89.0` | 2025-01-10 | |
|
||||
| Linux (Debian) | `linux-arm` | `0.60.0` | 2025-02-16 | Unofficial build[^1] |
|
||||
|
||||
:::
|
||||
@ -146,7 +146,7 @@ cd sheetjs-nwjs
|
||||
"version": "0.0.0",
|
||||
"main": "index.html",
|
||||
"dependencies": {
|
||||
"nw": "0.101.2",
|
||||
"nw": "0.100.0",
|
||||
"xlsx": "https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz"
|
||||
}
|
||||
}`}
|
||||
@ -224,7 +224,7 @@ Unfortunately `nw-builder` will not be able to build a standalone program.
|
||||
5) To build a standalone app, run the builder:
|
||||
|
||||
```bash
|
||||
npx -p nw-builder@4.13.14 nwbuild --mode=build --version=0.101.2 --glob=false --outDir=../out ./
|
||||
npx -p nw-builder@4.11.6 nwbuild --mode=build --version=0.100.0 --glob=false --outDir=../out ./
|
||||
```
|
||||
|
||||
This will generate the standalone app in the `..\out\` folder.
|
||||
@ -235,10 +235,6 @@ There is a regression in `nw-builder` versions `4.12.0` and `4.13.14`.
|
||||
|
||||
In local `win11-x64` testing, `4.11.6` generates the standalone application.
|
||||
|
||||
```bash
|
||||
npx -p nw-builder@4.11.6 nwbuild --mode=build --version=0.101.2 --glob=false --outDir=../out ./
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
6) Launch the generated application:
|
||||
|
@ -64,7 +64,7 @@ This demo was tested in the following environments:
|
||||
| macOS 14.5 | `darwin-arm` | `v2.10.1` | 2025-03-30 |
|
||||
| Windows 11 | `win11-x64` | `v2.10.1` | 2025-05-27 |
|
||||
| Windows 11 | `win11-arm` | `v2.10` | 2025-02-23 |
|
||||
| Linux (HoloOS) | `linux-x64` | `v2.10.2` | 2025-07-06 |
|
||||
| Linux (HoloOS) | `linux-x64` | `v2.9.2` | 2025-01-02 |
|
||||
| Linux (Debian) | `linux-arm` | `v2.10` | 2025-02-16 |
|
||||
|
||||
:::
|
||||
|
@ -60,7 +60,7 @@ This demo was tested in the following environments:
|
||||
| macOS 14.5 | `darwin-arm` | `v1.6.0` | 2025-03-30 |
|
||||
| Windows 11 | `win11-x64` | `v1.6.0` | 2025-05-27 |
|
||||
| Windows 11 | `win11-arm` | `v1.6.0` | 2025-02-23 |
|
||||
| Linux (HoloOS) | `linux-x64` | `v1.6.0` | 2025-07-06 |
|
||||
| Linux (HoloOS) | `linux-x64` | `v1.6.0` | 2025-01-02 |
|
||||
| Linux (Debian) | `linux-arm` | `v1.6.0` | 2025-05-27 |
|
||||
|
||||
:::
|
||||
@ -376,7 +376,7 @@ At a high level, the following software is required for building Tauri apps:
|
||||
The platform configuration can be verified by running:
|
||||
|
||||
```bash
|
||||
npx @tauri-apps/cli@1 info
|
||||
npx @tauri-apps/cli info
|
||||
```
|
||||
|
||||
If required dependencies are installed, the output will show a checkmark next to
|
||||
|
@ -55,7 +55,7 @@ This demo was tested in the following environments:
|
||||
| macOS 14.5 | `darwin-arm` | `6.0.0` | `6.0.0` | 2025-03-30 |
|
||||
| Windows 11 | `win11-x64` | `6.1.0` | `6.1.0` | 2025-05-27 |
|
||||
| Windows 11 | `win11-arm` | `5.6.0` | `5.6.0` | 2025-02-23 |
|
||||
| Linux (HoloOS) | `linux-x64` | `6.1.0` | `6.1.0` | 2025-07-06 |
|
||||
| Linux (HoloOS) | `linux-x64` | `5.5.0` | `5.5.0` | 2025-01-02 |
|
||||
| Linux (Debian) | `linux-arm` | `5.6.0` | `5.6.0` | 2025-02-16 |
|
||||
|
||||
NeutralinoJS on Windows on ARM generates X64 binaries that run using the X64
|
||||
|
@ -466,15 +466,15 @@ This browser demo was tested in the following environments:
|
||||
|
||||
| Browser | Date |
|
||||
|:-------------|:-----------|
|
||||
| Chromium 137 | 2025-06-20 |
|
||||
| Chromium 131 | 2025-01-07 |
|
||||
|
||||
Some lesser-used browsers do not support File System Access API:
|
||||
|
||||
| Browser | Date |
|
||||
|:-------------|:-----------|
|
||||
| Safari 18.5 | 2025-06-20 |
|
||||
| Safari 17.5 | 2025-01-07 |
|
||||
| Konqueror 22 | 2025-04-23 |
|
||||
| Firefox 139 | 2025-06-20 |
|
||||
| Firefox 133 | 2025-01-07 |
|
||||
|
||||
:::
|
||||
|
||||
|
@ -53,11 +53,11 @@ This demo was tested in the following deployments:
|
||||
|
||||
| Architecture | Version | Date |
|
||||
|:-------------|:------------------|:-----------|
|
||||
| `darwin-x64` | `18.5` (StataNow) | 2025-06-20 |
|
||||
| `darwin-x64` | `18.5` (StataNow) | 2025-01-08 |
|
||||
| `darwin-arm` | `18.5` (StataNow) | 2025-04-24 |
|
||||
| `win11-x64` | `18.5` (StataNow) | 2025-04-28 |
|
||||
| `win11-arm` | `18.5` (StataNow) | 2025-02-23 |
|
||||
| `linux-x64` | `19.5` (StataNow) | 2025-07-06 |
|
||||
| `linux-x64` | `18.5` (StataNow) | 2025-01-09 |
|
||||
|
||||
:::
|
||||
|
||||
@ -203,7 +203,7 @@ import excel "sheetjs.tmp.xlsx", firstrow
|
||||
|
||||
1) Open Stata and run the following command:
|
||||
|
||||
```stata title="Find Stata data directory (run in Stata)"
|
||||
```stata
|
||||
pwd
|
||||
```
|
||||
|
||||
@ -213,7 +213,7 @@ The output will be the default data directory. On macOS this is typically
|
||||
2) Open a terminal window and create a project folder `sheetjs-stata` within the
|
||||
Stata data directory:
|
||||
|
||||
```bash title="Create folder in Stata data directory (run in terminal)"
|
||||
```bash
|
||||
: # `cd` to the Stata data directory
|
||||
cd ~/Documents/Stata
|
||||
mkdir sheetjs-stata
|
||||
@ -252,7 +252,7 @@ bash
|
||||
3) Download [`stplugin.c`](https://www.stata.com/plugins/stplugin.c) and
|
||||
[`stplugin.h`](https://www.stata.com/plugins/stplugin.h) from the Stata website:
|
||||
|
||||
```bash title="Download Stata plugin files (run in terminal)"
|
||||
```bash
|
||||
curl -LO https://www.stata.com/plugins/stplugin.c
|
||||
curl -LO https://www.stata.com/plugins/stplugin.h
|
||||
```
|
||||
@ -276,7 +276,7 @@ curl -LO https://docs.sheetjs.com/plugins/stplugin.h
|
||||
4) Download Duktape. In Windows, the following commands should be run in WSL. In
|
||||
macOS, the commands should be run in the same Terminal session.
|
||||
|
||||
```bash title="Download Duktape (run in terminal)"
|
||||
```bash
|
||||
curl -LO https://duktape.org/duktape-2.7.0.tar.xz
|
||||
tar -xJf duktape-2.7.0.tar.xz
|
||||
mv duktape-2.7.0/src/*.{c,h} .
|
||||
@ -287,7 +287,7 @@ mv duktape-2.7.0/src/*.{c,h} .
|
||||
In Windows, the following commands should be run in WSL. In macOS, the commands
|
||||
should be run in the same Terminal session.
|
||||
|
||||
```bash title="Download plugin source (run in terminal)"
|
||||
```bash
|
||||
curl -LO https://docs.sheetjs.com/stata/cleanfile.c
|
||||
```
|
||||
|
||||
@ -298,7 +298,7 @@ curl -LO https://docs.sheetjs.com/stata/cleanfile.c
|
||||
|
||||
7) Build the plugin:
|
||||
|
||||
```bash title="Build plugin (run in terminal)"
|
||||
```bash
|
||||
gcc -shared -fPIC -DSYSTEM=APPLEMAC stplugin.c duktape.c cleanfile.c -lm -std=c99 -Wall -ocleanfile.plugin
|
||||
```
|
||||
|
||||
@ -329,7 +329,7 @@ cl /LD cleanfile.c stplugin.c duktape.c
|
||||
|
||||
8) Copy the plugin to the Stata data directory:
|
||||
|
||||
```bash title="Copy compiled plugin to Stata data directory (run in terminal)"
|
||||
```bash
|
||||
cp cleanfile.plugin ../
|
||||
```
|
||||
|
||||
@ -354,7 +354,7 @@ copy cleanfile.dll c:\data\cleanfile.plugin
|
||||
|
||||
9) Move to the Stata data directory:
|
||||
|
||||
```bash title="Move to Stata data directory (run in terminal)"
|
||||
```bash
|
||||
cd ..
|
||||
```
|
||||
|
||||
@ -383,7 +383,7 @@ bash
|
||||
In Windows, the following commands should be run in WSL. In macOS, the commands
|
||||
should be run in the same Terminal session.
|
||||
|
||||
<CodeBlock language="bash" title="Download SheetJS Scripts and files (run in terminal)">{`\
|
||||
<CodeBlock language="bash">{`\
|
||||
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js
|
||||
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
|
||||
curl -LO https://docs.sheetjs.com/pres.numbers`}
|
||||
@ -404,7 +404,7 @@ The screenshot in the introduction shows the result of steps 13 - 19
|
||||
|
||||
13) Run the following command in Stata:
|
||||
|
||||
```stata title="List files in data directory (run in Stata)"
|
||||
```stata
|
||||
dir
|
||||
```
|
||||
|
||||
@ -424,13 +424,13 @@ cd c:\data
|
||||
|
||||
14) Load the `cleanfile` plugin:
|
||||
|
||||
```stata title="Load the new plugin (run in Stata)"
|
||||
```stata
|
||||
program cleanfile, plugin
|
||||
```
|
||||
|
||||
16) Read the `pres.numbers` test file:
|
||||
|
||||
```stata title="Run the plugin (run in Stata)"
|
||||
```stata
|
||||
plugin call cleanfile, "pres.numbers" verbose
|
||||
```
|
||||
|
||||
@ -453,13 +453,13 @@ for more help, see <span {...b}>import excel</span>
|
||||
|
||||
17) Close the plugin:
|
||||
|
||||
```stata title="Close the plugin (run in Stata)"
|
||||
```stata
|
||||
program drop cleanfile
|
||||
```
|
||||
|
||||
18) Clear the current session:
|
||||
|
||||
```stata title="Clear the current session (run in Stata)"
|
||||
```stata
|
||||
clear
|
||||
```
|
||||
|
||||
@ -468,7 +468,7 @@ excel "sheetjs.tmp.xlsx", firstrow</span></code></p></li></ol>
|
||||
|
||||
Alternatively, manually type the command:
|
||||
|
||||
```stata title="Load the file created by the SheetJS plugin (run in Stata)"
|
||||
```stata
|
||||
import excel "sheetjs.tmp.xlsx", firstrow
|
||||
```
|
||||
|
||||
@ -481,24 +481,25 @@ The output will show the import result:
|
||||
|
||||
20) List the dataset:
|
||||
|
||||
```stata title="List the new variables (run in Stata)"
|
||||
```stata
|
||||
list Name Index
|
||||
```
|
||||
|
||||
The result should match the following listing:
|
||||
|
||||
<pre>
|
||||
. list Name Index<br/>
|
||||
{' '}+----------------------+
|
||||
{' '}| Name Index |
|
||||
{' '}|----------------------|
|
||||
{' '}1. | Bill Clinton 42 |
|
||||
{' '}2. | GeorgeW Bush 43 |
|
||||
{' '}3. | Barack Obama 44 |
|
||||
{' '}4. | Donald Trump 45 |
|
||||
{' '}5. | Joseph Biden 46 |
|
||||
{' '}+----------------------+
|
||||
</pre>
|
||||
```
|
||||
. list Name Index
|
||||
|
||||
+----------------------+
|
||||
| Name Index |
|
||||
|----------------------|
|
||||
1. | Bill Clinton 42 |
|
||||
2. | GeorgeW Bush 43 |
|
||||
3. | Barack Obama 44 |
|
||||
4. | Donald Trump 45 |
|
||||
5. | Joseph Biden 46 |
|
||||
+----------------------+
|
||||
```
|
||||
|
||||
In the Stata GUI, the Data Editor should match the following screenshot:
|
||||
|
||||
|
@ -8,8 +8,6 @@ sidebar_custom_props:
|
||||
---
|
||||
|
||||
import current from '/version.js';
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
import CodeBlock from '@theme/CodeBlock';
|
||||
|
||||
[Maple](https://www.maplesoft.com/products/Maple/) is a numeric computing
|
||||
@ -38,8 +36,8 @@ This demo was tested by SheetJS users in the following deployments:
|
||||
|
||||
| Architecture | Version | Date |
|
||||
|:-------------|:---------|:-----------|
|
||||
| `darwin-x64` | `2025.1` | 2025-06-20 |
|
||||
| `win11-x64` | `2025.1` | 2025-07-17 |
|
||||
| `darwin-x64` | `2024.0` | 2025-01-10 |
|
||||
| `win11-x64` | `2024.2` | 2025-05-07 |
|
||||
|
||||
:::
|
||||
|
||||
@ -136,20 +134,6 @@ with(ExcelTools);
|
||||
Import(SheetToXLSX("pres.numbers"))
|
||||
```
|
||||
|
||||
<Tabs groupId="triple">
|
||||
<TabItem value="darwin-x64" label="MacOS">
|
||||
|
||||
1) Open a new Terminal window and create the `/tmp/sheetjs-maple` folder:
|
||||
|
||||
```bash
|
||||
cd /tmp
|
||||
mkdir sheetjs-maple
|
||||
cd sheetjs-maple
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win11-x64" label="Windows">
|
||||
|
||||
0) Install "Windows Subsystem for Linux" (WSL)[^5] and Visual Studio[^6].
|
||||
|
||||
1) Open a new "x64 Native Tools Command Prompt" window and create a project
|
||||
@ -161,40 +145,20 @@ mkdir sheetjs-maple
|
||||
cd sheetjs-maple
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
2) Copy the headers and `lib` files from the Maple folder to the project folder.
|
||||
The headers will be placed in the `extern/include/` folder in the Maple folder.
|
||||
The `lib` files are placed in a platform-specific `bin` folder.
|
||||
|
||||
<Tabs groupId="triple">
|
||||
<TabItem value="darwin-x64" label="MacOS">
|
||||
|
||||
In macOS, the "Maple folder" is located in `/Library/Frameworks`:
|
||||
|
||||
```bash
|
||||
cp /Library/Frameworks/Maple.framework/Versions/2025/extern/include/*.h .
|
||||
cp /Library/Frameworks/Maple.framework/Versions/2025/bin.APPLE_UNIVERSAL_OSX/*.so .
|
||||
cp /Library/Frameworks/Maple.framework/Versions/2025/bin.APPLE_UNIVERSAL_OSX/*.dylib .
|
||||
```
|
||||
|
||||
3) Observe that macOS does not need a "Linux Subsystem" and move to Step 4.
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win11-x64" label="Windows">
|
||||
The following commands apply to x64 versions of Windows:
|
||||
|
||||
```powershell
|
||||
copy "C:\Program Files\Maple 2025\extern\include\"*.h .
|
||||
copy "C:\Program Files\Maple 2025\bin.x86_64_WINDOWS"\*.lib .
|
||||
copy "C:\Program Files\Maple 2024\extern\include\"*.h .
|
||||
copy "c:\Program Files\Maple 2024\bin.x86_64_WINDOWS"\*.lib .
|
||||
```
|
||||
|
||||
3) Run `bash` to enter WSL
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
4) Install Duktape:
|
||||
4) Within WSL, install Duktape:
|
||||
|
||||
```bash
|
||||
curl -LO https://duktape.org/duktape-2.7.0.tar.xz
|
||||
@ -202,7 +166,7 @@ tar -xJf duktape-2.7.0.tar.xz
|
||||
mv duktape-2.7.0/src/*.{c,h} .
|
||||
```
|
||||
|
||||
5) Download SheetJS scripts and the test file.
|
||||
5) Still within WSL, download SheetJS scripts and the test file.
|
||||
|
||||
<CodeBlock language="bash">{`\
|
||||
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js
|
||||
@ -210,26 +174,12 @@ curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
|
||||
curl -LO https://docs.sheetjs.com/pres.numbers`}
|
||||
</CodeBlock>
|
||||
|
||||
6) Download the extension C code
|
||||
6) Still within WSL, download the extension C code
|
||||
|
||||
```bash
|
||||
curl -LO https://docs.sheetjs.com/maple/sheetjs-maple.c
|
||||
```
|
||||
|
||||
<Tabs groupId="triple">
|
||||
<TabItem value="darwin-x64" label="MacOS">
|
||||
|
||||
7) Observe that macOS does not need a "Linux Subsystem" and move to Step 8.
|
||||
|
||||
8) Build the extension library:
|
||||
|
||||
```powershell
|
||||
gcc -shared -fPIC duktape.c sheetjs-maple.c -lm -std=c99 -Wall -o libsheetjs-maple.so -L. -lmaplec
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win11-x64" label="Windows">
|
||||
|
||||
7) Exit WSL by running `exit`. The window will return to the command prompt.
|
||||
|
||||
8) Build the extension DLL:
|
||||
@ -238,30 +188,14 @@ gcc -shared -fPIC duktape.c sheetjs-maple.c -lm -std=c99 -Wall -o libsheetjs-map
|
||||
cl -Gz sheetjs-maple.c duktape.c /EHsc -link -dll -out:sheetjs-maple.dll maplec.lib
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
9) Close and re-open Maple, then create a new Maple Worksheet or Document
|
||||
|
||||
10) Run the following command in Maple to change the working directory:
|
||||
|
||||
<Tabs groupId="triple">
|
||||
<TabItem value="darwin-x64" label="MacOS">
|
||||
|
||||
```maple
|
||||
currentdir("/tmp/sheetjs-maple");
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win11-x64" label="Windows">
|
||||
|
||||
```maple
|
||||
currentdir("c:\\sheetjs-maple");
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
11) Load the `SheetToXLSX` method from the extension:
|
||||
|
||||
```maple
|
||||
|
@ -365,7 +365,7 @@ This demo was tested in the following deployments:
|
||||
| Architecture | Git Commit | Date |
|
||||
|:-------------|:-----------|:-----------|
|
||||
| `darwin-x64` | `8ef11b4` | 2025-03-31 |
|
||||
| `darwin-arm` | `8ef11b4` | 2025-08-07 |
|
||||
| `darwin-arm` | `388376f` | 2025-01-13 |
|
||||
| `linux-x64` | `8ef11b4` | 2025-04-21 |
|
||||
| `linux-arm` | `388376f` | 2025-02-15 |
|
||||
|
||||
|
@ -210,7 +210,7 @@ In addition to the aforementioned sheet keys, worksheets also add:
|
||||
merge object is a range object that represents the covered range.
|
||||
|
||||
- `ws['!outline']`: configure how outlines should behave. Options default to
|
||||
the default settings in Excel:
|
||||
the default settings in Excel 2024:
|
||||
|
||||
| key | Excel feature | default |
|
||||
|:----------|:----------------------------------------------|:--------|
|
||||
|
@ -275,12 +275,12 @@ tend to use a continued fraction approach.
|
||||
|
||||
The common algorithm produces unexpected results for "Up to one digit":
|
||||
|
||||
| Value | Mediant | Excel |
|
||||
|:------|--------:|--------:|
|
||||
| `0.3` | `2/7` | `2/7` |
|
||||
| `1.3` | `1 2/7` | `1 1/3` |
|
||||
| `2.3` | `2 2/7` | `2 2/7` |
|
||||
| `3.3` | `3 2/7` | `3 2/7` |
|
||||
| Value | Mediant | Excel 2024 |
|
||||
|:------|--------:|-----------:|
|
||||
| `0.3` | `2/7` | `2/7` |
|
||||
| `1.3` | `1 2/7` | `1 1/3` |
|
||||
| `2.3` | `2 2/7` | `2 2/7` |
|
||||
| `3.3` | `3 2/7` | `3 2/7` |
|
||||
|
||||
:::
|
||||
|
||||
|
@ -99,26 +99,20 @@ The read functions accept an options argument:
|
||||
|
||||
#### Dense
|
||||
|
||||
By default, the `read` and `readFile` functions generate "sparse" worksheets.
|
||||
When the `dense` option is set to `true`, the functions will generate "dense"
|
||||
worksheets that may be more efficient in modern browsers.
|
||||
|
||||
The ["Cell Storage"](/docs/csf/sheet#cell-storage) section explains worksheet
|
||||
structures in more detail.
|
||||
The ["Cell Storage"](/docs/csf/sheet#cell-storage) section of the SheetJS Data
|
||||
Model documentation explains the worksheet representation in more detail.
|
||||
|
||||
:::note pass
|
||||
|
||||
[Utility functions that process SheetJS workbook objects](/docs/api/utilities/)
|
||||
typically support sparse and dense worksheets.
|
||||
typically process both sparse and dense worksheets.
|
||||
|
||||
:::
|
||||
|
||||
#### Range
|
||||
|
||||
Some file formats, including XLSX and XLS, can self-report worksheet ranges.
|
||||
`read` and `readFile` assume the self-reported worksheet ranges are correct. If
|
||||
files include cells outside this range, the parsers will save cell information
|
||||
but other utility functions will ignore those cells.
|
||||
Some file formats, including XLSX and XLS, can self-report worksheet ranges. The
|
||||
self-reported ranges are used by default.
|
||||
|
||||
If the `sheetRows` option is set, up to `sheetRows` rows will be parsed from the
|
||||
worksheets. `sheetRows-1` rows will be generated when looking at the JSON object
|
||||
|
@ -120,21 +120,6 @@ or `querySelector`.
|
||||
|
||||
:::
|
||||
|
||||
:::caution pass
|
||||
|
||||
The underlying DOM operations have changed over time. Some deployments using
|
||||
older SheetJS CE versions may not work using the latest version, throwing an
|
||||
error such as:
|
||||
|
||||
```
|
||||
Unsupported origin when DIV is not a TABLE
|
||||
```
|
||||
|
||||
[The note](/docs/miscellany/errors#unsupported-origin-when-div-is-not-a-table)
|
||||
in the "Troubleshooting" section includes a deeper explanation and a workaround.
|
||||
|
||||
:::
|
||||
|
||||
### Create New Sheet
|
||||
|
||||
**Create a worksheet or workbook from a TABLE element**
|
||||
|
@ -189,43 +189,6 @@ dev server and copied to the production site in the build process.
|
||||
|
||||
:::
|
||||
|
||||
#### "Unsupported origin when DIV is not a TABLE"
|
||||
|
||||
[`table_to_book` / `table_to_sheet`](/docs/api/utilities/html#html-table-input)
|
||||
process HTML DOM elements. The underlying behavior has changed over time. The
|
||||
SheetJS methods use the following techniques:
|
||||
|
||||
- Versions up to `0.18.8` (including `0.18.5`) scanned the descendents of the
|
||||
DOM element to find `TR` table rows. The root element need not be a `TABLE`
|
||||
|
||||
- Newer releases expect a `TABLE` element and uses the `rows` property to find
|
||||
the `TR` elements. This approach automatically handles `TBODY` and other
|
||||
table section elements.
|
||||
|
||||
Some data table libraries may use multiple `DIV` wrappers or multiple `TABLE`
|
||||
elements. The older implementation of `table_to_book` handles these corner cases
|
||||
but the newer implementation does not.
|
||||
|
||||
The old behavior can be approximated by scanning for `TABLE` elements:
|
||||
|
||||
```js
|
||||
function deep_table_to_sheet(elt, opts) {
|
||||
let ws;
|
||||
[...elt.getElementsByTagName("TABLE")].forEach(t => {
|
||||
if(!ws) ws = XLSX.utils.table_to_sheet(t, opts);
|
||||
else XLSX.utils.sheet_add_dom(ws, t, {...opts, origin: -1});
|
||||
});
|
||||
return ws;
|
||||
};
|
||||
|
||||
function deep_table_to_book(elt, opts) {
|
||||
return XLSX.utils.book_new(deep_table_to_sheet(elt, opts));
|
||||
}
|
||||
```
|
||||
|
||||
See [issue #3319](https://git.sheetjs.com/sheetjs/sheetjs/issues/3319) for a
|
||||
longer discussion.
|
||||
|
||||
#### Cloudflare Worker "Error: Script startup exceeded CPU time limit."
|
||||
|
||||
This may show up in projects with many dependencies. The official workaround is
|
||||
|
@ -41,11 +41,11 @@ These instructions were tested on the following platforms:
|
||||
|
||||
| Platform | Architecture | Test Date |
|
||||
|:------------------------------|:-------------|:-----------|
|
||||
| Linux (Ubuntu Linux x64) | `linux-x64` | 2025-07-06 |
|
||||
| Linux (Steam Deck Holo x64) | `linux-x64` | 2025-01-10 |
|
||||
| Linux (Debian Linux AArch64) | `linux-arm` | 2025-01-14 |
|
||||
| MacOS 15.3 (x64) | `darwin-x64` | 2025-03-31 |
|
||||
| MacOS 15.2 (ARM64) | `darwin-arm` | 2025-03-07 |
|
||||
| Windows 11 (x64) + WSL Ubuntu | `win11-x64` | 2025-06-20 |
|
||||
| Windows 11 (x64) + WSL Ubuntu | `win11-x64` | 2025-01-14 |
|
||||
| Windows 11 (ARM) + WSL Ubuntu | `win11-arm` | 2025-02-23 |
|
||||
|
||||
With some additional dependencies, the unminified scripts are reproducible and
|
||||
@ -154,7 +154,7 @@ success with Windows on ARM running on computers with the M2 Max CPU.
|
||||
|
||||
B) Install NVM within WSL:
|
||||
|
||||
```bash title="Install NVM (run within WSL)"
|
||||
```bash
|
||||
sudo apt-get install curl
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
|
||||
```
|
||||
@ -163,14 +163,14 @@ C) Exit the WSL session and start a new session
|
||||
|
||||
D) Install NodeJS 16 using NVM:
|
||||
|
||||
```bash title="Install NodeJS 16 (run within WSL)"
|
||||
```bash
|
||||
nvm install 16
|
||||
nvm use 16
|
||||
```
|
||||
|
||||
E) Clone the [`js-crc32` repo](https://git.sheetjs.com/sheetjs/js-crc32)
|
||||
|
||||
```bash title="Clone repo (run within WSL)"
|
||||
```bash
|
||||
git clone https://git.sheetjs.com/sheetjs/js-crc32
|
||||
```
|
||||
|
||||
@ -211,32 +211,20 @@ F) Set `git` config `core.autocrlf` setting to `false`. The following commands
|
||||
should be run twice, once within PowerShell (if Git for Windows is installed)
|
||||
and once within WSL bash:
|
||||
|
||||
```bash title="Configure git (run within WSL AND run within PowerShell)"
|
||||
```bash
|
||||
git config --global --add core.autocrlf false
|
||||
git config --global --unset core.autocrlf true
|
||||
```
|
||||
|
||||
G) Run `unzip` within WSL:
|
||||
G) Run `unzip`. If the program is missing, install manually:
|
||||
|
||||
```bash title="Test if the unzip tool is installed (run within WSL)"
|
||||
unzip
|
||||
```
|
||||
|
||||
If the program is missing, install manually:
|
||||
|
||||
```bash title="Install unzip (run within WSL)"
|
||||
```bash
|
||||
sudo apt-get install -y unzip
|
||||
```
|
||||
|
||||
H) Run `make` within WSL:
|
||||
H) Run `make`. If the program is missing, install manually:
|
||||
|
||||
```bash title="Test if the make tool is installed (run within WSL)"
|
||||
make
|
||||
```
|
||||
|
||||
If the program is missing, install manually:
|
||||
|
||||
```bash title="Install make (run within WSL)"
|
||||
```bash
|
||||
sudo apt-get install -y make
|
||||
```
|
||||
|
||||
@ -338,7 +326,7 @@ On Debian and Ubuntu systems, `build-essential`, `curl` and `git` are required:
|
||||
|
||||
```bash title="Debian and Ubuntu"
|
||||
sudo apt update
|
||||
sudo apt install build-essential curl git
|
||||
sudo apt-get install build-essential curl git
|
||||
```
|
||||
|
||||
On Arch Linux, `base-devel`, `curl` and `git` are required:
|
||||
|
@ -213,27 +213,16 @@ const config = {
|
||||
require.resolve("@cmfcmf/docusaurus-search-local"),
|
||||
[ '@docusaurus/plugin-client-redirects', {
|
||||
redirects: [
|
||||
/* installation */
|
||||
{ from: '/docs/installation', to: '/docs/getting-started/' },
|
||||
{ from: '/docs/installation/standalone', to: '/docs/getting-started/installation/standalone/' },
|
||||
{ from: '/docs/installation/frameworks', to: '/docs/getting-started/installation/frameworks/' },
|
||||
{ from: '/docs/installation/nodejs', to: '/docs/getting-started/installation/nodejs/' },
|
||||
{ from: '/docs/installation/amd', to: '/docs/getting-started/installation/amd/' },
|
||||
{ from: '/docs/installation/extendscript', to: '/docs/getting-started/installation/extendscript/' },
|
||||
{ from: '/docs/installation/deno', to: '/docs/getting-started/installation/deno/' },
|
||||
{ from: '/docs/installation/bun', to: '/docs/getting-started/installation/bun/' },
|
||||
/* examples */
|
||||
{ from: '/docs/example', to: '/docs/getting-started/examples/export/' },
|
||||
{ from: '/docs/getting-started/example', to: '/docs/getting-started/examples/export/' },
|
||||
|
||||
/* api */
|
||||
{ from: '/docs/installation', to: '/docs/getting-started/' },
|
||||
{ from: '/docs/interface', to: '/docs/api/' },
|
||||
{ from: '/docs/read', to: '/docs/api/parse-options/' },
|
||||
|
||||
/* demos */
|
||||
{ from: '/docs/demos/excel', to: '/docs/demos/' },
|
||||
{ from: '/docs/getting-started/demos/', to: '/docs/demos/' },
|
||||
{ from: '/docs/getting-started/demos/excel', to: '/docs/demos/' },
|
||||
{ from: '/docs/demos/content', to: '/docs/demos/static/' },
|
||||
{ from: '/docs/demos/git', to: '/docs/demos/cloud/github/' },
|
||||
{ from: '/docs/demo/grid', to: '/docs/demos/grid/' },
|
||||
/* frontend */
|
||||
{ from: '/docs/demos/angular', to: '/docs/demos/frontend/angular/' },
|
||||
{ from: '/docs/demos/react', to: '/docs/demos/frontend/react/' },
|
||||
@ -252,18 +241,19 @@ const config = {
|
||||
{ from: '/docs/demos/netsuite', to: '/docs/demos/cloud/netsuite/' },
|
||||
{ from: '/docs/demos/gsheet', to: '/docs/demos/cloud/gsheet/' },
|
||||
{ from: '/docs/demos/airtable', to: '/docs/demos/cloud/airtable/' },
|
||||
{ from: '/docs/demos/git', to: '/docs/demos/cloud/github/' },
|
||||
{ from: '/docs/demos/cloudata', to: '/docs/demos/cloud/' },
|
||||
{ from: '/docs/demos/cloudata/gsheet', to: '/docs/demos/cloud/gsheet/' },
|
||||
{ from: '/docs/demos/cloudata/airtable', to: '/docs/demos/cloud/airtable/' },
|
||||
{ from: '/docs/getting-started/demos/netsuite', to: '/docs/demos/cloud/netsuite/' },
|
||||
{ from: '/docs/demos/hosting/dropbox', to: '/docs/demos/cloud/dropbox/' },
|
||||
{ from: '/docs/demos/hosting/github', to: '/docs/demos/cloud/github/' },
|
||||
/* extensions */
|
||||
{ from: '/docs/demos/extendscript', to: '/docs/demos/extensions/extendscript/' },
|
||||
{ from: '/docs/demos/excelapi', to: '/docs/demos/extensions/excelapi/' },
|
||||
{ from: '/docs/demos/chromium', to: '/docs/demos/extensions/chromium/' },
|
||||
{ from: '/docs/getting-started/demos/chromium', to: '/docs/demos/extensions/chromium/' },
|
||||
/* cloud */
|
||||
{ from: '/docs/demos/cloudata', to: '/docs/demos/cloud/' },
|
||||
{ from: '/docs/demos/cloudata/gsheet', to: '/docs/demos/cloud/gsheet/' },
|
||||
{ from: '/docs/demos/cloudata/airtable', to: '/docs/demos/cloud/airtable/' },
|
||||
{ from: '/docs/getting-started/demos/netsuite', to: '/docs/demos/cloud/netsuite/' },
|
||||
/* hosting */
|
||||
{ from: '/docs/demos/hosting/dropbox', to: '/docs/demos/cloud/dropbox/' },
|
||||
{ from: '/docs/demos/hosting/github', to: '/docs/demos/cloud/github/' },
|
||||
/* data */
|
||||
{ from: '/docs/getting-started/demos/database', to: '/docs/demos/data/' },
|
||||
{ from: '/docs/demos/database', to: '/docs/demos/data/' },
|
||||
@ -293,11 +283,16 @@ const config = {
|
||||
{ from: '/docs/demos/ml', to: '/docs/demos/math/' },
|
||||
{ from: '/docs/demos/bigdata/ml', to: '/docs/demos/math/' },
|
||||
{ from: '/docs/demos/engines/pandas', to: '/docs/demos/math/pandas/' },
|
||||
/* grid */
|
||||
/* installation */
|
||||
{ from: '/docs/installation/standalone', to: '/docs/getting-started/installation/standalone/' },
|
||||
{ from: '/docs/installation/frameworks', to: '/docs/getting-started/installation/frameworks/' },
|
||||
{ from: '/docs/installation/nodejs', to: '/docs/getting-started/installation/nodejs/' },
|
||||
{ from: '/docs/installation/amd', to: '/docs/getting-started/installation/amd/' },
|
||||
{ from: '/docs/installation/extendscript', to: '/docs/getting-started/installation/extendscript/' },
|
||||
{ from: '/docs/installation/deno', to: '/docs/getting-started/installation/deno/' },
|
||||
{ from: '/docs/installation/bun', to: '/docs/getting-started/installation/bun/' },
|
||||
/* misc */
|
||||
{ from: '/demos/datagrid', to: '/docs/demos/grid/' },
|
||||
{ from: '/docs/demo/grid', to: '/docs/demos/grid/' },
|
||||
/* static */
|
||||
{ from: '/docs/demos/content', to: '/docs/demos/static/' },
|
||||
]
|
||||
}]
|
||||
]
|
||||
|
@ -28,7 +28,7 @@ document.getElementById("xport").addEventListener("click", function() {
|
||||
prez.forEach(function(row) {
|
||||
row.start = row.terms.find(function(term) {
|
||||
return term.type === "prez";
|
||||
}).start;
|
||||
}).start
|
||||
});
|
||||
prez.sort(function(l,r) { return l.start.localeCompare(r.start); });
|
||||
|
||||
|
@ -24,11 +24,7 @@ require(["xlsx"], function(XLSX) {
|
||||
var prez = raw_data.filter(function(row) { return row.terms.some(function(term) { return term.type === "prez"; }); });
|
||||
|
||||
/* sort by first presidential term */
|
||||
prez.forEach(function(row) {
|
||||
row.start = row.terms.find(function(term) {
|
||||
return term.type === "prez";
|
||||
}).start;
|
||||
});
|
||||
prez.forEach(function(row) { row.start = row.terms.find(function(term) {return term.type === "prez"; }).start; });
|
||||
prez.sort(function(l,r) { return l.start.localeCompare(r.start); });
|
||||
|
||||
/* flatten objects */
|
||||
@ -50,7 +46,7 @@ require(["xlsx"], function(XLSX) {
|
||||
worksheet["!cols"] = [ { wch: max_width } ];
|
||||
|
||||
/* create an XLSX file and try to save to Presidents.xlsx */
|
||||
XLSX.writeFileXLSX(workbook, "Presidents.xlsx");
|
||||
//XLSX.writeFileXLSX(workbook, "Presidents.xlsx");
|
||||
console.log(XLSX.utils.sheet_to_csv(worksheet));
|
||||
});
|
||||
});
|
||||
|
@ -11,12 +11,6 @@ curl -LO https://docs.sheetjs.com/hermes/sheetjs-hermes.cpp
|
||||
|
||||
make init
|
||||
|
||||
# CMake 4 workaround
|
||||
rm -rf build_release
|
||||
cp hermes/CMakeLists.txt hermes/CMakeLists.bak
|
||||
awk 'NR != 42' <hermes/CMakeLists.bak >hermes/CMakeLists.txt
|
||||
make init
|
||||
|
||||
make sheetjs-hermes
|
||||
|
||||
curl -LO https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js
|
||||
|
@ -63,8 +63,7 @@ app.listen(7262, async() => {
|
||||
EOF
|
||||
|
||||
|
||||
for n in 0.9.1 0.{9..25}; do
|
||||
npm rm --save esbuild
|
||||
for n in 0.9.1 0.{9..24}; do
|
||||
npm i --save esbuild@$n
|
||||
npm ls | grep esbuild
|
||||
rm -f out.js
|
Loading…
Reference in New Issue
Block a user