This commit is contained in:
SheetJS 2023-09-22 02:32:55 -04:00
parent 871acac297
commit 7f366322e7
35 changed files with 226 additions and 118 deletions

@ -182,6 +182,41 @@ var read = XLSX.read, utils = XLSX.utils;
The ["Bundlers" demo](/docs/demos/bundler) includes examples for specific tools.
### Dynamic Imports
Dynamic imports with `import()` will only download scripts when they are needed.
:::warning pass
Dynamic `import` will always download the full contents of the imported scripts!
**This is a design flaw in ECMAScript modules**
:::
It is strongly recommended to use a wrapper script that imports and re-exports
the parts of the SheetJS library that are used in a specific function or page:
```js title="SheetJSWriteWrapper.js (wrapper script)"
/* This wrapper pulls `writeFileXLSX` and `utils` from the SheetJS library */
import { utils, writeFileXLSX } from "xlsx";
export { utils, writeFileXLSX };
```
A dynamic import of the wrapper script will only load the requested features:
```js
async function export_data() {
/* dynamically import the SheetJS Wrapper */
// highlight-next-line
const XLSX = await import ("./SheetJSWriteWrapper");
const wb = XLSX.utils.book_new();
const ws = XLSX.utils.aoa_to_sheet([["a","b","c"],[1,2,3]]);
XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
XLSX.writeFileXLSX(wb, "SheetJSDynamicWrapperTest.xlsx");
}
```
## Encoding support
If Encoding support is required, `cpexcel.full.mjs` must be manually imported:

@ -35,8 +35,8 @@ input element for loading user-submitted files.
## Installation
The [Standalone scripts](/docs/getting-started/installation/standalone) can be
referenced in a `SCRIPT` tag from the HTML entrypoint page.
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
can be referenced in a `SCRIPT` tag from the HTML entry point page.
The `$http` service can request binary data using `"arraybuffer"` response type.
This maps to the `"array"` input format for `XLSX.read`:

@ -17,7 +17,7 @@ practices have evolved, stress testing SheetJS libraries have revealed bugs in
the respective bundlers. This demo collects various notes and provides basic
examples.
:::note
:::note pass
Issues should be reported to the respective bundler projects. Typically it is
considered a bundler bug if the tool cannot properly handle JS libraries.
@ -374,7 +374,7 @@ node esb.node.js
</details>
:::note
:::note pass
Bundling raw data is supported using the `binary` loader. For more advanced
content workflows, [ViteJS](/docs/demos/static/vitejs) is the recommended tool.
@ -482,11 +482,10 @@ click the "Click to Export!" button to generate a file.
## RequireJS
[Standalone scripts](/docs/getting-started/installation/standalone) comply with AMD `define`
semantics, enabling use in RequireJS out of the box.
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
comply with AMD `define` semantics. They support RequireJS out of the box.
To enable use of the alias `xlsx`, the RequireJS config should set an alias in
the `paths` property:
The RequireJS config should set the `xlsx` alias in the `paths` property:
```js
require.config({
@ -518,14 +517,18 @@ This demo was last tested on 2023 May 07 against RequireJS `2.3.3`
:::
:::caution
:::caution pass
The `r.js` optimizer does not support ES6 syntax including arrow functions and
the `async` keyword! The demo JS code uses traditional functions.
:::
0) Download the standalone build:
0) Download the SheetJS Standalone script and move to the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}
@ -824,7 +827,7 @@ writeFileXLSX(workbook, "Presidents.xlsx");
</html>
```
:::note
:::note pass
Unlike other bundlers, Snowpack requires a full page including `HEAD` element.
@ -885,7 +888,7 @@ yarn add https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} regenerat
</TabItem>
</Tabs>
:::note
:::note pass
The `regenerator-runtime` dependency is used for transpiling `fetch` and is not
required if the interface code does not use `fetch` or Promises.
@ -980,7 +983,7 @@ Click on "Click here to export" to generate a file.
With configuration, SystemJS supports both browser and NodeJS deployments.
:::caution
:::caution pass
This demo was written against SystemJS 0.19, the most popular SystemJS version
used with Angular applications. In the years since the release, Angular and
@ -1045,7 +1048,7 @@ _cb = function(evt) { /* ... do work here ... */ };
</TabItem>
<TabItem value="nodejs" label="NodeJS">
:::caution
:::caution pass
While SystemJS works in NodeJS, the built-in `require` should be preferred.
@ -1166,7 +1169,7 @@ node SheetJSystem.js
If the demo worked, `Presidents.xlsx` will be created.
:::note
:::note pass
As it uses `fetch`, this demo requires Node 18.
@ -1297,7 +1300,7 @@ set_cptable(cptable);
:::
:::caution
:::caution pass
Some older webpack projects will throw an error in the browser:
@ -1306,7 +1309,7 @@ require is not defined (xlsx.mjs)
```
This was a bug in Webpack and affected projects built with `create-react-app`.
If upgrading Webpack is not feasible, explicitly import the standalone builds:
If upgrading Webpack is not feasible, explicitly import the standalone script:
```js
import * as XLSX from 'xlsx/dist/xlsx.full.min.js';
@ -1404,9 +1407,9 @@ module.exports = {
<Tabs>
<TabItem value="23" label="2.x and 3.x">
:::note
:::note pass
In Webpack 2.x and 3.x, the import statement must use the standalone build:
In Webpack 2.x and 3.x, the import statement must use the standalone script:
```js title="index.js"
// highlight-next-line
@ -1429,7 +1432,7 @@ npx webpack@2.x -p
npx webpack@3.x -p
```
:::caution
:::caution pass
The minifier that ships with Webpack 2.x does not handle `async` functions. The
unminified code generated by Webpack will work for the purposes of the demo. It
@ -1450,7 +1453,7 @@ version above 4.0 can be pinned by locally installing webpack and the CLI tool.
**Webpack 4.x**
:::note
:::info pass
Webpack 4 is incompatible with Node 18+. When this demo was last tested, NodeJS
was locally downgraded to 16.20.0
@ -1504,7 +1507,7 @@ Click on "Click here to export" to generate a file.
</details>
:::note
:::note pass
The [Webpack section of the Content demo](/docs/demos/static/webpack) covers asset
loaders. They are ideal for static sites pulling data from sheets at build time.

@ -19,9 +19,22 @@ SheetJS libraries strive to maintain broad browser and JS engine compatibility.
## Integration
["Standalone Browser Scripts"](/docs/getting-started/installation/standalone)
section has instructions for obtaining or referencing the standalone scripts.
These are designed to be referenced with `<script>` tags.
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
can be referenced in a `SCRIPT` tag from an HTML page. For legacy deployments,
the shim script must be loaded first:
<CodeBlock language="html">{`\
<!-- SheetJS version ${current} \`shim.min.js\` -->
<script lang="javascript" src="https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js"></script>
<!-- SheetJS version ${current} \`xlsx.full.min.js\` -->
<script lang="javascript" src="https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js"></script>
<script>
/* display SheetJS version */
if(typeof console == "object" && console.log) console.log(XLSX.version);
else if(typeof alert != "undefined") alert(XLSX.version);
else document.write(XLSX.version);
</script>`}
</CodeBlock>
## Internet Explorer
@ -39,14 +52,15 @@ IE, but there are approaches using ActiveX or Flash.
This demo includes all of the support files for the Flash and ActiveX methods.
1) Download the standalone script and shim to a server that will host the demo:
1) Download the SheetJS Standalone script and shim script. Move both files to
the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js`}>shim.min.js</a></li>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>
</ul>
2) [Download the demo ZIP](pathname:///ie/SheetJSIESupport.zip) to the server.
2) [Download the demo ZIP](pathname:///ie/SheetJSIESupport.zip).
The ZIP includes the demo HTML file as well as the Downloadify support files.

@ -11,7 +11,7 @@ Headless automation involves controlling "headless browsers" to access websites
and submit or download data. It is also possible to automate browsers using
custom browser extensions.
The [SheetJS standalone script](/docs/getting-started/installation/standalone)
The [SheetJS standalone scripts](/docs/getting-started/installation/standalone)
can be added to any website by inserting a `SCRIPT` tag. Headless browsers
usually provide utility functions for running custom snippets in the browser and
passing data back to the automation script.

@ -58,7 +58,7 @@ a sample app in the Android and the iOS (if applicable) simulators.
## Integration Details
The [SheetJS NodeJS Module](/docs/getting-started/installation/nodejs) can be
imported from the main `App.js` entrypoint or any script in the project.
imported from any component or script in the app.
### Internal State

@ -10,8 +10,8 @@ sidebar_custom_props:
import current from '/version.js';
import CodeBlock from '@theme/CodeBlock';
The [NodeJS Module](/docs/getting-started/installation/nodejs) can be imported
from the main entrypoint or any script in the project.
The [SheetJS NodeJS Module](/docs/getting-started/installation/nodejs) can be
imported from any component or script in the app.
The "Complete Example" creates an app that looks like the screenshots below:

@ -39,8 +39,8 @@ The ["Demo"](#demo) creates an app that looks like the screenshots below:
## Integration Details
The [NodeJS Module](/docs/getting-started/installation/nodejs) can be imported
from the main entrypoint or any script in the project.
The [SheetJS NodeJS Module](/docs/getting-started/installation/nodejs) can be
imported from any component or script in the app.
This demo will use the Quasar ViteJS starter project with VueJS and Cordova.
The starter places the backing Cordova project in the `src-cordova` folder.

@ -74,7 +74,7 @@ npx @capacitor/cli telemetry
## Integration Details
The [SheetJS NodeJS Module](/docs/getting-started/installation/nodejs) can be
imported from the main entrypoint or any script in the project.
imported from any component or script in the app.
### Internal State

@ -10,8 +10,8 @@ sidebar_custom_props:
import current from '/version.js';
import CodeBlock from '@theme/CodeBlock';
The [NodeJS Module](/docs/getting-started/installation/nodejs) can be imported
from the main entrypoint or any script in the project.
The [SheetJS NodeJS Module](/docs/getting-started/installation/nodejs) can be
imported from any component or script in the app.
The "Complete Example" creates an app that looks like the screenshots below:

@ -12,8 +12,8 @@ import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import CodeBlock from '@theme/CodeBlock';
The [Standalone scripts](/docs/getting-started/installation/standalone) can be
referenced in a `SCRIPT` tag from the entry point HTML page.
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
can be referenced in a `SCRIPT` tag from the entry point HTML page.
The "Complete Example" creates an app that looks like the screenshots below:

@ -49,8 +49,8 @@ app to read and write workbooks. The app will look like the screenshots below:
## Integration Details
The [SheetJS Standalone build](/docs/getting-started/installation/standalone)
can be added to the entry `index.html`
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
can be added to the `index.html` entry point.
For code running in the window, native methods must be explicitly enabled in the
NeutralinoJS `neutralino.conf.json` settings file[^1].
@ -197,6 +197,7 @@ This demo was tested in the following environments:
| macOS 13.5.1 | x64 | `v4.13.0` | `v3.11.0` | 2023-08-26 |
| macOS 13.4.1 | ARM | `v4.10.0` | `v3.8.2` | 2023-06-28 |
| Windows 10 | x64 | `v4.13.0` | `v3.11.0` | 2023-08-26 |
| Windows 11 | ARM | `v4.13.0` | `v3.11.0` | 2023-09-21 |
| Linux (HoloOS) | x64 | `v4.13.0` | `v3.11.0` | 2023-08-26 |
:::
@ -211,8 +212,12 @@ npx @neutralinojs/neu create sheetjs-neu
cd sheetjs-neu
```
2) Download [Standalone build](/docs/getting-started/installation/standalone)
and place in the `resources/js/` folder:
2) Download the SheetJS Standalone script and move to the `resources/js/`
subdirectory in the `sheetjs-neu` folder:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -L -o resources/js/xlsx.full.min.js https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}
@ -238,9 +243,7 @@ line must be added to the first block.
:::
4) Set up skeleton app and print version info:
- Replace the contents of `resources/index.html` with the following code:
4) Replace the contents of `resources/index.html` with the following code:
```html title="resources/index.html"
<!DOCTYPE html>
@ -265,9 +268,9 @@ line must be added to the first block.
</html>
```
- Append the following code to `resources/styles.css` to center the table:
5) Append the following code to `resources/styles.css` to center the table:
```css title="resources/styles.css"
```css title="resources/styles.css (add to end)"
#info {
width:100%;
text-align: unset;
@ -277,7 +280,7 @@ table {
}
```
- Print the version number in the `showInfo` method of `resources/js/main.js`:
6) Print the version number in the `showInfo` method of `resources/js/main.js`:
```js title="resources/js/main.js"
function showInfo() {
@ -293,7 +296,7 @@ function showInfo() {
}
```
5) Run the app:
7) Run the app:
```bash
npx @neutralinojs/neu run
@ -301,9 +304,9 @@ npx @neutralinojs/neu run
<p>The app should print <code>SheetJS Version {current}</code></p>
6) Add the following code to the bottom of `resources/js/main.js`:
8) Add the following code to the bottom of `resources/js/main.js`:
```js title="resources/js/main.js"
```js title="resources/js/main.js (add to end)"
(async() => {
const ab = await (await fetch("https://sheetjs.com/pres.numbers")).arrayBuffer();
const wb = XLSX.read(ab);
@ -312,13 +315,13 @@ npx @neutralinojs/neu run
})();
```
Save the source file, close the app and re-run with `npx @neutralinojs/neu run`
9) Close the app and relaunch the app with `npx @neutralinojs/neu run`
When the app loads, a table should show in the main screen.
7) Add `importFile` and `exportFile` to the bottom of `resources/js/main.js`:
10) Add `importFile` and `exportFile` to the bottom of `resources/js/main.js`:
```js title="resources/js/main.js"
```js title="resources/js/main.js (add to end)"
async function importData() {
/* show open dialog */
const [filename] = await Neutralino.os.showOpenDialog('Open a spreadsheet');
@ -347,7 +350,7 @@ async function exportData() {
}
```
Save the source file, close the app and re-run with `npx @neutralinojs/neu run`
11) Close the app and re-run with `npx @neutralinojs/neu run`
When the app loads, click the "Import File" button and select a spreadsheet to
see the contents.
@ -361,7 +364,7 @@ save as `SheetJSNeu` will not automatically add the `.xlsx` extension!
:::
8) Build production apps:
12) Build production apps:
```bash
npx @neutralinojs/neu build

@ -78,7 +78,7 @@ The recommended approach for suppressing telemetry is explicitly passing the
## Integration Details
The [SheetJS NodeJS Module](/docs/getting-started/installation/nodejs) can be
imported from the main `App.js` entrypoint or any script in the project.
imported from any component or script in the app.
### Internal State

@ -265,7 +265,11 @@ curl -LO https://docs.sheetjs.com/cli/snapshot.rs
curl -LO https://docs.sheetjs.com/cli/sheet2csv.rs
```
2) Download the [standalone build](/docs/getting-started/installation/standalone):
2) Download the SheetJS Standalone script and move to the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}

@ -99,8 +99,8 @@ function SheetJSAlaSQL() {
#### Standalone Scripts
The [Standalone scripts](/docs/getting-started/installation/standalone) should
be loaded before the `alasql` script:
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
should be loaded before the `alasql` script:
<CodeBlock language="html">{`\
<script src="https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js"></script>

@ -117,9 +117,10 @@ should see a page like
## Adding the Standalone Script
The [standalone script](/docs/getting-started/installation/standalone) can be downloaded and
added as a static resource. Due to Salesforce naming restrictions, it will have
to be renamed to `sheetjs.js` when adding the static resource.
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
can be downloaded and added as a static resource.
Due to Salesforce name restrictions, the script must be renamed to `sheetjs.js`
<p>1) Download <a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>https://cdn.sheetjs.com/xlsx-{current}/package/dist/xlsx.full.min.js</a></p>

@ -12,8 +12,8 @@ will not accept new V2 extensions, but these can be sideloaded using the
:::
The [Standalone scripts](/docs/getting-started/installation/standalone) can be
integrated in a Chromium extension.
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
can be integrated in a Chromium extension.
This demo includes examples for exporting bookmarks from a popup and scraping
tables with a content script and a background script.

@ -15,9 +15,9 @@ covers the API for NodeJS scripts
:::
The [Standalone scripts](/docs/getting-started/installation/standalone) can be
uploaded into an Apps Script project. Once uploaded, the `XLSX` variable is
available to other scripts in the project.
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
can be uploaded into an Apps Script project. Once uploaded, the `XLSX` variable
is available to other scripts in the project.
Google Sheets currently does not provide support for working with Apple Numbers
files and some legacy file formats. SheetJS fills the gap.
@ -138,7 +138,11 @@ and paste in the terminal. Press Enter after pasting the ID.
### Adding the SheetJS Library
7) Download the standalone build and move to the project directory:
7) Download the SheetJS Standalone script and move to the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}

@ -14,9 +14,9 @@ Open Scripting Architecture (OSA), a built-in feature in macOS introduced in
language and grammar. macOS releases starting from Yosemite (OSX 10.10) include
native support for scripting with JavaScript.
The [Standalone scripts](/docs/getting-started/installation/standalone) can be
parsed and evaluated from the JS engine. Once evaluated, the `XLSX` variable is
available as a global. A JS stub can expose methods from AppleScript scripts.
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
can be parsed and evaluated from the JS engine. Once evaluated, the `XLSX`
global will be defined. A JS stub can expose methods from AppleScript scripts.
:::note
@ -144,7 +144,13 @@ extractResult(res)
This example will read from a specified filename and print the first worksheet
data in CSV format.
0) Download the standalone script and test file:
0) Download the SheetJS Standalone script and test file. Move both files to
the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>
<li><a href="https://sheetjs.com/pres.numbers">pres.numbers</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://sheetjs.com/pres.numbers

@ -123,7 +123,8 @@ const worker = new Worker("./worker.js");
## Installation
In all cases, `importScripts` in a Worker can load the [Standalone scripts](/docs/getting-started/installation/standalone)
In all cases, `importScripts` in a Worker can load the
[SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
<CodeBlock language="js">{`\
importScripts("https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js");`}

@ -10,8 +10,8 @@ import CodeBlock from '@theme/CodeBlock';
Duktape is an embeddable JS engine written in C. It has been ported to a number
of exotic architectures and operating systems.
The [Standalone scripts](/docs/getting-started/installation/standalone) can be
parsed and evaluated in a Duktape context.
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
can be parsed and evaluated in a Duktape context.
## Integration Details
@ -140,7 +140,8 @@ tar -xJf duktape-2.7.0.tar.xz
mv duktape-2.7.0/src/*.{c,h} .
```
1) Download the standalone script, shim and test file:
1) Download the SheetJS Standalone script, shim script and test file. Move all
three files to the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js`}>shim.min.js</a></li>

@ -627,7 +627,8 @@ cl /MT /I..\v8\v8\ /I..\v8\v8\include hello-world.cc /GR- v8_monolith.lib Advapi
### Add SheetJS
12) Download the standalone script and test file:
12) Download the SheetJS Standalone script and test file. Save both files in
the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>
@ -743,7 +744,11 @@ cargo add v8
cargo run
```
3) Download the [Standalone build](/docs/getting-started/installation/standalone):
3) Download the SheetJS Standalone script and move to the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}

@ -9,8 +9,8 @@ import CodeBlock from '@theme/CodeBlock';
Rhino is an ES3+ engine in Java.
The [Standalone scripts](/docs/getting-started/installation/standalone) can be
parsed and evaluated in a Rhino context.
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
can be parsed and evaluated in a Rhino context.
This demo wraps workbooks and sheets into separate Java classes. The final
result is a JAR.
@ -134,7 +134,8 @@ cd sheetjs-java
curl -L -o rhino.jar https://repo1.maven.org/maven2/org/mozilla/rhino/1.7.14/rhino-1.7.14.jar
```
1) Download the standalone script and the test file:
1) Download the SheetJS Standalone script and the test file. Save both files in
the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>

@ -11,8 +11,8 @@ iOS and MacOS ship with the JavaScriptCore framework for running JS code from
Swift and Objective-C. Hybrid function invocation is tricky, but explicit data
passing is straightforward. The demo shows a standalone Swift sample for MacOS.
The [Standalone scripts](/docs/getting-started/installation/standalone) can be
parsed and evaluated in a JSC context.
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
can be parsed and evaluated in a JSC context.
:::warning Platform Limitations
@ -153,7 +153,8 @@ mkdir sheetjswift
cd sheetjswift
```
1) Download the standalone script and the test file:
1) Download the SheetJS Standalone script and the test file. Save both files in
the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>

@ -243,7 +243,8 @@ The terminal should display `Hello SheetJS`
### Add SheetJS
5) Download the standalone script, shim and test file:
5) Download the SheetJS Standalone script, shim script and test file. Move all
three files to the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>

@ -9,8 +9,8 @@ import CodeBlock from '@theme/CodeBlock';
Goja is a pure Go implementation of ECMAScript 5.
The [Standalone scripts](/docs/getting-started/installation/standalone) can be
parsed and evaluated in a Goja context.
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
can be parsed and evaluated in a Goja context.
## Integration Details
@ -114,7 +114,8 @@ go mod init SheetGoja
go get github.com/dop251/goja
```
1) Download the standalone script, shim and test file:
1) Download the SheetJS Standalone script, shim script and test file. Move all
three files to the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>
@ -134,7 +135,7 @@ curl -LO https://sheetjs.com/pres.numbers`}
curl -LO https://docs.sheetjs.com/goja/SheetGoja.go
```
3) Build standalone `SheetGoja` binary:
3) Build the standalone `SheetGoja` binary:
```bash
go build SheetGoja.go

@ -13,8 +13,8 @@ Nashorn is a JavaScript engine for Java. It shipped with Java distributions
starting with Java 8 and was eventually removed in Java 15. The project was
spun off and a compatible standalone release is available for Java 15+.
The [Standalone scripts](/docs/getting-started/installation/standalone) can be
parsed and evaluated in a Nashorn context.
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
can be parsed and evaluated in a Nashorn context.
## Integration Details
@ -128,7 +128,8 @@ curl -LO "https://search.maven.org/remotecontent?filepath=org/ow2/asm/asm-util/9
</TabItem>
</Tabs>
1) Download the standalone script, shim script, and the test file:
1) Download the SheetJS Standalone script, shim script and test file. Move all
three files to the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>

@ -303,7 +303,8 @@ gcc -o sheetjs.quick -Wall sheetjs.quick.c libquickjs.a -lm
This program tries to parse the file specified by the first argument
4) Download the standalone script and test file:
4) Download the SheetJS Standalone script and test file. Save both files in
the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>
@ -335,7 +336,8 @@ This demo was last tested on 2023 August 26 against QuickJS commit `2788d71`.
0) Ensure `quickjs` command line utility is installed
1) Download the standalone script and the test file:
1) Download the SheetJS Standalone script and the test file. Save both files in
the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>

@ -402,7 +402,8 @@ make init
make sheetjs-hermes
```
6) Download the standalone script and test file:
6) Download the SheetJS Standalone script and the test file. Save both files in
the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>
@ -436,7 +437,8 @@ as a Base64 string and directly add it to an amalgamated script.
0) Install the `hermes` command line tool
1) Download the standalone script and test file:
1) Download the SheetJS Standalone script and the test file. Save both files in
the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>

@ -84,9 +84,9 @@ def convert(obj):
_Loading the Library_
The [Standalone scripts](/docs/getting-started/installation/standalone) can be
parsed and evaluated from the JS engine. Once evaluated, the `XLSX` variable is
available as a global.
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
can be parsed and evaluated from the JS engine. Once evaluated, the `XLSX`
variable is available as a global.
Assuming the standalone library is in the same directory as the source file,
the script can be evaluated with `eval`:
@ -363,8 +363,11 @@ cd ..
### Demo
1) Follow the [standalone script](/docs/getting-started/installation/standalone)
instructions to download the script:
1) Download the SheetJS Standalone script and move to the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}
@ -410,10 +413,10 @@ If Pandas is installed, the script will display DataFrame metadata:
```
RangeIndex: 5 entries, 0 to 4
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Name 5 non-null object
1 Index 5 non-null int64
1 Index 5 non-null int64
dtypes: int64(1), object(1)
```

@ -9,8 +9,8 @@ import CodeBlock from '@theme/CodeBlock';
ExecJS is a Ruby abstraction over a number of JS runtimes including V8.
The [Standalone scripts](/docs/getting-started/installation/standalone) can be
parsed and evaluated in every supported runtime.
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
can be parsed and evaluated in every supported runtime.
## Integration Details
@ -91,7 +91,8 @@ sudo gem install execjs
:::
1) Download the standalone script and test file:
1) Download the SheetJS Standalone script and the test file. Save both files in
the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>

@ -11,8 +11,8 @@ import CodeBlock from '@theme/CodeBlock';
ChakraCore is an embeddable JS engine written in C++.
The [Standalone scripts](/docs/getting-started/installation/standalone) can be
parsed and evaluated in a ChakraCore context.
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
can be parsed and evaluated in a ChakraCore context.
## Integration Details
@ -326,7 +326,8 @@ cl sheetjs.ch.cpp ChakraCore.lib /I ChakraCore\lib\Jsrt /link /LIBPATH:ChakraCor
</TabItem>
</Tabs>
5) Download the standalone script, shim script, and test file:
5) Download the SheetJS Standalone script, shim script and test file. Move all
three files to the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>
@ -383,7 +384,8 @@ It will typically be placed in the `ChakraCore/out/Test/` folder.
:::
1) Download the standalone script, shim, and test file:
1) Download the SheetJS Standalone script, shim script and test file. Move all
three files to the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>

@ -16,8 +16,8 @@ more performant engine like [`v8`](/docs/demos/engines/v8#rust)
Boa is a pure-Rust JavaScript engine.
The [Standalone scripts](/docs/getting-started/installation/standalone) can be
parsed and evaluated in a Boa context.
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
can be parsed and evaluated in a Boa context.
## Integration Details
@ -136,7 +136,11 @@ cargo run
cargo add boa_engine
```
3) Download the [Standalone build](/docs/getting-started/installation/standalone):
3) Download the SheetJS Standalone script and move to the project directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}

@ -7,6 +7,7 @@ pagination_next: solutions/input
import current from '/version.js';
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import CodeBlock from '@theme/CodeBlock';
Browser vendors and other organizations have built "JavaScript engines". They
are independent software libraries that are capable of running JS scripts.
@ -156,7 +157,8 @@ cd jerryscript
python tools/build.py --error-messages=ON --logging=ON --mem-heap=8192 --cpointer-32bit=ON
```
1) Download the standalone script, shim, and test file:
1) Download the SheetJS Standalone script, shim script and test file. Move all
three files to the `jerryscript` cloned repo directory:
<ul>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}>xlsx.full.min.js</a></li>
@ -164,6 +166,12 @@ python tools/build.py --error-messages=ON --logging=ON --mem-heap=8192 --cpointe
<li><a href="https://sheetjs.com/pres.xlsx">pres.xlsx</a></li>
</ul>
<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://sheetjs.com/pres.xlsx`}
</CodeBlock>
2) Bundle the test file and create `payload.js`:
```bash

@ -200,13 +200,17 @@ Each primitive value in JavaScript has a type which can be displayed with the
| String | `"SheetJS"` | `"string"` |
| Number | `5433795` | `"number"` |
#### Null and Undefined
#### Undefined
`undefined` in JavaScript is spiritually equivalent to a blank cell value in
Excel. By default, SheetJS methods that generate worksheets skip `undefined`.
#### Null
`null` in JavaScript typically is used to represent no data. The `#NULL!` error
in Excel is intended to break formula expressions that reference the cells[^3].
`#NULL!` is spiritually similar to `NaN`.
By default, SheetJS methods that generate worksheets skip `null`. Some methods
include options to generate `#NULL!` error cells.
@ -229,7 +233,7 @@ valid strings for the requested file formats.
The underlying value of a JavaScript number is always the original number.
SheetJS export methods will translate supported numbers to numeric cells. `NaN`
values will be translated to Excel `#NUM!` errors. Infinities and subnormal
values will be translated to Excel `#NUM!` errors. Infinities and denormalized
values are translated to `#DIV/0!`.
#### Dates