Windows 11 ARM Tests

This commit is contained in:
SheetJS 2025-02-23 20:17:05 -05:00
parent 7a6018aa9f
commit 892396d40f
34 changed files with 251 additions and 85 deletions

@ -121,7 +121,7 @@
<Cell ss:StyleID="s16"><Data ss:Type="String">✔</Data></Cell>
<Cell ss:StyleID="s16"><Data ss:Type="String">✔</Data></Cell>
<Cell ss:StyleID="s16"><Data ss:Type="String">✘</Data></Cell>
<Cell ss:StyleID="s16"><Data ss:Type="String"> </Data></Cell>
<Cell ss:StyleID="s16"><Data ss:Type="String"></Data></Cell>
<Cell ss:StyleID="s16"><Data ss:Type="String">✘</Data></Cell>
<Cell ss:StyleID="s16"><Data ss:Type="String"> </Data></Cell>
</Row>

@ -124,7 +124,7 @@ This demo was last tested in the following deployments:
| `darwin-x64` | `1.1.39` | 2024-12-17 |
| `darwin-arm` | `1.2.2` | 2025-02-16 |
| `win11-x64` | `1.1.42` | 2024-12-22 |
| `win11-arm` | `1.1.40` | 2024-12-19 |
| `win11-arm` | `1.2.3` | 2025-02-23 |
| `linux-x64` | `1.1.40` | 2024-12-19 |
| `linux-arm` | `1.2.2` | 2025-02-16 |
@ -249,7 +249,7 @@ This procedure will generate `app.js`.
4) Remove the module artifacts and original script:
```bash
rm package.json bun.lockb SheetJSBun.js
rm package.json bun.lock bun.lockb SheetJSBun.js
rm -rf ./node_modules
```
@ -259,6 +259,7 @@ PowerShell does not support `rm -rf`. Instead, each file must be removed:
```powershell title="Windows Powershell commands"
rm package.json
rm bun.lock
rm bun.lockb
rm SheetJSBun.js
rm .\\node_modules -r -fo

@ -43,7 +43,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | Duktape `2.7.0` | 2.2.3 | 3.13.1 | 2024-12-31 |
| `darwin-arm` | Duktape `2.7.0` | 2.2.2 | 3.12.3 | 2024-06-30 |
| `win11-x64` | Duktape `2.7.0` | 2.2.3 | 3.11.8 | 2024-12-21 |
| `win11-arm` | Duktape `2.7.0` | 2.2.2 | 3.11.5 | 2024-06-20 |
| `win11-arm` | Duktape `2.7.0` | 2.2.3 | 3.13.2 | 2025-02-23 |
| `linux-x64` | Duktape `2.7.0` | 1.5.3 | 3.11.7 | 2025-01-01 |
| `linux-arm` | Duktape `2.7.0` | 1.5.3 | 3.11.2 | 2025-02-16 |
@ -530,7 +530,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | Duktape `2.7.0` | 1.18.0 | 3.13.1 | 2024-12-31 |
| `darwin-arm` | Duktape `2.7.0` | 0.20.31 | 3.12.3 | 2024-06-30 |
| `win11-x64` | Duktape `2.7.0` | 1.17.1 | 3.11.8 | 2024-12-21 |
| `win11-arm` | Duktape `2.7.0` | 0.20.31 | 3.11.5 | 2024-06-20 |
| `win11-arm` | Duktape `2.7.0` | 1.23.0 | 3.13.2 | 2025-02-23 |
| `linux-x64` | Duktape `2.7.0` | 1.18.0 | 3.11.7 | 2025-01-01 |
| `linux-arm` | Duktape `2.7.0` | 1.22.0 | 3.11.2 | 2025-02-16 |

@ -375,7 +375,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | 0.1.48 | 2.0.4 | 2024-10-30 |
| `darwin-arm` | 0.1.48 | 2.0.4 | 2024-10-30 |
| `win11-x64` | 0.1.48 | 2.0.4 | 2024-10-30 |
| `win11-arm` | 0.1.48 | 2.0.4 | 2024-10-30 |
| `win11-arm` | 0.1.48 | 2.2.1 | 2025-02-23 |
| `linux-x64` | 0.1.48 | 2.0.5 | 2025-01-10 |
| `linux-arm` | 0.1.48 | 2.1.10 | 2025-02-16 |

@ -78,18 +78,10 @@ Configuration A:
:::danger Telemetry
Before starting this demo, manually disable telemetry. On Linux and MacOS:
Before starting this demo, manually disable telemetry:
```bash
rm -rf ~/.ionic/
mkdir ~/.ionic
cat <<EOF > ~/.ionic/config.json
{
"version": "6.20.1",
"telemetry": false,
"npmClient": "npm"
}
EOF
npx @ionic/cli config set -g telemetry false
npx @capacitor/cli telemetry off
```
@ -174,7 +166,7 @@ These objects can be parsed with the SheetJS `read` method[^4]. The SheetJS
`sheet_to_json` method[^5] with the option `header: 1` generates an array of
arrays which can be assigned to the page state:
```ts
```ts title="Read file from device and update state"
/* read a workbook file */
const ab: ArrayBuffer = await this.file.readAsArrayBuffer(url, filename);
/* parse */
@ -195,7 +187,7 @@ worksheet object. The `book_new` and `book_append_sheet` helpers[^7] generate a
workbook object. The SheetJS `write` method[^8] with the option `type: "array"`
will generate an `ArrayBuffer`, from which a `Blob` can be created:
```ts
```ts title="Export state data to XLSX workbook and write to device"
/* generate worksheet */
const ws: XLSX.WorkSheet = XLSX.utils.aoa_to_sheet(this.data);
@ -268,9 +260,9 @@ ionic start SheetJSIonic blank --type angular --cordova --quiet --no-git --no-li
When asked to select `NgModules` or `Standalone Components`, select `NgModules`
If a prompt asks to confirm Cordova use, enter `Yes` to continue.
If a prompt asks to confirm Cordova use, enter <kbd>Y</kbd> to continue.
If a prompt asks about creating an Ionic account, enter `N` to opt out.
If a prompt asks about creating an Ionic account, enter <kbd>N</kbd> to opt out.
:::caution pass
@ -292,8 +284,8 @@ cd ..
```bash
cd SheetJSIonic
ionic cordova plugin add cordova-plugin-file
ionic cordova platform add ios --confirm
ionic cordova platform add android --confirm
ionic cordova platform add ios --confirm
npm i --save @awesome-cordova-plugins/core @awesome-cordova-plugins/file @ionic/cordova-builders
```
@ -341,9 +333,9 @@ After adding the lines, the `npm i` command will succeed.
npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`}
</CodeBlock>
6) Add `@awesome-cordova-plugins/file` to the module. Differences highlighted below:
6) Add the `@awesome-cordova-plugins/file` plugin to `src/app/app.module.ts`:
```ts title="src/app/app.module.ts"
```ts title="src/app/app.module.ts (add highlighted lines)"
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
@ -367,6 +359,23 @@ export class AppModule {}
curl -o src/app/home/home.page.ts -L https://docs.sheetjs.com/ionic/home.page.ts
```
:::note pass
In PowerShell, the command may fail with a parameter error:
```
Invoke-WebRequest : A parameter cannot be found that matches parameter name 'L'.
```
`curl.exe` must be invoked directly:
```bash
curl.exe -o src/app/home/home.page.ts -L https://docs.sheetjs.com/ionic/home.page.ts
```
:::
### iOS
8) Enable file sharing and make the documents folder visible in the iOS app.

@ -210,7 +210,7 @@ This demo was tested in the following environments:
| macOS 15.2 | `darwin-x64` | `33.2.1` | 2024-12-31 |
| macOS 14.5 | `darwin-arm` | `30.0.8` | 2024-05-28 |
| Windows 11 | `win11-x64` | `33.2.1` | 2025-02-11 |
| Windows 11 | `win11-arm` | `30.0.8` | 2024-05-28 |
| Windows 11 | `win11-arm` | `33.2.1` | 2025-02-23 |
| Linux (HoloOS) | `linux-x64` | `33.2.1` | 2025-01-02 |
| Linux (Debian) | `linux-arm` | `33.2.1` | 2025-02-16 |

@ -124,7 +124,7 @@ This demo was tested in the following environments:
| macOS 15.2 | `darwin-x64` | `0.94.0` | 2024-12-31 | |
| macOS 14.5 | `darwin-arm` | `0.88.0` | 2024-05-28 | |
| Windows 11 | `win11-x64` | `0.94.0` | 2024-12-19 | |
| Windows 11 | `win11-arm` | `0.88.0` | 2024-05-28 | |
| Windows 11 | `win11-arm` | `0.94.0` | 2025-02-23 | |
| Linux (HoloOS) | `linux-x64` | `0.89.0` | 2025-01-10 | |
| Linux (Debian) | `linux-arm` | `0.60.0` | 2025-02-16 | Unofficial build[^1] |
@ -225,7 +225,8 @@ testing, version `4.11.6` correctly generated the standalone application.
| Architecture | Command |
|:-------------|:--------------------------------------------------------------|
| `darwin-x64` | `open ../out/sheetjs-nwjs.app` |
| `linux-x64` | `../out/sheetjs-nwjs` |
| `win11-x64` | `..\out\sheetjs-nwjs.exe` |
| `win11-arm` | `..\out\sheetjs-nwjs.exe` |
| `linux-x64` | `../out/sheetjs-nwjs` |
[^1]: The [`nw60-arm64_2022-01-08` release](https://github.com/LeonardLaszlo/nw.js-armv7-binaries/releases/tag/nw60-arm64_2022-01-08) included an ARM64 version of `nw`.

@ -300,7 +300,7 @@ This demo was tested in the following environments:
| macOS 15.2 | `darwin-x64` | `v2.9.2` | 2024-12-31 |
| macOS 14.5 | `darwin-arm` | `v2.8.2` | 2024-05-28 |
| Windows 11 | `win11-x64` | `v2.9.2` | 2024-12-21 |
| Windows 11 | `win11-arm` | `v2.8.2` | 2024-05-28 |
| Windows 11 | `win11-arm` | `v2.10` | 2025-02-23 |
| Linux (HoloOS) | `linux-x64` | `v2.9.2` | 2025-01-02 |
| Linux (Debian) | `linux-arm` | `v2.10` | 2025-02-16 |

@ -356,7 +356,7 @@ This demo was tested in the following environments:
| macOS 15.2 | `darwin-x64` | `v1.6.0` | 2024-12-31 |
| macOS 14.5 | `darwin-arm` | `v1.5.14` | 2024-05-26 |
| Windows 11 | `win11-x64` | `v1.6.0` | 2024-12-21 |
| Windows 11 | `win11-arm` | `v1.5.14` | 2024-05-28 |
| Windows 11 | `win11-arm` | `v1.6.0` | 2025-02-23 |
| Linux (HoloOS) | `linux-x64` | `v1.6.0` | 2025-01-02 |
| Linux (Debian) | `linux-arm` | `v1.6.0` | 2025-02-16 |
@ -480,6 +480,7 @@ npm add vite-plugin-kaioken -D --save
In the same file, look for `"title"` and change the value to `SheetJS x Tauri`:
```json title="src-tauri/tauri.conf.json (edit highlighted line)"
"windows": [
{
// highlight-next-line
"title": "SheetJS x Tauri",

@ -195,7 +195,7 @@ This demo was tested in the following environments:
| macOS 15.2 | `darwin-x64` | `5.5.0` | `5.5.0` | 2024-12-31 |
| macOS 14.5 | `darwin-arm` | `5.1.0` | `5.1.0` | 2024-05-25 |
| Windows 11 | `win11-x64` | `5.5.0` | `5.5.0` | 2024-12-20 |
| Windows 11 | `win11-arm` | `5.1.0` | `5.1.1` | 2024-05-28 |
| Windows 11 | `win11-arm` | `5.6.0` | `5.6.0` | 2025-02-23 |
| 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 |

@ -46,8 +46,10 @@ This demo was tested in the following environments:
| OS and Version | Architecture | RN Platform | Date |
|:---------------|:-------------|:------------|:-----------|
| Windows 11 | `win11-x64` | `v0.75.11` | 2024-12-22 |
| Windows 11 | `win11-arm` | `v0.74.5` | 2024-05-25 |
| Windows 11 C++ | `win11-x64` | `v0.75.11` | 2024-12-22 |
| Windows 11 C# | `win11-x64` | `v0.75.11` | 2024-12-22 |
| Windows 11 C++ | `win11-arm` | `v0.77.2` | 2025-02-23 |
| Windows 11 C# | `win11-arm` | `v0.77.2` | 2025-02-23 |
| MacOS 14.7 | `darwin-x64` | `v0.75.13` | 2024-10-26 |
| MacOS 14.5 | `darwin-arm` | `v0.75.16` | 2024-12-22 |
@ -430,11 +432,12 @@ not a requirement for this demo.
### Project Setup
1) Create a new project using React Native `0.75.4`:
1) Create a new project using React Native `0.77.1`:
```bash
npx -y @react-native-community/cli@14 init SheetJSWin --version="0.75.4"
npx -y @react-native-community/cli@16 init SheetJSWin --version="0.77.1"
cd SheetJSWin
npm install --save react-native-windows@0.77.2
```
:::info pass
@ -453,19 +456,31 @@ scheme is fundamentally different from `react-native`.[^5]
<TabItem value="cs" label="C#">
```bash
npx react-native-windows-init --no-telemetry --overwrite --language=cs
npx react-native init-windows --no-telemetry --overwrite --template old/uwp-cs-app
```
</TabItem>
<TabItem value="cpp" label="C++">
```bash
npx react-native-windows-init --no-telemetry --overwrite
npx react-native init-windows --no-telemetry --overwrite --template old/uwp-cpp-app
```
</TabItem>
</Tabs>
:::note pass
Older versions of this demo used the `react-native-windows-init` package. This
package does not support React Native `0.77`. The official instructions now
recommend directly installing `react-native-windows`.
When this demo was last tested, there was no template for a C# application using
the React Native "New Architecture". For consistency, both the C# and C++ demos
are tested using the "Old Architecture".
:::
3) Install the SheetJS library:
<CodeBlock language="bash">{`\
@ -614,7 +629,11 @@ curl -LO https://docs.sheetjs.com/reactnative/rnw/App.tsx
</TabItem>
</Tabs>
:::note pass
The `rm` command may fail if `App.js` does not exist. That error can be ignored.
:::
8) Launch the app again:

@ -40,7 +40,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | `4.0.0-rc.6` | `14.15.3` | Pre-built | 2025-01-19 |
| `darwin-arm` | `4.0.0-rc.6` | `20.18.0` | Compiled | 2025-02-13 |
| `win11-x64` | `4.0.0-rc.6` | `14.15.3` | Pre-built | 2024-12-19 |
| `win11-arm` | `4.0.0-rc.6` | `20.10.0` | Compiled | 2024-05-28 |
| `win11-arm` | `4.0.0-rc.6` | `22.14.0` | Compiled | 2025-02-23 |
| `linux-x64` | `4.0.0-rc.6` | `14.15.3` | Pre-built | 2024-12-31 |
| `linux-arm` | `4.0.0-rc.6` | `22.13.0` | Compiled | 2025-02-15 |
@ -121,10 +121,11 @@ On Windows x64, the `--build` flag suffices:
npx -y nexe xlsx-cli.js --build --make="-j8"
```
On Windows ARM, the target `windows-arm64-20.10.0` must be specified:
On Windows ARM, the target `windows-arm64-22.14.0` must be specified and the
command must be run in a "Native Tools Command Prompt":
```bash
npx -y nexe xlsx-cli.js --build --make="-j8" --target=windows-arm64-20.10.0
npx -y nexe xlsx-cli.js --build --make="-j8" --target=windows-arm64-22.14.0
```
**`vcbuild.bat` issues**
@ -135,8 +136,36 @@ The Windows ARM build may fail with a `vcbuild.bat` error:
Error: vcbuild.bat nosign release arm64 exited with code: 1
```
Pass the `-v` flag for more details. In the most recent test, the error stemmed
from a Python version mismatch:
Pass the `--verbose` flag for more details:
```bash
npx -y nexe xlsx-cli.js --build --make="-j8" --target=windows-arm64-22.14.0 --verbose
```
Common error messages:
_"Python was not found"_
```
Python was not found; run without arguments to install from the Microsoft Store, or disable this shortcut from Settings > Manage App Execution Aliases.
```
Out of the box, Windows 11 will alias `python`, redirecting unsuspecting users
to the App Installer. This redirect must be disabled:
Type `alias` in the search bar and select "Manage app execution aliases", In the
settings pane, scroll down and turn off the alias for `python.exe`.
_"Could not find Python"_
```
Could not find Python.
```
After installing Python using the official installer, the command should be run
in a new terminal window.
_Python version mismatch ("Please use")_
```
Node.js configure: found Python 2.7.18
@ -149,8 +178,8 @@ The resolved version of Python can be found with
where python
```
In the most recent test, a Python 2 version appeared first. This was fixed by
finding the Python 3 location and prepending it to `PATH`:
In some tests, a Python 2 version appeared first. This was fixed by finding the
Python 3 location and prepending it to `PATH`:
```cmd
set PATH="C:\correct\path\to\python\three";%PATH%
@ -182,6 +211,16 @@ This generates `xlsx-cli` or `xlsx-cli.exe` depending on platform.
</TabItem>
</Tabs>
The program should display CSV contents from the first sheet:
```text title="Expected Output"
Name,Index
Bill Clinton,42
GeorgeW Bush,43
Barack Obama,44
Donald Trump,45
Joseph Biden,46
```
[^1]: The project does not have a website. The [source repository](https://github.com/nexe/nexe) is publicly available.
[^2]: The NodeJS website hosts [prebuilt installers](https://nodejs.org/en/download/prebuilt-installer).

@ -40,7 +40,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | `5.8.1` | `18.5.0` | 2025-01-19 |
| `darwin-arm` | `5.8.1` | `18.5.0` | 2025-02-13 |
| `win11-x64` | `5.8.1` | `18.5.0` | 2024-12-19 |
| `win11-arm` | `5.8.1` | `18.5.0` | 2024-10-25 |
| `win11-arm` | `5.8.1` | `18.5.0` | 2025-02-23 |
| `linux-x64` | `5.8.1` | `18.5.0` | 2024-12-31 |
| `linux-arm` | `5.8.1` | `18.5.0` | 2025-02-15 |
@ -140,11 +140,30 @@ yarn add https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz exit-on-epi
4) Create the standalone program:
```bash
npx pkg xlsx-cli.js
npx -y pkg xlsx-cli.js
```
This generates `xlsx-cli-linux`, `xlsx-cli-macos`, and `xlsx-cli-win.exe` .
:::info pass
If it is not possible to switch NodeJS versions, the `-t` flag can be used to
override the target detection:
**X64**
```bash
npx -y pkg -t 'node18-win-x64,node18-linux-x64,node18-macos-x64' xlsx-cli.js
```
**ARM64**
```bash
npx -y pkg -t 'node18-win-arm64,node18-linux-arm64,node18-macos-arm64' xlsx-cli.js
```
:::
5) Run the generated program, passing `pres.numbers` as the argument:
<Tabs groupId="os">

@ -161,7 +161,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | `22.13.0` | 2025-01-19 |
| `darwin-arm` | `23.8.0` | 2025-02-16 |
| `win11-x64` | `22.13.0` | 2025-01-19 |
| `win11-arm` | `20.14.0` | 2024-06-11 |
| `win11-arm` | `22.14.0` | 2025-02-23 |
| `linux-x64` | `22.12.0` | 2025-01-02 |
| `linux-arm` | `22.13.0` | 2025-02-16 |
@ -429,7 +429,7 @@ signtool verify sheet2csv.exe
`signtool` is included in the Windows SDK[^4].
If the Windows SDK is installed but the command fails, run the comand in the
"x64 Native Tools Command Prompt" that ships with Visual Studio.
"Native Tools Command Prompt" that ships with Visual Studio.
:::

@ -82,7 +82,7 @@ This demo was last tested in the following deployments:
| `darwin-x64` | `1.1.45` | 2025-01-19 |
| `darwin-arm` | `1.2.2` | 2025-02-16 |
| `win11-x64` | `1.1.40` | 2024-12-19 |
| `win11-arm` | `1.1.33` | 2024-10-25 |
| `win11-arm` | `1.2.3` | 2025-02-23 |
| `linux-x64` | `1.1.43` | 2025-01-10 |
| `linux-arm` | `1.2.2` | 2025-02-16 |

@ -102,7 +102,7 @@ This demo was last tested in the following deployments:
| `darwin-x64` | `2.1.6` | 2025-01-19 |
| `darwin-arm` | `2.1.10` | 2025-02-13 |
| `win11-x64` | `2.1.6` | 2025-01-19 |
| `win11-arm` | `2.0.3` | 2024-10-25 |
| `win11-arm` | `2.2.1` | 2025-02-23 |
| `linux-x64` | `2.1.4` | 2025-01-02 |
| `linux-arm` | `2.1.10` | 2025-02-15 |

@ -56,7 +56,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | `18.5` (StataNow) | 2025-01-08 |
| `darwin-arm` | `18.5` (StataNow) | 2024-12-15 |
| `win11-x64` | `18.5` (StataNow) | 2024-12-19 |
| `win11-arm` | `18.5` (StataNow) | 2024-12-15 |
| `win11-arm` | `18.5` (StataNow) | 2025-02-23 |
| `linux-x64` | `18.5` (StataNow) | 2025-01-09 |
:::
@ -234,6 +234,12 @@ mkdir sheetjs-stata
cd sheetjs-stata
```
:::info pass
In Windows on ARM, the `x64` toolchain must be used to compile Stata plugins.
:::
2) Enter WSL:
```powershell

@ -131,7 +131,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | `2.7.0` | 2024-12-31 |
| `darwin-arm` | `2.7.0` | 2025-02-13 |
| `win11-x64` | `2.7.0` | 2024-12-20 |
| `win11-arm` | `2.7.0` | 2024-05-25 |
| `win11-arm` | `2.7.0` | 2025-02-23 |
| `linux-x64` | `2.7.0` | 2024-12-31 |
| `linux-arm` | `2.7.0` | 2025-02-15 |
@ -142,9 +142,10 @@ generates an XLSB file and writes to the filesystem.
The [flow diagram is displayed after the example steps](#flow-diagram)
:::info pass
:::note pass
On Windows, the Visual Studio "Native Tools Command Prompt" must be used.
The Windows build requires Visual Studio with "Desktop development with C++".
Commands must be run in a "Native Tools Command Prompt" session.
:::
@ -786,7 +787,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | `2.7.0` | `0.13.0` | 2024-12-31 |
| `darwin-arm` | `2.7.0` | `0.13.0` | 2025-02-13 |
| `win11-x64` | `2.7.0` | `0.13.0` | 2024-12-20 |
| `win11-arm` | `2.7.0` | `0.12.0` | 2024-05-25 |
| `win11-arm` | `2.7.0` | `0.13.0` | 2025-02-23 |
| `linux-x64` | `2.7.0` | `0.13.0` | 2024-12-31 |
| `linux-arm` | `2.7.0` | `0.13.0` | 2025-02-15 |

@ -1281,7 +1281,7 @@ This demo was last tested in the following deployments:
| `darwin-x64` | `12.3.219.12` | 2024-07-16 |
| `darwin-arm` | `12.3.219.12` | 2024-07-16 |
| `win11-x64` | `12.3.219.12` | 2024-12-20 |
| `win11-arm` | `12.3.219.12` | 2024-07-16 |
| `win11-arm` | `12.3.219.12` | 2025-02-23 |
| `linux-x64` | `12.3.219.12` | 2025-01-10 |
| `linux-arm` | `12.3.219.12` | 2025-02-16 |

@ -166,7 +166,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | `4.1.0` | 2024-12-17 |
| `darwin-arm` | `4.2.0` | 2025-02-13 |
| `win11-x64` | `4.1.0` | 2024-12-20 |
| `win11-arm` | `3.1.2` | 2024-05-25 |
| `win11-arm` | `4.2.0` | 2025-02-23 |
| `linux-x64` | `4.1.0` | 2025-01-09 |
| `linux-arm` | `4.2.0` | 2025-02-15 |
@ -226,7 +226,7 @@ For Steam Deck Holo and other Arch Linux x64 distributions, the `dotnet-sdk` and
sudo pacman -Syu dotnet-sdk dotnet-runtime
```
https://dotnet.microsoft.com/en-us/download/dotnet/6.0 is the official source
https://dotnet.microsoft.com/en-us/download/dotnet/9.0 is the official source
for Windows and ARM64 Linux versions.
</details>
@ -499,7 +499,7 @@ cp bin/Release/net*/linux-arm64/publish/SheetJSJint .
For Windows 11 x64, the RID is `win-x64` and the command is:
```powershell
copy .\bin\Release\net6.0\win-x64\publish\SheetJSJint.exe .
copy .\bin\Release\net9.0\win-x64\publish\SheetJSJint.exe .
```
:::caution pass
@ -513,7 +513,7 @@ The system cannot find the path specified.
The correct command was
```powershell
copy .\bin\x64\Release\net6.0\win-x64\publish\SheetJSJint.exe .
copy .\bin\x64\Release\net9.0\win-x64\publish\SheetJSJint.exe .
```
:::
@ -524,7 +524,7 @@ copy .\bin\x64\Release\net6.0\win-x64\publish\SheetJSJint.exe .
For Windows 11 ARM64, the RID is `win-arm64` and the command is:
```powershell
copy .\bin\Release\net6.0\win-arm64\publish\SheetJSJint.exe .
copy .\bin\Release\net9.0\win-arm64\publish\SheetJSJint.exe .
```
</TabItem>

@ -108,7 +108,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | `79f3a7e` | `1.23.3` | 2024-12-17 |
| `darwin-arm` | `5ef83b8` | `1.24.0` | 2025-02-13 |
| `win11-x64` | `79f3a7e` | `1.23.4` | 2024-12-20 |
| `win11-arm` | `ccbae20` | `1.22.3` | 2024-05-25 |
| `win11-arm` | `5ef83b8` | `1.24.0` | 2025-02-23 |
| `linux-x64` | `79f3a7e` | `1.22.0` | 2025-01-02 |
| `linux-arm` | `5ef83b8` | `1.19.8` | 2025-02-15 |

@ -266,7 +266,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | `6e2e68f` | 2024-12-17 |
| `darwin-arm` | `6e2e68f` | 2024-12-17 |
| `win11-x64` | `6e2e68f` | 2024-12-19 |
| `win11-arm` | `d378a9f` | 2024-05-25 |
| `win11-arm` | `6e2e68f` | 2025-02-23 |
| `linux-x64` | `6e2e68f` | 2025-01-09 |
| `linux-arm` | `6e2e68f` | 2025-02-15 |
@ -291,6 +291,22 @@ make
cd ..
```
:::note pass
In some tests, the build failed since `gcc` was not installed:
```
make: gcc: No such file or directory
```
The C compiler must be installed. WSL Ubuntu requires `build-essential`:
```bash
sudo apt-get install build-essential
```
:::
1) Copy `libquickjs.a` and `quickjs.h` into the working directory:
```bash
@ -349,18 +365,24 @@ When the demo was tested, `6e2e68f` was the HEAD commit on the `master` branch.
:::
0) Build the `qjs` command line utility from source:
0) If the ["Integration Example"](#integration-example) was not tested, clone
and build the `quickjs` project:
```bash
git clone https://github.com/bellard/quickjs
cd quickjs
git checkout d378a9f
git checkout 6e2e68f
make
cd ..
```
1) Copy the `qjs` compiled program to the current directory:
```bash
cp quickjs/qjs .
```
1) Download the SheetJS Standalone script and the test file. Save both files in
2) Download the SheetJS Standalone script and the test file. Save both files in
the project directory:
<ul>
@ -373,13 +395,13 @@ curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
curl -LO https://docs.sheetjs.com/pres.numbers`}
</CodeBlock>
2) Download [`SheetJSQuick.js`](pathname:///quickjs/SheetJSQuick.js)
3) Download [`SheetJSQuick.js`](pathname:///quickjs/SheetJSQuick.js)
```bash
curl -LO https://docs.sheetjs.com/quickjs/SheetJSQuick.js
```
3) Test the program:
4) Test the program:
```bash
./qjs SheetJSQuick.js

@ -375,7 +375,7 @@ fork, which powers React Native for Windows, does have built-in support[^5]
| Architecture | Git Commit | Date |
|:-------------|:-----------|:-----------|
| `win11-x64` | `4c64b05` | 2024-12-20 |
| `win11-arm` | `240573e` | 2024-06-20 |
| `win11-arm` | `4c64b05` | 2025-02-23 |
The ["Windows Example"](#windows-example) covers `hermes-windows`.
@ -771,6 +771,22 @@ If `cl` is not found, run the command in the "Native Tools Command Prompt"
:::
:::info pass
In some test runs, the build failed due to duplicate symbols:
```
hermesVMRuntimeLean.lib(Runtime.obj) : error LNK2005: "private: __cdecl hermes::vm::Runtime::Runtime(class std::shared_ptr<class hermes::vm::StorageProvider>,class hermes::vm::RuntimeConfig const &)" (??0Runtime@vm@hermes@@AEAA@V?$shared_ptr@VStorageProvider@vm@hermes@@@std@@AEBVRuntimeConfig@12@@Z) already defined in hermesVMRuntime.lib(Runtime.obj)
```
The lean libraries should be manually removed:
```pwsh
del *ean.lib
```
:::
9) Download the SheetJS Standalone script and the test file. Save both files in
the project directory:
@ -803,6 +819,7 @@ This demo was tested in the following deployments:
|:-------------|:---------|:-----------|
| `darwin-x64` | `0.13.0` | 2024-12-17 |
| `win11-x64` | `0.13.0` | 2024-12-20 |
| `win11-arm` | `0.13.0` | 2025-02-23 |
| `linux-x64` | `0.13.0` | 2024-12-31 |
:::
@ -820,6 +837,14 @@ npx jsvu hermes@0.13.0
When prompted, select the appropriate operating system.
:::info pass
`jsvu` on Windows on ARM uses the X64 compatibility layer. When the demo was
last tested, the engine binaries were not native ARM64 programs.
:::
1) Inspect the output of the installer. Look for "Installing binary" lines:
```text pass

@ -90,7 +90,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | `2.6.10` | `2.10.0` | 2024-12-17 |
| `darwin-arm` | `2.6.10` | `2.10.0` | 2025-02-13 |
| `win11-x64` | `3.3.6` | `2.10.0` | 2024-12-20 |
| `win11-arm` | `3.0.2` | `2.9.1` | 2024-05-25 |
| `win11-arm` | `3.2.3` | `2.10.0` | 2025-02-23 |
| `linux-x64` | `3.0.6` | `2.10.0` | 2024-12-31 |
| `linux-arm` | `3.1.2` | `2.10.0` | 2025-02-15 |
@ -114,7 +114,13 @@ The command may need to be run as an administrator or root user:
sudo gem install execjs
```
:::note pass
---
In WSL and Ubuntu Linux, the `rubygems` package should be installed:
```bash
sudo apt-get install rubygems
```
On Arch Linux-based platforms including the Steam Deck, `rubygems` must be
installed through the package manager:
@ -129,8 +135,6 @@ In Debian, the `rubygems-integration` package should be installed:
sudo apt-get install ruby rubygems-integration
```
:::
</details>
1) Create a new project folder:
@ -176,7 +180,7 @@ If a JavaScript runtime is not available, the script will throw an error:
execjs/runtimes.rb:68:in `autodetect': Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
```
ExecJS 2.9.1 supports the Bun runtime. Install the Bun runtime[^1], restart the
ExecJS 2.10.0 supports the Bun runtime. Install the Bun runtime[^1], restart the
terminal, and re-run the script.
:::

@ -135,7 +135,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | `e26c81f` | 2024-12-17 |
| `darwin-arm` | `e26c81f` | 2025-01-13 |
| `win11-x64` | `e26c81f` | 2024-12-19 |
| `win11-arm` | `13358c6` | 2024-07-14 |
| `win11-arm` | `e26c81f` | 2025-02-23 |
| `linux-x64` | `e26c81f` | 2025-01-09 |
:::

@ -123,7 +123,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | `0.20.0` | 2024-12-17 |
| `darwin-arm` | `0.20.0` | 2025-02-13 |
| `win11-x64` | `0.20.0` | 2024-12-19 |
| `win11-arm` | `0.18.0` | 2024-05-25 |
| `win11-arm` | `0.20.0` | 2025-02-23 |
| `linux-x64` | `0.20.0` | 2024-12-31 |
| `linux-arm` | `0.20.0` | 2025-02-15 |

@ -39,7 +39,7 @@ This demo was tested in the following environments:
| `darwin-x64` | `d2d30df` | 2024-12-17 |
| `darwin-arm` | `d2d30df` | 2025-02-13 |
| `win11-x64` | `d2d30df` | 2024-12-19 |
| `win11-arm` | `35465ed` | 2024-05-25 |
| `win11-arm` | `5020015` | 2025-02-23 |
| `linux-x64` | `d2d30df` | 2024-12-31 |
| `linux-arm` | `5020015` | 2025-02-15 |

@ -325,7 +325,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | `1.3.5` | 2024-12-17 |
| `darwin-arm` | `1.3.5` | 2025-02-13 |
| `win11-x64` | `1.3.5` | 2024-12-19 |
| `win11-arm` | `1.3.4` | 2024-06-20 |
| `win11-arm` | `1.3.5` | 2025-02-23 |
| `linux-x64` | `1.3.5` | 2025-01-09 |
| `linux-arm` | `1.3.5` | 2025-02-15 |

@ -179,7 +179,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | `3.2.8` | 2024-12-17 |
| `darwin-arm` | `3.2.7` | 2024-06-15 |
| `win11-x64` | `3.2.8` | 2024-12-19 |
| `win11-arm` | `3.2.7` | 2024-07-14 |
| `win11-arm` | `3.2.9` | 2025-02-23 |
| `linux-x64` | `3.2.8` | 2025-01-10 |
| `linux-arm` | `3.2.9` | 2025-02-15 |
@ -295,6 +295,25 @@ curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.mini.min.js
curl -LO https://docs.sheetjs.com/pres.xlsx`}
</CodeBlock>
:::note pass
In PowerShell, the command may fail with a parameter error:
```
Invoke-WebRequest : A parameter cannot be found that matches parameter name 'LO'.
```
`curl.exe` must be invoked directly:
<CodeBlock language="bash">{`\
curl.exe -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js
curl.exe -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.mini.min.js
curl.exe -LO https://docs.sheetjs.com/pres.xlsx`}
</CodeBlock>
:::
6) Replace `Program.cs` with the following:
```csharp title="Program.cs"
@ -360,7 +379,7 @@ Running `dotnet run` without the filename argument will show an error:
```
Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
at Program.<Main>$(String[] args) in C:\Users\Me\SheetJSJurassic\Program.cs:line 15
at Program.<Main>$(String[] args) in C:\Users\SheetJS\SheetJSJurassic\Program.cs:line 12
```
The command must be run with an argument specifying the name of the workbook:

@ -89,7 +89,7 @@ _Addressing Cells_
```
</TabItem>
<TabItem value="es2020" label="New in 2020">
<TabItem value="esnext" label="Newer environments">
```diff
-var cell = sheet["B7"];
@ -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 2019:
the default settings in Excel 2024:
| key | Excel feature | default |
|:----------|:----------------------------------------------|:--------|

@ -177,8 +177,8 @@ ws["B4"].l = { Target: "../SheetJS.xlsm" }; /* Link to ../SheetJS.xlsm */
:::caution pass
Relative Paths have undefined behavior in the SpreadsheetML 2003 format. Excel
2019 will treat a `..\` parent mark as two levels up.
Relative Paths have undefined behavior in the SpreadsheetML 2003 format. Excel
2024 will treat a `..\` parent mark as two levels up.
:::

@ -11,7 +11,7 @@ Comments and Notes have evolved over the years.
Excel 2.0 - '95 "Notes" were displayed in a master list.
Excel '97 - 2019 "Comments" float over the sheet and support styling.
Excel '97 - 2024 "Comments" float over the sheet and support styling.
Excel 365 introduced "Threaded Comments" which do not support rich text but do
allow users to "reply". The original "Comments" were renamed to "Notes".

@ -275,7 +275,7 @@ tend to use a continued fraction approach.
The common algorithm produces unexpected results for "Up to one digit":
| Value | Mediant | Excel 2019 |
| Value | Mediant | Excel 2024 |
|:------|--------:|-----------:|
| `0.3` | `2/7` | `2/7` |
| `1.3` | `1 2/7` | `1 1/3` |

@ -47,7 +47,7 @@ These instructions were tested on the following platforms:
| MacOS 15.2 (ARM64) | `darwin-arm` | 2025-01-27 |
| Windows 10 (x64) + WSL Ubuntu | `win10-x64` | 2024-07-12 |
| Windows 11 (x64) + WSL Ubuntu | `win11-x64` | 2025-01-14 |
| Windows 11 (ARM) + WSL Ubuntu | `win11-arm` | 2024-05-23 |
| Windows 11 (ARM) + WSL Ubuntu | `win11-arm` | 2025-02-23 |
With some additional dependencies, the unminified scripts are reproducible and
tests will pass in Windows XP with NodeJS 5.10.0.