Added Test Data to docs site

This commit is contained in:
SheetJS 2024-04-26 00:16:13 -04:00
parent 671729b289
commit b503ebc14d
134 changed files with 2901 additions and 461 deletions

@ -123,6 +123,7 @@ This demo was last tested in the following deployments:
|:-------------|:--------|:-----------|
| `darwin-x64` | `1.1.4` | 2024-04-19 |
| `win10-x64` | `1.1.4` | 2024-04-19 |
| `linux-x64` | `1.1.4` | 2024-04-25 |
:::
@ -158,7 +159,7 @@ import * as fs from 'fs';
XLSX.set_fs(fs);
/* fetch JSON data and parse */
const url = "https://sheetjs.com/data/executive.json";
const url = "https://docs.sheetjs.com/executive.json";
const raw_data = await (await fetch(url)).json();
/* filter for the Presidents */

@ -43,14 +43,14 @@ sequenceDiagram
## Acquire Data
The raw data is available in JSON form[^1]. It has been mirrored at
https://sheetjs.com/data/executive.json
https://docs.sheetjs.com/executive.json
### Raw Data
Acquiring the data is straightforward with `fetch`:
```js
const url = "https://sheetjs.com/data/executive.json";
const url = "https://docs.sheetjs.com/executive.json";
const raw_data = await (await fetch(url)).json();
```
@ -555,7 +555,7 @@ browser should try to create `Presidents.xlsx`
```jsx live
function Presidents() { return ( <button onClick={async () => {
/* fetch JSON data and parse */
const url = "https://sheetjs.com/data/executive.json";
const url = "https://docs.sheetjs.com/executive.json";
const raw_data = await (await fetch(url)).json();
/* filter for the Presidents */
@ -603,7 +603,7 @@ Save the following script to `SheetJSStandaloneDemo.html`:
<script>
(async() => {
/* fetch JSON data and parse */
const url = "https://sheetjs.com/data/executive.json";
const url = "https://docs.sheetjs.com/executive.json";
const raw_data = await (await fetch(url)).json();
\n\
/* filter for the Presidents */
@ -677,7 +677,7 @@ const XLSX = require("xlsx");
(async() => {
/* fetch JSON data and parse */
const url = "https://sheetjs.com/data/executive.json";
const url = "https://docs.sheetjs.com/executive.json";
const raw_data = await (await fetch(url)).json();
/* filter for the Presidents */
@ -755,7 +755,7 @@ const axios = require("axios");
(async() => {
/* fetch JSON data and parse */
const url = "https://sheetjs.com/data/executive.json";
const url = "https://docs.sheetjs.com/executive.json";
// highlight-next-line
const raw_data = (await axios(url, {responseType: "json"})).data;
@ -814,7 +814,7 @@ Save the following script to `SheetJSDeno.ts`:
import * as XLSX from 'https://cdn.sheetjs.com/xlsx-${current}/package/xlsx.mjs';
\n\
/* fetch JSON data and parse */
const url = "https://sheetjs.com/data/executive.json";
const url = "https://docs.sheetjs.com/executive.json";
const raw_data = await (await fetch(url)).json();
\n\
/* filter for the Presidents */
@ -871,7 +871,7 @@ Save the following script to `SheetJSNW.html`:
<script>
(async() => {
/* fetch JSON data and parse */
const url = "https://sheetjs.com/data/executive.json";
const url = "https://docs.sheetjs.com/executive.json";
const raw_data = await (await fetch(url)).json();
\n\
/* filter for the Presidents */
@ -978,7 +978,7 @@ import RNBU from 'react-native-blob-util';
const make_workbook = async() => {
/* fetch JSON data and parse */
const url = "https://sheetjs.com/data/executive.json";
const url = "https://docs.sheetjs.com/executive.json";
const raw_data = await (await fetch(url)).json();
/* filter for the Presidents */

@ -41,7 +41,7 @@ sequenceDiagram
## Download File
The raw data is available in a XLS workbook[^1]. It has been mirrored at
https://sheetjs.com/data/PortfolioSummary.xls
https://docs.sheetjs.com/PortfolioSummary.xls
:::info pass
@ -55,7 +55,7 @@ data is not lost in the sands of time.
Downloading the file is straightforward with `fetch`:
```js
const url = "https://sheetjs.com/data/PortfolioSummary.xls";
const url = "https://docs.sheetjs.com/PortfolioSummary.xls";
const file = await (await fetch(url)).arrayBuffer();
```
@ -180,7 +180,7 @@ function SheetJSheetNames() {
const [names, setNames] = React.useState([]);
React.useEffect(() => { (async() =>{
/* parse workbook */
const url = "https://sheetjs.com/data/PortfolioSummary.xls";
const url = "https://docs.sheetjs.com/PortfolioSummary.xls";
const file = await (await fetch(url)).arrayBuffer();
const workbook = XLSX.read(file);
/* display sheet names */
@ -228,7 +228,7 @@ function SheetJSHTMLView() {
const [__html, setHTML] = React.useState("");
React.useEffect(() => { (async() =>{
/* parse workbook, limiting to 20 rows */
const url = "https://sheetjs.com/data/PortfolioSummary.xls";
const url = "https://docs.sheetjs.com/PortfolioSummary.xls";
const workbook = XLSX.read(await (await fetch(url)).arrayBuffer(), {sheetRows:20});
/* get first worksheet */
const worksheet = workbook.Sheets[workbook.SheetNames[0]];
@ -247,7 +247,7 @@ The key points from looking at the table are:
- The data starts on row 7
- Rows 5 and 6 are the header rows, with merged cells for common titles
- For yearly data (2007-2012), columns A and B are merged
- For quarterly data (2013Q1 - 2023Q2), column A stores the year. Cells may be
- For quarterly data (2013Q1 and later), column A stores the year. Cells may be
merged vertically to span 4 quarters
## Extract Data
@ -315,7 +315,7 @@ function SheetJSAoAHoles() {
const [rows, setRows] = React.useState([]);
React.useEffect(() => { (async() =>{
/* parse workbook */
const url = "https://sheetjs.com/data/PortfolioSummary.xls";
const url = "https://docs.sheetjs.com/PortfolioSummary.xls";
const workbook = XLSX.read(await (await fetch(url)).arrayBuffer());
/* get first worksheet */
const worksheet = workbook.Sheets[workbook.SheetNames[0]];
@ -466,7 +466,7 @@ function SheetJSAoAFilled() {
const [rows, setRows] = React.useState([]);
React.useEffect(() => { (async() =>{
/* parse workbook */
const url = "https://sheetjs.com/data/PortfolioSummary.xls";
const url = "https://docs.sheetjs.com/PortfolioSummary.xls";
const workbook = XLSX.read(await (await fetch(url)).arrayBuffer());
/* get first worksheet */
const worksheet = workbook.Sheets[workbook.SheetNames[0]];
@ -488,11 +488,20 @@ function SheetJSAoAFilled() {
### Select Data Rows
At this point, every data row will have the year in column `A`. Since this year
is between 2007 and 2023, `Array#filter` can be used to select the rows:
At this point, each data row will have the year in column `A` and dollar value
in column `C`. The year will be between 2007 and 2024 and the value will be
positive. The following function tests a data row:
```js
const rows = raw_data.filter(r => r[0] >= 2007 && r[0] <= 2023);
const is_valid_row = r =>
r[0] >= 2007 && r[0] <= 2024 // year (column A) is between 2007 and 2024
&& r[2] > 0; // dollar value (column C) is positive
```
`Array#filter`, using the previous test, can select the matching rows:
```js
const rows = raw_data.filter(r => r[0] >= 2007 && r[0] <= 2024 && r[2] > 0);
```
<details>
@ -503,7 +512,7 @@ function SheetJSAoAFiltered() {
const [rows, setRows] = React.useState([]);
React.useEffect(() => { (async() =>{
/* parse workbook */
const url = "https://sheetjs.com/data/PortfolioSummary.xls";
const url = "https://docs.sheetjs.com/PortfolioSummary.xls";
const workbook = XLSX.read(await (await fetch(url)).arrayBuffer());
/* get first worksheet */
const worksheet = workbook.Sheets[workbook.SheetNames[0]];
@ -512,7 +521,7 @@ function SheetJSAoAFiltered() {
var last_year = 0;
raw_data.forEach(r => last_year = r[0] = (r[0] != null ? r[0] : last_year));
/* select data rows */
const rows = raw_data.filter(r => r[0] >= 2007 && r[0] <= 2023);
const rows = raw_data.filter(r => r[0] >= 2007 && r[0] <= 2024 && r[2] > 0);
/* display data */
setRows(rows);
})(); }, []);
@ -579,7 +588,7 @@ function SheetJSObjects() {
const [rows, setRows] = React.useState([]);
React.useEffect(() => { (async() =>{
/* parse workbook */
const url = "https://sheetjs.com/data/PortfolioSummary.xls";
const url = "https://docs.sheetjs.com/PortfolioSummary.xls";
const workbook = XLSX.read(await (await fetch(url)).arrayBuffer());
/* get first worksheet */
const worksheet = workbook.Sheets[workbook.SheetNames[0]];
@ -588,7 +597,7 @@ function SheetJSObjects() {
var last_year = 0;
raw_data.forEach(r => last_year = r[0] = (r[0] != null ? r[0] : last_year));
/* select data rows */
const rows = raw_data.filter(r => r[0] >= 2007 && r[0] <= 2023);
const rows = raw_data.filter(r => r[0] >= 2007 && r[0] <= 2024 && r[2] > 0);
/* generate row objects */
const objects = rows.map(r => ({FY: r[0], FQ: r[1], total: r[8]}));
/* display data */
@ -684,7 +693,7 @@ function StudentAidTotal() {
const [num, setNum] = React.useState(5);
React.useEffect(() => { (async() =>{
/* parse workbook */
const url = "https://sheetjs.com/data/PortfolioSummary.xls";
const url = "https://docs.sheetjs.com/PortfolioSummary.xls";
const workbook = XLSX.read(await (await fetch(url)).arrayBuffer());
/* get first worksheet */
@ -696,7 +705,7 @@ function StudentAidTotal() {
raw_data.forEach(r => last_year = r[0] = (r[0] != null ? r[0] : last_year));
/* select data rows */
const rows = raw_data.filter(r => r[0] >= 2007 && r[0] <= 2023);
const rows = raw_data.filter(r => r[0] >= 2007 && r[0] <= 2024 && r[2] > 0);
/* generate row objects */
const objects = rows.map(r => ({FY: r[0], FQ: r[1], total: r[8]}));
@ -739,7 +748,7 @@ Save the following script to `SheetJSStandaloneDemo.html`:
<script>
(async() => {
/* parse workbook */
const url = "https://sheetjs.com/data/PortfolioSummary.xls";
const url = "https://docs.sheetjs.com/PortfolioSummary.xls";
const workbook = XLSX.read(await (await fetch(url)).arrayBuffer());
\n\
/* get first worksheet */
@ -751,7 +760,7 @@ Save the following script to `SheetJSStandaloneDemo.html`:
raw_data.forEach(r => last_year = r[0] = (r[0] != null ? r[0] : last_year));
\n\
/* select data rows */
const rows = raw_data.filter(r => r[0] >= 2007 && r[0] <= 2023);
const rows = raw_data.filter(r => r[0] >= 2007 && r[0] <= 2024 && r[2] > 0);
\n\
/* generate row objects */
const objects = rows.map(r => ({FY: r[0], FQ: r[1], total: r[8]}));
@ -805,7 +814,7 @@ Save the following script to `SheetJSNodeJS.js`:
const XLSX = require("xlsx");
(async() => {
/* parse workbook */
const url = "https://sheetjs.com/data/PortfolioSummary.xls";
const url = "https://docs.sheetjs.com/PortfolioSummary.xls";
const workbook = XLSX.read(await (await fetch(url)).arrayBuffer());
/* get first worksheet */
@ -817,7 +826,7 @@ const XLSX = require("xlsx");
raw_data.forEach(r => last_year = r[0] = (r[0] != null ? r[0] : last_year));
/* select data rows */
const rows = raw_data.filter(r => r[0] >= 2007 && r[0] <= 2023);
const rows = raw_data.filter(r => r[0] >= 2007 && r[0] <= 2024 && r[2] > 0);
/* generate row objects */
const objects = rows.map(r => ({FY: r[0], FQ: r[1], total: r[8]}));
@ -878,7 +887,7 @@ Save the following script to `SheetJSNW.html`:
<script>
(async() => {
/* parse workbook */
const url = "https://sheetjs.com/data/PortfolioSummary.xls";
const url = "https://docs.sheetjs.com/PortfolioSummary.xls";
const workbook = XLSX.read(await (await fetch(url)).arrayBuffer());
\n\
/* get first worksheet */
@ -890,7 +899,7 @@ Save the following script to `SheetJSNW.html`:
raw_data.forEach(r => last_year = r[0] = (r[0] != null ? r[0] : last_year));
\n\
/* select data rows */
const rows = raw_data.filter(r => r[0] >= 2007 && r[0] <= 2023);
const rows = raw_data.filter(r => r[0] >= 2007 && r[0] <= 2024 && r[2] > 0);
\n\
/* generate row objects */
const objects = rows.map(r => ({FY: r[0], FQ: r[1], total: r[8]}));
@ -979,7 +988,7 @@ const App = () => {
const [rows, setRows] = React.useState([]);
React.useEffect(() => { (async() =>{
/* parse workbook */
const url = "https://sheetjs.com/data/PortfolioSummary.xls";
const url = "https://docs.sheetjs.com/PortfolioSummary.xls";
const workbook = read(await (await fetch(url)).arrayBuffer());
/* get first worksheet */
@ -991,7 +1000,7 @@ const App = () => {
raw_data.forEach(r => last_year = r[0] = (r[0] != null ? r[0] : last_year));
/* select data rows */
const rows = raw_data.filter(r => r[0] >= 2007 && r[0] <= 2023);
const rows = raw_data.filter(r => r[0] >= 2007 && r[0] <= 2024 && r[2] > 0);
/* generate row objects */
const objects = rows.map(r => ({FY: r[0], FQ: r[1], total: r[8]}));

@ -19,7 +19,7 @@ This demo covers details elided in the official DanfoJS documentation.
:::note Tested Deployments
This example was last tested on 2024 January 03 against DanfoJS 1.1.2.
This example was last tested on 2024 April 25 against DanfoJS 1.1.2.
:::
@ -114,7 +114,7 @@ const first_three_rows = await dfd.readExcel(url, { parsingOptions: {
#### URL source
The following example fetches a [test file](https://sheetjs.com/pres.xlsx),
The following example fetches a [test file](https://docs.sheetjs.com/pres.xlsx),
parses with SheetJS and generates a DanfoJS dataframe.
```jsx live
@ -122,7 +122,7 @@ function DanfoReadExcelURL() {
const [text, setText] = React.useState("");
React.useEffect(() => { (async() => {
if(typeof dfd === "undefined") return setText("RELOAD THIS PAGE!");
const df = await dfd.readExcel("https://sheetjs.com/pres.xlsx");
const df = await dfd.readExcel("https://docs.sheetjs.com/pres.xlsx");
setText("" + df.head());
})(); }, []);
return (<pre>{text}</pre>);

@ -90,7 +90,7 @@ function worksheet_to_csv_url(worksheet) {
### CSV Demo
This demo shows a simple model fitting using the "cars" dataset from TensorFlow.
The [sample XLS file](https://sheetjs.com/data/cd.xls) contains the data. The
The [sample XLS file](https://docs.sheetjs.com/cd.xls) contains the data. The
data processing mirrors the official "Making Predictions from 2D Data" demo[^3].
```mermaid
@ -118,7 +118,7 @@ flowchart LR
The demo builds a model for predicting MPG from Horsepower data. It:
- fetches https://sheetjs.com/data/cd.xls
- fetches https://docs.sheetjs.com/cd.xls
- parses the data with the SheetJS `read`[^4] method
- selects the first worksheet[^5] and converts to CSV using `sheet_to_csv`[^6]
- generates a blob URL from the CSV text
@ -172,7 +172,7 @@ function SheetJSToTFJSCSV() {
setResults([]); setOutput(""); setDisabled(true);
try {
/* fetch file */
const f = await fetch("https://sheetjs.com/data/cd.xls");
const f = await fetch("https://docs.sheetjs.com/cd.xls");
const ab = await f.arrayBuffer();
/* parse file and get first worksheet */
const wb = XLSX.read(ab);
@ -256,7 +256,7 @@ loads data from a JSON file:
]
```
In real use cases, data is stored in [spreadsheets](https://sheetjs.com/data/cd.xls)
In real use cases, data is stored in [spreadsheets](https://docs.sheetjs.com/cd.xls)
![cd.xls screenshot](pathname:///files/cd.png)
@ -273,7 +273,7 @@ Differences from the official example are highlighted below:
async function getData() {
// highlight-start
/* fetch file */
const carsDataResponse = await fetch('https://sheetjs.com/data/cd.xls');
const carsDataResponse = await fetch('https://docs.sheetjs.com/cd.xls');
/* get file data (ArrayBuffer) */
const carsDataAB = await carsDataResponse.arrayBuffer();
/* parse */
@ -429,7 +429,7 @@ var worksheet = XLSX.utils.aoa_to_sheet(aoa);
[^1]: See [`tf.data.csv`](https://js.tensorflow.org/api/latest/#data.csv) in the TensorFlow.js documentation
[^2]: See [`sheet_to_csv` in "CSV and Text"](/docs/api/utilities/csv#delimiter-separated-output)
[^3]: The ["Making Predictions from 2D Data" example](https://codelabs.developers.google.com/codelabs/tfjs-training-regression/) uses a hosted JSON file. The [sample XLS file](https://sheetjs.com/data/cd.xls) includes the same data.
[^3]: The ["Making Predictions from 2D Data" example](https://codelabs.developers.google.com/codelabs/tfjs-training-regression/) uses a hosted JSON file. The [sample XLS file](https://docs.sheetjs.com/cd.xls) includes the same data.
[^4]: See [`read` in "Reading Files"](/docs/api/parse-options)
[^5]: See ["Workbook Object"](/docs/csf/book)
[^6]: See [`sheet_to_csv` in "CSV and Text"](/docs/api/utilities/csv#delimiter-separated-output)

@ -378,12 +378,12 @@ curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}
4) Download the following test scripts and files:
- [`pres.numbers` test file](https://sheetjs.com/pres.numbers)
- [`pres.numbers` test file](https://docs.sheetjs.com/pres.numbers)
- [`sheetjs.py` script](pathname:///pandas/sheetjs.py)
- [`SheetJSPandas.py` script](pathname:///pandas/SheetJSPandas.py)
```bash
curl -LO https://sheetjs.com/pres.numbers
curl -LO https://docs.sheetjs.com/pres.numbers
curl -LO https://docs.sheetjs.com/pandas/sheetjs.py
curl -LO https://docs.sheetjs.com/pandas/SheetJSPandas.py
```

@ -61,9 +61,9 @@ loaded into the site. This sheet will have known columns.
#### State
The example [presidents sheet](https://sheetjs.com/pres.xlsx) has one header row
with "Name" and "Index" columns. The natural JS representation is an object for
each row, using the values in the first rows as keys:
The example [presidents sheet](https://docs.sheetjs.com/pres.xlsx) has one
header row with "Name" and "Index" columns. The natural JS representation is an
object for each row, using the values in the first rows as keys:
<table>
<thead><tr><th>Spreadsheet</th><th>State</th></tr></thead>
@ -165,8 +165,8 @@ import { read, utils } from 'xlsx';
/* Fetch and update the state once */
useEffect(() => { (async() => {
/* Download from https://sheetjs.com/pres.numbers */
const f = await fetch("https://sheetjs.com/pres.numbers");
/* Download from https://docs.sheetjs.com/pres.numbers */
const f = await fetch("https://docs.sheetjs.com/pres.numbers");
const ab = await f.arrayBuffer();
// highlight-start
@ -192,8 +192,8 @@ import { read, utils } from 'xlsx';
/* Fetch and update the state once */
useEffect(() => { (async() => {
/* Download from https://sheetjs.com/pres.numbers */
const f = await fetch("https://sheetjs.com/pres.numbers");
/* Download from https://docs.sheetjs.com/pres.numbers */
const f = await fetch("https://docs.sheetjs.com/pres.numbers");
const ab = await f.arrayBuffer();
// highlight-start
@ -295,7 +295,7 @@ export default function SheetJSKaiokenAoO() {
/* Fetch and update the state once */
useEffect(() => { (async() => {
const f = await (await fetch("https://sheetjs.com/pres.xlsx")).arrayBuffer();
const f = await (await fetch("https://docs.sheetjs.com/pres.xlsx")).arrayBuffer();
const wb = read(f); // parse the array buffer
const ws = wb.Sheets[wb.SheetNames[0]]; // get the first worksheet
const data = utils.sheet_to_json<President>(ws); // generate objects
@ -412,7 +412,7 @@ and test the page.
</TabItem>
</Tabs>
When the page loads, the app will fetch https://sheetjs.com/pres.xlsx and
When the page loads, the app will fetch https://docs.sheetjs.com/pres.xlsx and
display the data from the first worksheet in a TABLE. The "Export XLSX" button
will generate a workbook that can be opened in a spreadsheet editor.
@ -443,7 +443,7 @@ export default function SheetJSKaiokenHTML() {
/* Fetch and update the state once */
useEffect(() => { (async() => {
const f = await (await fetch("https://sheetjs.com/pres.xlsx")).arrayBuffer();
const f = await (await fetch("https://docs.sheetjs.com/pres.xlsx")).arrayBuffer();
const wb = read(f); // parse the array buffer
const ws = wb.Sheets[wb.SheetNames[0]]; // get the first worksheet
// highlight-start
@ -559,7 +559,7 @@ and test the page.
</TabItem>
</Tabs>
When the page loads, the app will fetch https://sheetjs.com/pres.xlsx and
When the page loads, the app will fetch https://docs.sheetjs.com/pres.xlsx and
display the data from the first worksheet in a TABLE. The "Export XLSX" button
will generate a workbook that can be opened in a spreadsheet editor.

@ -57,9 +57,9 @@ loaded into the site. This sheet will have known columns.
#### State
The example [presidents sheet](https://sheetjs.com/pres.xlsx) has one header row
with "Name" and "Index" columns. The natural JS representation is an object for
each row, using the values in the first rows as keys:
The example [presidents sheet](https://docs.sheetjs.com/pres.xlsx) has one
header row with "Name" and "Index" columns. The natural JS representation is an
object for each row, using the values in the first rows as keys:
<table>
<thead><tr><th>Spreadsheet</th><th>State</th></tr></thead>
@ -161,8 +161,8 @@ import { read, utils } from 'xlsx';
/* Fetch and update the state once */
useEffect(() => { (async() => {
/* Download from https://sheetjs.com/pres.numbers */
const f = await fetch("https://sheetjs.com/pres.numbers");
/* Download from https://docs.sheetjs.com/pres.numbers */
const f = await fetch("https://docs.sheetjs.com/pres.numbers");
const ab = await f.arrayBuffer();
// highlight-start
@ -188,8 +188,8 @@ import { read, utils } from 'xlsx';
/* Fetch and update the state once */
useEffect(() => { (async() => {
/* Download from https://sheetjs.com/pres.numbers */
const f = await fetch("https://sheetjs.com/pres.numbers");
/* Download from https://docs.sheetjs.com/pres.numbers */
const f = await fetch("https://docs.sheetjs.com/pres.numbers");
const ab = await f.arrayBuffer();
// highlight-start
@ -286,7 +286,7 @@ export default function SheetJSReactAoO() {
/* Fetch and update the state once */
useEffect(() => { (async() => {
const f = await (await fetch("https://sheetjs.com/pres.xlsx")).arrayBuffer();
const f = await (await fetch("https://docs.sheetjs.com/pres.xlsx")).arrayBuffer();
// highlight-start
const wb = read(f); // parse the array buffer
const ws = wb.Sheets[wb.SheetNames[0]]; // get the first worksheet
@ -544,7 +544,7 @@ and test the page.
</TabItem>
</Tabs>
When the page loads, the app will fetch https://sheetjs.com/pres.xlsx and
When the page loads, the app will fetch https://docs.sheetjs.com/pres.xlsx and
display the data from the first worksheet in a TABLE. The "Export XLSX" button
will generate a workbook that can be opened in a spreadsheet editor.
@ -577,7 +577,7 @@ export default function SheetJSReactHTML() {
/* Fetch and update the state once */
useEffect(() => { (async() => {
const f = await (await fetch("https://sheetjs.com/pres.xlsx")).arrayBuffer();
const f = await (await fetch("https://docs.sheetjs.com/pres.xlsx")).arrayBuffer();
const wb = read(f); // parse the array buffer
const ws = wb.Sheets[wb.SheetNames[0]]; // get the first worksheet
// highlight-start
@ -713,7 +713,7 @@ and test the page.
</TabItem>
</Tabs>
When the page loads, the app will fetch https://sheetjs.com/pres.xlsx and
When the page loads, the app will fetch https://docs.sheetjs.com/pres.xlsx and
display the data from the first worksheet in a TABLE. The "Export XLSX" button
will generate a workbook that can be opened in a spreadsheet editor.

@ -87,9 +87,9 @@ loaded into the site. This sheet will have known columns.
#### State
The example [presidents sheet](https://sheetjs.com/pres.xlsx) has one header row
with "Name" and "Index" columns. The natural JS representation is an object for
each row, using the values in the first rows as keys:
The example [presidents sheet](https://docs.sheetjs.com/pres.xlsx) has one
header row with "Name" and "Index" columns. The natural JS representation is an
object for each row, using the values in the first rows as keys:
<table>
<thead><tr><th>Spreadsheet</th><th>State</th></tr></thead>
@ -184,8 +184,8 @@ interface President { Name: string; Index: number };
export class AppComponent {
rows: President[] = [ { Name: "SheetJS", Index: 0 }];
ngOnInit(): void { (async() => {
/* Download from https://sheetjs.com/pres.numbers */
const f = await fetch("https://sheetjs.com/pres.numbers");
/* Download from https://docs.sheetjs.com/pres.numbers */
const f = await fetch("https://docs.sheetjs.com/pres.numbers");
const ab = await f.arrayBuffer();
// highlight-start
@ -331,8 +331,8 @@ export class AppComponent {
// highlight-next-line
rows: President[] = [ { Name: "SheetJS", Index: 0 }];
ngOnInit(): void { (async() => {
/* Download from https://sheetjs.com/pres.numbers */
const f = await fetch("https://sheetjs.com/pres.numbers");
/* Download from https://docs.sheetjs.com/pres.numbers */
const f = await fetch("https://docs.sheetjs.com/pres.numbers");
const ab = await f.arrayBuffer();
/* parse workbook */
@ -389,8 +389,8 @@ export class AppComponent {
// highlight-next-line
rows: President[] = [ { Name: "SheetJS", Index: 0 }];
ngOnInit(): void { (async() => {
/* Download from https://sheetjs.com/pres.numbers */
const f = await fetch("https://sheetjs.com/pres.numbers");
/* Download from https://docs.sheetjs.com/pres.numbers */
const f = await fetch("https://docs.sheetjs.com/pres.numbers");
const ab = await f.arrayBuffer();
/* parse workbook */
@ -536,8 +536,8 @@ export class AppComponent {
@ViewChild('tableau') tabeller!: ElementRef<HTMLDivElement>;
// highlight-end
ngOnInit(): void { (async() => {
/* Download from https://sheetjs.com/pres.numbers */
const f = await fetch("https://sheetjs.com/pres.numbers");
/* Download from https://docs.sheetjs.com/pres.numbers */
const f = await fetch("https://docs.sheetjs.com/pres.numbers");
const ab = await f.arrayBuffer();
/* parse workbook */
@ -583,8 +583,8 @@ export class AppComponent {
@ViewChild('tableau') tabeller!: ElementRef<HTMLDivElement>;
// highlight-end
ngOnInit(): void { (async() => {
/* Download from https://sheetjs.com/pres.numbers */
const f = await fetch("https://sheetjs.com/pres.numbers");
/* Download from https://docs.sheetjs.com/pres.numbers */
const f = await fetch("https://docs.sheetjs.com/pres.numbers");
const ab = await f.arrayBuffer();
/* parse workbook */

@ -56,9 +56,9 @@ loaded into the site. This sheet will have known columns.
#### State
The example [presidents sheet](https://sheetjs.com/pres.xlsx) has one header row
with "Name" and "Index" columns. The natural JS representation is an object for
each row, using the values in the first rows as keys:
The example [presidents sheet](https://docs.sheetjs.com/pres.xlsx) has one
header row with "Name" and "Index" columns. The natural JS representation is an
object for each row, using the values in the first rows as keys:
<table>
<thead><tr><th>Spreadsheet</th><th>State</th></tr></thead>
@ -170,8 +170,8 @@ const pres = ref([]);
/* Fetch and update the state once */
onMounted(async() => {
/* Download from https://sheetjs.com/pres.numbers */
const f = await fetch("https://sheetjs.com/pres.numbers");
/* Download from https://docs.sheetjs.com/pres.numbers */
const f = await fetch("https://docs.sheetjs.com/pres.numbers");
const ab = await f.arrayBuffer();
// highlight-start
@ -207,8 +207,8 @@ const pres = ref<President[]>([]);
/* Fetch and update the state once */
onMounted(async() => {
/* Download from https://sheetjs.com/pres.numbers */
const f = await fetch("https://sheetjs.com/pres.numbers");
/* Download from https://docs.sheetjs.com/pres.numbers */
const f = await fetch("https://docs.sheetjs.com/pres.numbers");
const ab = await f.arrayBuffer();
// highlight-start
@ -315,8 +315,8 @@ import { read, utils, writeFileXLSX } from 'xlsx';
const rows = ref([]);
onMounted(async() => {
/* Download from https://sheetjs.com/pres.numbers */
const f = await fetch("https://sheetjs.com/pres.numbers");
/* Download from https://docs.sheetjs.com/pres.numbers */
const f = await fetch("https://docs.sheetjs.com/pres.numbers");
const ab = await f.arrayBuffer();
/* parse workbook */
@ -484,8 +484,8 @@ const html = ref("");
const tableau = ref();
onMounted(async() => {
/* Download from https://sheetjs.com/pres.numbers */
const f = await fetch("https://sheetjs.com/pres.numbers");
/* Download from https://docs.sheetjs.com/pres.numbers */
const f = await fetch("https://docs.sheetjs.com/pres.numbers");
const ab = await f.arrayBuffer();
/* parse workbook */

@ -50,8 +50,8 @@ depends on the application.
### Array of Objects
Typically, some users will create a spreadsheet with source data that should be
loaded into the site. This sheet will have known columns. For example, our
[presidents sheet](https://sheetjs.com/pres.xlsx) has "Name" / "Index" columns:
loaded into the site. This sheet will have known columns. For example, "Name"
and "Index" are used in [`pres.xlsx`](https://docs.sheetjs.com/pres.xlsx):
![`pres.xlsx` data](pathname:///pres.png)
@ -65,7 +65,7 @@ interface President {
Index: number;
}
const f = await (await fetch("https://sheetjs.com/pres.xlsx")).arrayBuffer();
const f = await (await fetch("https://docs.sheetjs.com/pres.xlsx")).arrayBuffer();
const wb = read(f);
const data = utils.sheet_to_json<President>(wb.Sheets[wb.SheetNames[0]]);
console.log(data);
@ -96,7 +96,7 @@ let pres = [];
/* Fetch and update the state once */
onMount(async() => {
const f = await (await fetch("https://sheetjs.com/pres.xlsx")).arrayBuffer();
const f = await (await fetch("https://docs.sheetjs.com/pres.xlsx")).arrayBuffer();
const wb = read(f); // parse the array buffer
const ws = wb.Sheets[wb.SheetNames[0]]; // get the first worksheet
// highlight-start
@ -202,7 +202,7 @@ let tbl;
/* Fetch and update the state once */
onMount(async() => {
const f = await (await fetch("https://sheetjs.com/pres.xlsx")).arrayBuffer();
const f = await (await fetch("https://docs.sheetjs.com/pres.xlsx")).arrayBuffer();
const wb = read(f); // parse the array buffer
const ws = wb.Sheets[wb.SheetNames[0]]; // get the first worksheet
// highlight-start

@ -73,17 +73,17 @@ property to `"arraybuffer"` ensures the result is an `ArrayBuffer` object.
The SheetJS [`read`](/docs/api/parse-options) method can parse the `ArrayBuffer`
and return a SheetJS workbook object[^2].
The following controller fetches [a sample file](https://sheetjs.com/pres.xlsx),
This controller fetches [a sample file](https://docs.sheetjs.com/pres.xlsx),
parses the result into a workbook, extracts the first worksheet, and uses the
SheetJS [`sheet_to_html`](/docs/api/utilities/html#html-table-output) method to
generate a HTML table:
```js
```js title="Sample Controller"
/* The controller function must accept a `$http` argument */
app.controller('sheetjs', function($scope, $http) {
/* fetch https://sheetjs.com/pres.xlsx */
/* fetch https://docs.sheetjs.com/pres.xlsx */
$http({
method:'GET', url:'https://sheetjs.com/pres.xlsx',
method:'GET', url:'https://docs.sheetjs.com/pres.xlsx',
/* ensure the result is an ArrayBuffer object */
responseType:'arraybuffer'
}).then(function(data) {
@ -167,9 +167,9 @@ depends on the application.
### Array of Objects
The example [presidents sheet](https://sheetjs.com/pres.xlsx) has one header row
with "Name" and "Index" columns. The natural JS representation is an object for
each row, using the values in the first rows as keys:
The example [presidents sheet](https://docs.sheetjs.com/pres.xlsx) has one
header row with "Name" and "Index" columns. The natural JS representation is an
object for each row, using the values in the first rows as keys:
<table>
<thead><tr><th>Spreadsheet</th><th>State</th></tr></thead>
@ -198,7 +198,7 @@ file, generates row objects, and stores the array in the state:
```js
app.controller('sheetjs', function($scope, $http) {
$http({
url:'https://sheetjs.com/pres.xlsx',
url:'https://docs.sheetjs.com/pres.xlsx',
method:'GET', responseType:'arraybuffer'
}).then(function(data) {
var wb = XLSX.read(data.data);
@ -275,7 +275,7 @@ app.controller('sheetjs', function($scope, $http) {
XLSX.writeFile(wb, "SheetJSAngularJSAoO.xlsx");
};
$http({
url:'https://sheetjs.com/pres.xlsx',
url:'https://docs.sheetjs.com/pres.xlsx',
method:'GET', responseType:'arraybuffer'
}).then(function(data) {
var wb = XLSX.read(data.data);
@ -315,7 +315,7 @@ requires the `ngSanitize` plugin[^4].
var app = angular.module('s5s', ['ngSanitize']);
app.controller('sheetjs', function($scope, $http) {
$http({
url:'https://sheetjs.com/pres.xlsx',
url:'https://docs.sheetjs.com/pres.xlsx',
method:'GET', responseType:'arraybuffer'
}).then(function(data) {
var wb = XLSX.read(data.data);
@ -371,7 +371,7 @@ app.controller('sheetjs', function($scope, $http) {
XLSX.writeFile(wb, "SheetJSAngularJSHTML.xlsx");
};
$http({
url:'https://sheetjs.com/pres.xlsx',
url:'https://docs.sheetjs.com/pres.xlsx',
method:'GET', responseType:'arraybuffer'
}).then(function(data) {
var wb = XLSX.read(data.data);

@ -99,7 +99,7 @@ The following example generates a HTML table from the first worksheet:
<div id="tbl"></div>
<script>
require(["dojo/request/xhr", "xlsx"], function(xhr, _XLSX) {
xhr("https://sheetjs.com/pres.numbers", {
xhr("https://docs.sheetjs.com/pres.numbers", {
headers: { "X-Requested-With": null },
// highlight-next-line
handleAs: "arraybuffer"
@ -155,7 +155,7 @@ require([
], function(ready, xhr, Memory, registry, _XLSX) {
ready(function() {
/* fetch test file */
xhr("https://sheetjs.com/pres.xlsx", {
xhr("https://docs.sheetjs.com/pres.xlsx", {
headers: { "X-Requested-With": null },
handleAs: "arraybuffer"
}).then(function(ab) {

@ -98,7 +98,7 @@ interface President {
async function xport() {
/* fetch JSON data and parse */
const url = "https://sheetjs.com/data/executive.json";
const url = "https://docs.sheetjs.com/executive.json";
const raw_data: President[] = await (await fetch(url)).json();
/* filter for the Presidents */

@ -167,7 +167,7 @@ import { utils, version, writeFileXLSX } from 'xlsx';
document.getElementById("xport").addEventListener("click", function() {
/* fetch JSON data and parse */
var url = "https://sheetjs.com/data/executive.json";
var url = "https://docs.sheetjs.com/executive.json";
fetch(url).then(function(res) { return res.json(); }).then(function(raw_data) {
/* filter for the Presidents */

@ -105,7 +105,7 @@ const { utils, version, writeFileXLSX } = require('xlsx');
document.getElementById("xport").addEventListener("click", function() {
/* fetch JSON data and parse */
var url = "https://sheetjs.com/data/executive.json";
var url = "https://docs.sheetjs.com/executive.json";
fetch(url).then(function(res) { return res.json(); }).then(function(raw_data) {
/* filter for the Presidents */

@ -162,7 +162,7 @@ example, the following script corresponds to RequireJS `2.1.22`:
require(["xlsx"], function(XLSX) {
document.getElementById("xport").addEventListener("click", function() {
/* fetch JSON data and parse */
var url = "https://sheetjs.com/data/executive.json";
var url = "https://docs.sheetjs.com/executive.json";
fetch(url).then(function(res) { return res.json(); }).then(function(raw_data) {
/* filter for the Presidents */

@ -111,7 +111,7 @@ import { utils, version, writeFileXLSX } from 'xlsx';
document.getElementById("xport").addEventListener("click", async() => {
/* fetch JSON data and parse */
const url = "https://sheetjs.com/data/executive.json";
const url = "https://docs.sheetjs.com/executive.json";
const raw_data = await (await fetch(url)).json();
/* filter for the Presidents */

@ -86,7 +86,7 @@ import { utils, version, writeFileXLSX } from 'xlsx';
document.getElementById("vers").innerText = version;
document.getElementById("xport").onclick = async() => {
/* fetch JSON data and parse */
const url = "https://sheetjs.com/data/executive.json";
const url = "https://docs.sheetjs.com/executive.json";
const raw_data = await (await fetch(url)).json();
/* filter for the Presidents */
@ -146,7 +146,7 @@ import { utils, version, writeFileXLSX } from 'xlsx';
document.getElementById("vers").innerText = version;
document.getElementById("xport").onclick = async() => {
/* fetch JSON data and parse */
const url = "https://sheetjs.com/data/executive.json";
const url = "https://docs.sheetjs.com/executive.json";
const raw_data = await (await fetch(url)).json();
/* filter for the Presidents */

@ -121,7 +121,7 @@ import { utils, version, writeFileXLSX } from 'xlsx';
document.getElementById("xport").addEventListener("click", async() => {
/* fetch JSON data and parse */
const url = "https://sheetjs.com/data/executive.json";
const url = "https://docs.sheetjs.com/executive.json";
const raw_data = await (await fetch(url)).json();
/* filter for the Presidents */

@ -102,7 +102,7 @@ import { utils, version, writeFileXLSX } from 'xlsx';
document.getElementById("xport").addEventListener("click", async() => {
/* fetch JSON data and parse */
const url = "https://sheetjs.com/data/executive.json";
const url = "https://docs.sheetjs.com/executive.json";
const raw_data = await (await fetch(url)).json();
/* filter for the Presidents */
@ -232,7 +232,7 @@ import { utils, version, writeFileXLSX } from 'xlsx';
document.getElementById("xport").addEventListener("click", async() => {
/* fetch JSON data and parse */
const url = "https://sheetjs.com/data/executive.json";
const url = "https://docs.sheetjs.com/executive.json";
const raw_data = await (await fetch(url)).json();
/* filter for the Presidents */

@ -62,7 +62,7 @@ flowchart LR
```js
/* download data into an ArrayBuffer object */
const res = await fetch("https://sheetjs.com/pres.numbers");
const res = await fetch("https://docs.sheetjs.com/pres.numbers");
const ab = await res.arrayBuffer(); // recover data as ArrayBuffer
/* parse file */
@ -71,10 +71,9 @@ const wb = XLSX.read(ab);
## Browser Demos
When the page is accessed, the browser will attempt to download https://sheetjs.com/pres.numbers
and read the workbook. The old table will be replaced with a table whose
contents match the first worksheet. The table is generated using the SheetJS
`sheet_to_html` method[^2]
When the page is accessed, https://docs.sheetjs.com/pres.numbers will be fetched
and parsed. The old table will be replaced with a table whose contents match the
first worksheet. The SheetJS `sheet_to_html` method[^2] creates the HTML table.
:::note Tested Deployments
@ -111,7 +110,7 @@ req.send();
<details>
<summary><b>Live Download demo</b> (click to show)</summary>
This demo uses `XMLHttpRequest` to download https://sheetjs.com/pres.numbers
This demo uses `XMLHttpRequest` to fetch https://docs.sheetjs.com/pres.numbers
and show the data in an HTML table.
```jsx live
@ -122,7 +121,7 @@ function SheetJSXHRDL() {
React.useEffect(() => { (async() => {
/* Fetch file */
const req = new XMLHttpRequest();
req.open("GET", "https://sheetjs.com/pres.numbers", true);
req.open("GET", "https://docs.sheetjs.com/pres.numbers", true);
req.responseType = "arraybuffer";
req.onload = e => {
/* Parse file */
@ -164,8 +163,8 @@ fetch(url).then(function(res) {
<details>
<summary><b>Live Download demo</b> (click to show)</summary>
This demo uses `fetch` to download https://sheetjs.com/pres.numbers and show
the data in an HTML table.
This demo uses `fetch` to download https://docs.sheetjs.com/pres.numbers and
show the data in an HTML table.
```jsx live
function SheetJSFetchDL() {
@ -174,7 +173,7 @@ function SheetJSFetchDL() {
/* Fetch and update HTML */
React.useEffect(() => { (async() => {
/* Fetch file */
const res = await fetch("https://sheetjs.com/pres.numbers");
const res = await fetch("https://docs.sheetjs.com/pres.numbers");
const ab = await res.arrayBuffer();
/* Parse file */
@ -209,7 +208,7 @@ In a GET request, the default behavior is to return a `Blob` object. Passing
```js
$.ajax({
type: "GET", url: "https://sheetjs.com/pres.numbers",
type: "GET", url: "https://docs.sheetjs.com/pres.numbers",
/* suppress jQuery post-processing */
// highlight-next-line
@ -259,8 +258,8 @@ async function workbook_dl_axios(url) {
<details>
<summary><b>Live Download demo</b> (click to show)</summary>
This demo uses `axios` to download https://sheetjs.com/pres.numbers and show
the data in an HTML table.
This demo uses `axios` to download https://docs.sheetjs.com/pres.numbers and
show the data in an HTML table.
:::caution pass
@ -282,7 +281,7 @@ function SheetJSAxiosDL() {
React.useEffect(() => { (async() => {
if(typeof axios != "function") return setHTML("ReferenceError: axios is not defined");
/* Fetch file */
const res = await axios("https://sheetjs.com/pres.numbers", {responseType: "arraybuffer"});
const res = await axios("https://docs.sheetjs.com/pres.numbers", {responseType: "arraybuffer"});
/* Parse file */
const wb = XLSX.read(res.data);
@ -321,8 +320,8 @@ superagent
<details>
<summary><b>Live Download demo</b> (click to show)</summary>
This demo uses `superagent` to download https://sheetjs.com/pres.numbers and
show the data in an HTML table.
This demo uses `superagent` to download https://docs.sheetjs.com/pres.numbers
and show the data in an HTML table.
:::caution pass
@ -346,7 +345,7 @@ function SheetJSSuperAgentDL() {
return setHTML("ReferenceError: superagent is not defined");
/* Fetch file */
superagent
.get("https://sheetjs.com/pres.numbers")
.get("https://docs.sheetjs.com/pres.numbers")
.responseType("arraybuffer")
.end((err, res) => {
/* Parse file */
@ -375,7 +374,7 @@ The `https` module provides a low-level `get` method for HTTPS GET requests:
```js title="SheetJSHTTPSGet.js"
var https = require("https"), XLSX = require("xlsx");
https.get('https://sheetjs.com/pres.numbers', function(res) {
https.get('https://docs.sheetjs.com/pres.numbers', function(res) {
var bufs = [];
res.on('data', function(chunk) { bufs.push(chunk); });
res.on('end', function() {
@ -465,7 +464,7 @@ async function parse_from_url(url) {
}
(async() => {
const wb = await parse_from_url('https://sheetjs.com/pres.numbers');
const wb = await parse_from_url('https://docs.sheetjs.com/pres.numbers');
/* print the first worksheet to console */
var ws = wb.Sheets[wb.SheetNames[0]];
console.log(XLSX.utils.sheet_to_csv(ws));
@ -499,7 +498,7 @@ Setting the option `encoding: null` passes raw buffers:
```js title="SheetJSRequest.js"
var XLSX = require('xlsx'), request = require('request');
var url = 'https://sheetjs.com/pres.numbers';
var url = 'https://docs.sheetjs.com/pres.numbers';
/* call `request` with the option `encoding: null` */
// highlight-next-line
@ -587,7 +586,7 @@ async function workbook_dl_axios(url) {
}
(async() => {
const wb = await workbook_dl_axios('https://sheetjs.com/pres.numbers');
const wb = await workbook_dl_axios('https://docs.sheetjs.com/pres.numbers');
/* print the first worksheet to console */
var ws = wb.Sheets[wb.SheetNames[0]];
console.log(XLSX.utils.sheet_to_csv(ws));

@ -151,11 +151,11 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz express
node SheetJSExpressCSV.js
```
4) Test POST requests using https://sheetjs.com/pres.numbers . The following
commands should be run in a new terminal window:
4) Test POST requests using https://docs.sheetjs.com/pres.numbers . The commands
should be run in a new terminal window:
```bash
curl -LO https://sheetjs.com/pres.numbers
curl -LO https://docs.sheetjs.com/pres.numbers
curl -X POST -F upload=@pres.numbers http://localhost:3000/upload
```

@ -123,7 +123,7 @@ curl -LO https://docs.sheetjs.com/drash/SheetJSDrash.ts
deno run --allow-net SheetJSDrash.ts
```
3) Download the test file https://sheetjs.com/pres.numbers
3) Download the test file https://docs.sheetjs.com/pres.numbers
4) Open `http://localhost:7262/` in your browser.

@ -151,11 +151,11 @@ app.listen(3000);
bun run src/SheetJSElysia.ts
```
5) Test POST requests using https://sheetjs.com/pres.numbers . The following
commands should be run in a new terminal window:
5) Test POST requests using https://docs.sheetjs.com/pres.numbers . The commands
should be run in a new terminal window:
```bash
curl -LO https://sheetjs.com/pres.numbers
curl -LO https://docs.sheetjs.com/pres.numbers
curl -X POST -F upload=@pres.numbers http://localhost:3000/
```

@ -209,11 +209,11 @@ npx @nestjs/cli start
:::
8) Test POST requests using https://sheetjs.com/pres.numbers . The following
commands should be run in a new terminal window:
8) Test POST requests using https://docs.sheetjs.com/pres.numbers . The commands
should be run in a new terminal window:
```bash
curl -LO https://sheetjs.com/pres.numbers
curl -LO https://docs.sheetjs.com/pres.numbers
curl -X POST -F upload=@pres.numbers http://localhost:3000/sheetjs/upload
```

@ -166,11 +166,11 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz fastify
node SheetJSFastify.js
```
3) Test POST requests using https://sheetjs.com/pres.numbers . The following
commands should be run in a new terminal window:
3) Test POST requests using https://docs.sheetjs.com/pres.numbers . The commands
should be run in a new terminal window:
```bash
curl -LO https://sheetjs.com/pres.numbers
curl -LO https://docs.sheetjs.com/pres.numbers
curl -X POST -F upload=@pres.numbers http://localhost:3000/
```

@ -230,11 +230,11 @@ node main.mjs
Keep the server process running during the test.
6) Test with the [`pres.numbers` sample file](https://sheetjs.com/pres.numbers).
6) Test with the [`pres.numbers` sample file](https://docs.sheetjs.com/pres.numbers).
The following commands should be run in a new terminal window:
```bash
curl -LO https://sheetjs.com/pres.numbers
curl -LO https://docs.sheetjs.com/pres.numbers
curl -X POST -F upload=@pres.numbers http://localhost:7262/ -J -O
```

@ -378,9 +378,9 @@ const concat_RS = (stream) => new Promise((res, rej) => {
| `gmail.com` | `imap.gmail.com` |
| `fastmail.com` | `imap.fastmail.com` |
4) Download https://sheetjs.com/pres.numbers. Using a different account, send
an email to the test account and attach the file. At the end of this step, the
test account should have an email in the inbox that has an attachment.
4) Download https://docs.sheetjs.com/pres.numbers . Using a different account,
send an email to the test account and attach the file. At the end of this step,
the test account should have an email in the inbox that has an attachment.
5) Run the script:

@ -16,7 +16,7 @@ With a familiar UI, `x-spreadsheet` is an excellent choice for a modern editor.
:::note Tested Deployments
This demo was last verified on 2023 December 04.
This demo was last verified on 2024 April 25.
:::
@ -33,7 +33,7 @@ features like scrolling may not work as expected.
```jsx live
function SheetJSXSpread() {
const [url, setUrl] = React.useState("https://sheetjs.com/pres.numbers");
const [url, setUrl] = React.useState("https://docs.sheetjs.com/pres.numbers");
const [done, setDone] = React.useState(false);
const ref = React.useRef(); // ref to DIV container
const set_url = (evt) => setUrl(evt.target.value);
@ -72,7 +72,7 @@ The following snippet fetches a spreadsheet and loads the grid:
```js
(async() => {
const ab = await (await fetch("https://sheetjs.com/pres.numbers")).arrayBuffer();
const ab = await (await fetch("https://docs.sheetjs.com/pres.numbers")).arrayBuffer();
grid.loadData(stox(XLSX.read(ab)));
})();
```

@ -15,7 +15,7 @@ with a straightforward API.
:::note Tested Deployments
This demo was last verified on 2023 December 04.
This demo was last verified on 2024 April 25.
:::
@ -32,7 +32,7 @@ features like scrolling may not work as expected.
```jsx live
function SheetJSCDG() {
const [url, setUrl] = React.useState("https://sheetjs.com/pres.numbers");
const [url, setUrl] = React.useState("https://docs.sheetjs.com/pres.numbers");
const [done, setDone] = React.useState(false);
const ref = React.useRef(); // ref to DIV container
const set_url = (evt) => setUrl(evt.target.value);

@ -131,5 +131,5 @@ npm run dev
5) Load the displayed URL (typically `http://localhost:5173`) in a web browser.
When the page loads, it will try to fetch https://sheetjs.com/pres.numbers
When the page loads, it will try to fetch https://docs.sheetjs.com/pres.numbers
and display the data. Click "Export" to generate a workbook.

@ -367,7 +367,7 @@ curl -L -o src/App.tsx https://docs.sheetjs.com/gdg/App.tsx
![glide-data-grid initial view](pathname:///gdg/pre.png)
The demo downloads and processes https://sheetjs.com/pres.numbers.
The demo downloads and processes https://docs.sheetjs.com/pres.numbers .
6) Make some changes to the grid data.

@ -173,7 +173,7 @@ npm start
#### Testing
5) When the page loads, it will fetch https://sheetjs.com/pres.numbers, parse
with SheetJS, and load the data in the data grid.
5) When the page loads, it will fetch https://docs.sheetjs.com/pres.numbers,
parse with SheetJS, and load the data in the data grid.
6) Click one of the "export" buttons to export the grid data to file.

@ -225,4 +225,4 @@ curl -L -o src/App.tsx https://docs.sheetjs.com/mui/dg/App.tsx
npm run dev
```
When the page loads, it will fetch and process https://sheetjs.com/pres.numbers
When the page loads, it will process https://docs.sheetjs.com/pres.numbers

@ -57,8 +57,8 @@ The lines are automatically added if `sheets` plugin is enabled during setup.
Spreadsheet files added in the `_data` subdirectory are accessible from template
files using the name stem.
For example, [`pres.xlsx`](https://sheetjs.com/pres.xlsx) can be accessed using
the variable `pres` in a template.
For example, [`pres.xlsx`](https://docs.sheetjs.com/pres.xlsx) can be accessed
using the variable `pres` in a template.
#### Single-Sheet Workbooks
@ -168,11 +168,11 @@ The `nunjucks` plugin was included by default in Lume version 1.
:::
2) Download https://sheetjs.com/pres.xlsx and place in a `_data` subfolder:
2) Download https://docs.sheetjs.com/pres.xlsx and place in a `_data` subfolder:
```bash
mkdir -p _data
curl -L -o _data/pres.xlsx https://sheetjs.com/pres.xlsx
curl -L -o _data/pres.xlsx https://docs.sheetjs.com/pres.xlsx
```
3) Create a `index.njk` file that references the file:

@ -255,12 +255,12 @@ npm i --save gatsby-transformer-excel@4 gatsby-source-filesystem@4
:::
5) Make a `src/data` directory, download https://sheetjs.com/pres.xlsx, and
5) Make a `src/data` directory, download https://docs.sheetjs.com/pres.xlsx, and
move the downloaded file into the new folder:
```bash
mkdir -p src/data
curl -L -o src/data/pres.xlsx https://sheetjs.com/pres.xlsx
curl -L -o src/data/pres.xlsx https://docs.sheetjs.com/pres.xlsx
```
6) Edit `gatsby-config.js` and add the following lines to the `plugins` array:

@ -271,10 +271,10 @@ document.body.appendChild(elt);
curl -LO https://docs.sheetjs.com/esbuild/build.mjs
```
5) Download https://sheetjs.com/pres.numbers to the project folder:
5) Download https://docs.sheetjs.com/pres.numbers to the project folder:
```bash
curl -LO https://sheetjs.com/pres.numbers
curl -LO https://docs.sheetjs.com/pres.numbers
```
### Static Site Test

@ -227,11 +227,11 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`}
curl -O https://docs.sheetjs.com/vitejs/vite.config.ts
```
3) Make a `data` folder and download https://sheetjs.com/pres.xlsx :
3) Make a `data` folder and download https://docs.sheetjs.com/pres.xlsx :
```bash
mkdir -p data
curl -L -o data/pres.xlsx https://sheetjs.com/pres.xlsx
curl -L -o data/pres.xlsx https://docs.sheetjs.com/pres.xlsx
```
### Pure Data Test

@ -285,10 +285,10 @@ loader.raw = true;
module.exports = loader;
```
6) Download https://sheetjs.com/pres.xlsx and save to the `data` folder:
6) Download https://docs.sheetjs.com/pres.xlsx and save to the `data` folder:
```bash
curl -L -o data/pres.xlsx https://sheetjs.com/pres.xlsx
curl -L -o data/pres.xlsx https://docs.sheetjs.com/pres.xlsx
```
### Live Reload Test

@ -91,8 +91,8 @@ module.exports = (eleventyConfig) => {
Spreadsheet files added in the `_data` subdirectory are accessible from template
files using the name stem.
For example, [`pres.numbers`](https://sheetjs.com/pres.numbers) can be accessed
using the variable `pres` in a template:
For example, [`pres.numbers`](https://docs.sheetjs.com/pres.numbers) can be
accessed using the variable `pres` in a template:
```liquid title="index.njk"
<table><thead><tr><th>Name</th><th>Index</th></tr></thead>
@ -151,11 +151,11 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz @11ty/e
</Tabs>
3) Make a new `_data` subdirectory in the project. Download the example file
[`pres.xlsx`](https://sheetjs.com/pres.xlsx) into `_data`:
[`pres.xlsx`](https://docs.sheetjs.com/pres.xlsx) into `_data`:
```bash
mkdir _data
curl -Lo _data/pres.xlsx https://sheetjs.com/pres.xlsx
curl -Lo _data/pres.xlsx https://docs.sheetjs.com/pres.xlsx
```
4) Download the following files to the project folder:

@ -296,10 +296,10 @@ When the build finishes, the terminal will display a URL like:
The server is listening on that URL. Open the link in a web browser.
3) Download https://sheetjs.com/pres.xlsx and move to the `content` folder.
3) Download https://docs.sheetjs.com/pres.xlsx and move to the `content` folder.
```bash
curl -L -o content/pres.xlsx https://sheetjs.com/pres.xlsx
curl -L -o content/pres.xlsx https://docs.sheetjs.com/pres.xlsx
```
4) Modify `nuxt.config.js` as follows:
@ -615,10 +615,10 @@ When the build finishes, the terminal will display a URL like:
The server is listening on that URL. Open the link in a web browser.
3) Download https://sheetjs.com/pres.xlsx and move to the `content` folder.
3) Download https://docs.sheetjs.com/pres.xlsx and move to the `content` folder.
```bash
curl -L -o content/pres.xlsx https://sheetjs.com/pres.xlsx
curl -L -o content/pres.xlsx https://docs.sheetjs.com/pres.xlsx
```
4) Create the transformer. Two files must be saved at the root of the project:

@ -205,12 +205,12 @@ cd sheetjs-svelte
npm i
```
3) Fetch the example file [`pres.xlsx`](https://sheetjs.com/pres.xlsx) and move
to a `data` subdirectory in the root of the project:
3) Fetch the example file [`pres.xlsx`](https://docs.sheetjs.com/pres.xlsx) and
move to a `data` subdirectory in the root of the project:
```bash
mkdir -p data
curl -Lo data/pres.xlsx https://sheetjs.com/pres.xlsx
curl -Lo data/pres.xlsx https://docs.sheetjs.com/pres.xlsx
```
4) Install the SheetJS library:

@ -229,11 +229,11 @@ npx astro --version
:::
2) Fetch the example file [`pres.numbers`](https://sheetjs.com/pres.numbers):
2) Fetch the example file [`pres.numbers`](https://docs.sheetjs.com/pres.numbers):
```bash
mkdir -p src/data
curl -Lo src/data/pres.numbers https://sheetjs.com/pres.numbers
curl -Lo src/data/pres.numbers https://docs.sheetjs.com/pres.numbers
```
3) Install the SheetJS library:

@ -207,11 +207,11 @@ row. This neatly skips the first header row.
React Native versions starting from `0.72.0`[^5] support binary data in `fetch`.
This snippet downloads and parses https://sheetjs.com/pres.xlsx:
This snippet downloads and parses https://docs.sheetjs.com/pres.xlsx:
```js
/* fetch data into an ArrayBuffer */
const ab = await (await fetch("https://sheetjs.com/pres.xlsx")).arrayBuffer();
const ab = await (await fetch("https://docs.sheetjs.com/pres.xlsx")).arrayBuffer();
/* parse data */
const wb = XLSX.read(ab);
```
@ -1202,7 +1202,7 @@ npx react-native doctor
:::
8) Download https://sheetjs.com/pres.numbers and open the Downloads folder.
8) Download https://docs.sheetjs.com/pres.numbers and open the Downloads folder.
9) Click and drag `pres.numbers` from the Downloads folder into the simulator.
@ -1282,7 +1282,7 @@ cd ios; pod install; cd -
npx react-native run-ios
```
17) Download https://sheetjs.com/pres.numbers and open the Downloads folder.
17) Download https://docs.sheetjs.com/pres.numbers and open the Downloads folder.
18) In the simulator, click the Home icon to return to the home screen.
@ -1358,7 +1358,7 @@ If the device asks to allow USB debugging, tap "Allow".
npx react-native run-android
```
30) Download https://sheetjs.com/pres.numbers on the device.
30) Download https://docs.sheetjs.com/pres.numbers on the device.
31) Switch back to the "SheetJSRN" app.
@ -1447,7 +1447,7 @@ npx react-native run-ios
If the build fails, some troubleshooting notes are included in the "iOS Device
Testing" part of the [Fetch Demo](#fetch-demo) (step 17).
41) Download https://sheetjs.com/pres.numbers on the device.
41) Download https://docs.sheetjs.com/pres.numbers on the device.
42) Switch back to the "SheetJSRN" app.

@ -248,7 +248,7 @@ import { read } from 'xlsx';
const temp: string = path.join(knownFolders.temp().path, "pres.xlsx");
/* download file */
const file = await getFile("https://sheetjs.com/pres.xlsx", temp)
const file = await getFile("https://docs.sheetjs.com/pres.xlsx", temp)
/* get data */
const ab: ArrayBuffer = await getFileAccess().readBufferAsync(file.path);
@ -684,9 +684,9 @@ export class ItemService {
private items: Array<Item>;
async getItems(): Promise<Array<Item>> {
/* fetch https://sheetjs.com/pres.xlsx */
/* fetch https://docs.sheetjs.com/pres.xlsx */
const temp: string = path.join(knownFolders.temp().path, "pres.xlsx");
const ab = await getFile("https://sheetjs.com/pres.xlsx", temp)
const ab = await getFile("https://docs.sheetjs.com/pres.xlsx", temp)
/* read the temporary file */
const wb = read(await getFileAccess().readBufferAsync(ab.path));
/* translate the first worksheet to the required Item type */

@ -356,7 +356,7 @@ export default defineComponent({
To test that reading works:
- Download https://sheetjs.com/pres.numbers
- Download https://docs.sheetjs.com/pres.numbers
- In the simulator, click the Home icon to return to the home screen
- Click on the "Files" icon
- Click and drag `pres.numbers` from a Finder window into the simulator.

@ -193,7 +193,7 @@ this.file.writeFile(url, filename, blob, {replace: true});
The app in this demo will display data in a table.
On load, a [test file](https://sheetjs.com/pres.numbers) will be processed.
On load, a [test file](https://docs.sheetjs.com/pres.numbers) will be processed.
When a document is selected with the file picker, it will be processed and the
table will refresh to show the contents.

@ -443,8 +443,8 @@ curl -L -o lib/main.dart https://docs.sheetjs.com/flutter/main.dart
flutter run
```
The app fetches https://sheetjs.com/pres.numbers, parses, converts data to an
array of arrays, and presents the data in a Flutter `Table` widget.
The app fetches https://docs.sheetjs.com/pres.numbers, parses, converts data to
an array of arrays, and presents the data in a Flutter `Table` widget.
:::caution pass
@ -488,8 +488,8 @@ Searching for `minSdkVersion` should reveal the following line:
flutter run
```
The app fetches https://sheetjs.com/pres.numbers, parses, converts data to an
array of arrays, and presents the data in a Flutter `Table` widget.
The app fetches https://docs.sheetjs.com/pres.numbers, parses, converts data to
an array of arrays, and presents the data in a Flutter `Table` widget.
### Android Device

@ -268,7 +268,7 @@ The program will run on ARM64 Windows.
### Testing
5) Download [the test file `pres.numbers`](https://sheetjs.com/pres.numbers)
5) Download [the test file `pres.numbers`](https://docs.sheetjs.com/pres.numbers)
6) Launch the generated application:

@ -404,7 +404,7 @@ It will print the path to the generated program (typically in `build/bin/`).
**Testing**
The program will download [`pres.xlsx`](https://sheetjs.com/pres.xlsx) and
The program will download [`pres.xlsx`](https://docs.sheetjs.com/pres.xlsx) and
display the contents of the first worksheet in a table.
To test export features, click "Export XLSX". The app will ask for a file name

@ -620,7 +620,7 @@ or
The following features should be manually verified:
- When it is loaded, the app will download https://sheetjs.com/pres.numbers
- When it is loaded, the app will download https://docs.sheetjs.com/pres.numbers
and display the data in a table.
- Clicking "Save Data" will show a save dialog. After selecting a path and name,
the app will write a file. That file can be opened in a spreadsheet editor.

@ -329,7 +329,7 @@ npx @neutralinojs/neu run
```js title="resources/js/main.js (add to end)"
(async() => {
const ab = await (await fetch("https://sheetjs.com/pres.numbers")).arrayBuffer();
const ab = await (await fetch("https://docs.sheetjs.com/pres.numbers")).arrayBuffer();
const wb = XLSX.read(ab);
const ws = wb.Sheets[wb.SheetNames[0]];
document.getElementById('info').innerHTML = XLSX.utils.sheet_to_html(ws);

@ -633,7 +633,7 @@ When this demo was last tested on Windows 11 ARM, the build failed.
</TabItem>
</Tabs>
9) Download https://sheetjs.com/pres.xlsx.
9) Download https://docs.sheetjs.com/pres.xlsx.
10) In the app, click "Click here to Open File!" and use the file picker to
select `pres.xlsx` . The app will refresh and display the data from the file.
@ -916,7 +916,7 @@ Close the running app from the dock and close the Metro terminal window.
curl -LO https://docs.sheetjs.com/reactnative/rnm/App.tsx
```
10) Download https://sheetjs.com/pres.xlsx to the Downloads folder.
10) Download https://docs.sheetjs.com/pres.xlsx to the Downloads folder.
#### Development

@ -222,10 +222,10 @@ local NodeJS platform.
:::
4) Download the test file https://sheetjs.com/pres.numbers:
4) Download the test file https://docs.sheetjs.com/pres.numbers:
```bash
curl -o pres.numbers https://sheetjs.com/pres.numbers
curl -o pres.numbers https://docs.sheetjs.com/pres.numbers
```
5) Run the script and pass `pres.numbers` as the first argument:

@ -111,10 +111,10 @@ This demo was last tested in the following deployments:
0) Install Deno.[^6]
1) Download the test file https://sheetjs.com/pres.numbers:
1) Download the test file https://docs.sheetjs.com/pres.numbers:
```bash
curl -o pres.numbers https://sheetjs.com/pres.numbers
curl -o pres.numbers https://docs.sheetjs.com/pres.numbers
```
2) Test the script with `deno run`:

@ -124,10 +124,10 @@ This demo was tested in the following deployments:
:::
0) Download the test file https://sheetjs.com/pres.numbers:
0) Download the test file https://docs.sheetjs.com/pres.numbers:
```bash
curl -o pres.numbers https://sheetjs.com/pres.numbers
curl -o pres.numbers https://docs.sheetjs.com/pres.numbers
```
1) Download [`xlsx-cli.js`](pathname:///cli/xlsx-cli.js)
@ -437,10 +437,10 @@ Versions `0.75.1` and `0.82.0` are known to work.
cargo build --release --bin sheet2csv
```
5) Download the test file https://sheetjs.com/pres.numbers:
5) Download the test file https://docs.sheetjs.com/pres.numbers:
```bash
curl -o pres.numbers https://sheetjs.com/pres.numbers
curl -o pres.numbers https://docs.sheetjs.com/pres.numbers
```
6) Test the application:

@ -16,7 +16,7 @@ commands to database servers.
### Generating Tables
This example will fetch https://sheetjs.com/data/cd.xls, scan the columns of the
This example will fetch https://docs.sheetjs.com/cd.xls, scan the columns of the
first worksheet to determine data types, and generate 6 PostgreSQL statements.
<details>
@ -124,7 +124,7 @@ function SheetJSQLWriter() {
if(fields.length) return `INSERT INTO \`${wsname}\` (${fields.join(", ")}) VALUES (${values.join(", ")})`;
})).filter(x => x).slice(0, 6);
}
const [url, setUrl] = React.useState("https://sheetjs.com/data/cd.xls");
const [url, setUrl] = React.useState("https://docs.sheetjs.com/cd.xls");
const set_url = (evt) => setUrl(evt.target.value);
const [out, setOut] = React.useState("");
const xport = React.useCallback(async() => {

@ -197,10 +197,10 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz knex sq
:::
2) Download the [test file](https://sheetjs.com/pres.numbers)
2) Download the [test file](https://docs.sheetjs.com/pres.numbers)
```bash
curl -LO https://sheetjs.com/pres.numbers
curl -LO https://docs.sheetjs.com/pres.numbers
```
3) Download [`SheetJSKnexTest.js`](pathname:///knex/SheetJSKnexTest.js):

@ -379,10 +379,10 @@ correct host name and port number.
- If the server expects a different username and password, uncomment the `user`
and `password` lines and replace the values with the username and password.
11) Fetch the example file [`pres.numbers`](https://sheetjs.com/pres.numbers):
11) Fetch the example file [`pres.numbers`](https://docs.sheetjs.com/pres.numbers):
```bash
curl -L -O https://sheetjs.com/pres.numbers
curl -L -O https://docs.sheetjs.com/pres.numbers
```
12) Run the script:

@ -365,10 +365,10 @@ correct host name and port number.
- If the server expects a password, uncomment the `password` line and replace
the value with the password.
11) Fetch the example file [`pres.numbers`](https://sheetjs.com/pres.numbers):
11) Fetch the example file [`pres.numbers`](https://docs.sheetjs.com/pres.numbers):
```bash
curl -L -O https://sheetjs.com/pres.numbers
curl -L -O https://docs.sheetjs.com/pres.numbers
```
12) Run the script:

@ -37,9 +37,9 @@ This demo was tested in the following environments:
## Live Demo
This demo fetches https://sheetjs.com/pres.numbers, performs a `SELECT` query
using the built-in AlaSQL + SheetJS integration, then displays the result. Using
the result as a data source, the demo will write to a new spreadsheet.
This demo fetches https://docs.sheetjs.com/pres.numbers, performs a `SELECT`
query using the built-in AlaSQL + SheetJS integration, then displays the result.
Using the result as a data source, the demo will write to a new spreadsheet.
<details>
<summary><b>Demo AlaSQL Queries</b> (click to show)</summary>
@ -77,7 +77,7 @@ please refresh the page. This is a known bug in the documentation generator.
function SheetJSAlaSQL() {
const q1 = "SELECT `Index`, UPPER(`Name`) AS `Nom` FROM XLSX(?,{autoExt:false})";
const q2 = `SELECT * INTO XLSX("SheetJSAlaSQL.xlsx") FROM ?`;
const url = "https://sheetjs.com/pres.numbers";
const url = "https://docs.sheetjs.com/pres.numbers";
const [rows, setRows] = React.useState([]);
const loadURL = React.useCallback(async() => {
if(typeof alasql=="undefined") return setRows([{Nom:"alasql undefined"}]);
@ -151,7 +151,7 @@ URLs which can be created from `Blob` or `File` objects.
The following snippet fetches data and passes to AlaSQL:
```js
const blob = await (await fetch("https://sheetjs.com/pres.numbers")).blob();
const blob = await (await fetch("https://docs.sheetjs.com/pres.numbers")).blob();
const data = URL.createObjectURL(blob);
const res = await alasql.promise("SELECT * FROM XLSX(?, {autoExt: false}", [data]);
```
@ -174,7 +174,7 @@ By default the workbook is parsed and `sheet_to_json` is used to pull data:
```js
(async() => {
const blob = await (await fetch("https://sheetjs.com/pres.numbers")).blob();
const blob = await (await fetch("https://docs.sheetjs.com/pres.numbers")).blob();
const data = URL.createObjectURL(blob);
const aoo = await alasql.promise("SELECT * FROM XLSX(?, {autoExt: false}", [data]);
console.log(aoo); // [ { Name: "Bill Clinton", Index: 42 }, ...]
@ -283,10 +283,10 @@ cd alasql
npm i --save alasql@3.1.0 https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`}
</CodeBlock>
4) Download the test file https://sheetjs.com/pres.numbers :
4) Download the test file https://docs.sheetjs.com/pres.numbers :
```bash
curl -LO https://sheetjs.com/pres.numbers
curl -LO https://docs.sheetjs.com/pres.numbers
```
5) Save the following test script to `SheetJSAlaSQL.js`:

@ -81,7 +81,7 @@ function localStorage_to_sheet() {
### Live Demo
This example will fetch https://sheetjs.com/pres.numbers, fill `localStorage`
This demo will fetch https://docs.sheetjs.com/pres.numbers, fill `localStorage`
with rows, then generate a worksheet from the rows and write to a new file.
After saving the exported file, the Local Storage can be inspected in the
@ -101,7 +101,7 @@ is strongly recommended to convert that array to a worksheet directly.
```jsx live
function SheetJStorage() {
const [url, setUrl] = React.useState("https://sheetjs.com/pres.numbers");
const [url, setUrl] = React.useState("https://docs.sheetjs.com/pres.numbers");
const set_url = (evt) => setUrl(evt.target.value);
const [out, setOut] = React.useState("");
const xport = React.useCallback(async() => {

@ -335,13 +335,13 @@ Click "Save" and a new Policy statement should be created.
The site will attempt to download `SheetJSLambda.xlsx`. Save and open the file
to confirm it is valid.
21) Download https://sheetjs.com/pres.numbers and make a POST request to the
public function URL.
21) Download https://docs.sheetjs.com/pres.numbers and make a POST request to
the public function URL.
This can be tested on the command line. Change `FUNCTION_URL` in the commands:
```bash
curl -LO https://sheetjs.com/pres.numbers
curl -LO https://docs.sheetjs.com/pres.numbers
curl -X POST -F "upload=@pres.numbers" FUNCTION_URL
```

@ -314,11 +314,11 @@ curl -L -o src/functions/SheetJSAzure.js https://docs.sheetjs.com/azure/index.js
npm start
```
11) In a separate terminal window, download https://sheetjs.com/pres.numbers
and make a POST request to the dev server:
11) In a new terminal window, download https://docs.sheetjs.com/pres.numbers and
make a POST request to the dev server:
```bash
curl -LO https://sheetjs.com/pres.numbers
curl -LO https://docs.sheetjs.com/pres.numbers
curl -X POST -F "upload=@pres.numbers" http://localhost:7071/api/SheetJSAzure
```
@ -391,12 +391,12 @@ Take note of that URL.
#### Remote Test
22) In a separate terminal window, download https://sheetjs.com/pres.numbers
and make a POST request to the production server. Replace `FUNCTION_URL` with
the Invoke URL from Step 21:
22) In a new terminal window, download https://docs.sheetjs.com/pres.numbers and
make a POST request to the production server. Replace `FUNCTION_URL` with the
Invoke URL from Step 21:
```bash
curl -LO https://sheetjs.com/pres.numbers
curl -LO https://docs.sheetjs.com/pres.numbers
curl -X POST -F "upload=@pres.numbers" FUNCTION_URL
```

@ -105,16 +105,16 @@ show "SheetJS Spreadsheet Conversion Service":
> ![Screenshot](pathname:///deno/sshot.png)
8) Download the test file https://sheetjs.com/pres.xlsx
8) Download the test file https://docs.sheetjs.com/pres.xlsx
9) In the browser window, click "Choose File" and select the downloaded file.
10) Click "Submit". The right panel will show the contents in a HTML TABLE.
11) Open a terminal window and download https://sheetjs.com/pres.numbers:
11) Open a terminal window and download https://docs.sheetjs.com/pres.numbers:
```bash
curl -LO https://sheetjs.com/pres.numbers
curl -LO https://docs.sheetjs.com/pres.numbers
```
12) Copy the first `curl` line from the page and run in the terminal. For

@ -535,10 +535,10 @@ NUMBERS file.
:::
34) Download the [test file `pres.numbers`](https://sheetjs.com/pres.numbers):
34) Download the [test file `pres.numbers`](https://docs.sheetjs.com/pres.numbers):
```bash
curl -LO https://sheetjs.com/pres.numbers
curl -LO https://docs.sheetjs.com/pres.numbers
```
35) Save the following script to `load.mjs`:

@ -244,7 +244,7 @@ The form will look like the screenshot below:
For the purposes of this demo, a sample workspace should be created:
5) Download https://sheetjs.com/pres.xlsx
5) Download https://docs.sheetjs.com/pres.xlsx
6) Create a project in Airtable using "Quickly upload". Select "Microsoft Excel"
and select the downloaded file from step 1. Click "Upload", then "Import".

@ -234,7 +234,7 @@ function SheetJSEnregistrez() {
React.useEffect(() => { (async() => {
if(typeof Dropbox == "undefined") return setMsg("Dropbox is not defined");
/* fetch data and write table (sample data) */
const f = await(await fetch("https://sheetjs.com/pres.xlsx")).arrayBuffer();
const f = await(await fetch("https://docs.sheetjs.com/pres.xlsx")).arrayBuffer();
const wb = XLSX.read(f);
tbl.current.innerHTML = XLSX.utils.sheet_to_html(wb.Sheets[wb.SheetNames[0]]);

@ -114,7 +114,7 @@ the Layers window is "Title") will be set to the name of the first worksheet.
- The data from the first sheet will be added to the "Table Frame" TextFrame.
0) Download the [test workbook](https://sheetjs.com/pres.xlsx) and
0) Download the [test workbook](https://docs.sheetjs.com/pres.xlsx) and
[InDesign template](pathname:///extendscript/Template.idml)
1) Download the following scripts and move to the scripts directory[^4]:
@ -295,7 +295,7 @@ If prompted, give administrator privileges.
2) Download and open [`Template.idml`](pathname:///extendscript/Template.idml)
3) Download https://sheetjs.com/pres.xlsx
3) Download the [test workbook](https://docs.sheetjs.com/pres.xlsx)
4) Show the extension (in the menu bar, select Window > Extensions > SheetJS)
@ -409,7 +409,7 @@ Move them to the Scripts Panel folder.
2) Download and open [`Template.idml`](pathname:///extendscript/Template.idml)
3) Download https://sheetjs.com/pres.xlsx
3) Download the [test workbook](https://docs.sheetjs.com/pres.xlsx)
4) In the Scripts Panel, double-click "parse". Select the downloaded `pres.xlsx`
in the file picker.

@ -272,8 +272,8 @@ export async function extern(url) {
16) After making the change, save the files. Close the terminal window and the
Excel window (do not save the Excel file). Re-run `npm start`.
17) Enter the text `https://sheetjs.com/pres.numbers` in cell `D1`. Enter the
formula `=SHEETJS.EXTERN(D1)` in cell `D2` and press Enter.
17) Enter the text `https://docs.sheetjs.com/pres.numbers` in cell `D1`. Enter
the formula `=SHEETJS.EXTERN(D1)` in cell `D2` and press Enter.
Excel should pull in the data and generate a dynamic array. The worksheet should
match the screenshot at the top of this page.

@ -54,7 +54,7 @@ The [Complete Demo](#complete-demo) includes more detailed setup instructions.
`UrlFetchApp.fetch` performs a network request and returns a `HTTPResponse`:
```js
const response = UrlFetchApp.fetch("https://sheetjs.com/pres.numbers");
const response = UrlFetchApp.fetch("https://docs.sheetjs.com/pres.numbers");
```
`HTTPResponse#getContent` returns the file data as an array of *signed* bytes:
@ -194,7 +194,7 @@ Replace with the following function:
```js title="Code.gs"
function SHEETJS(url) {
/* fetch data */
const res = UrlFetchApp.fetch(url || "https://sheetjs.com/pres.numbers");
const res = UrlFetchApp.fetch(url || "https://docs.sheetjs.com/pres.numbers");
const content = res.getContent();
/* fix data */
@ -215,7 +215,7 @@ Click the "Save Project" icon (💾) to save the project.
11) In the Google Sheets window, select cell A1 and enter the formula
```
=SHEETJS("https://sheetjs.com/pres.numbers")
=SHEETJS("https://docs.sheetjs.com/pres.numbers")
```
The file will be fetched and the contents will be written to the sheet.

@ -156,11 +156,11 @@ 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>
<li><a href="https://docs.sheetjs.com/pres.numbers">pres.numbers</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://sheetjs.com/pres.numbers
curl -LO https://docs.sheetjs.com/pres.numbers
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}
</CodeBlock>

@ -181,8 +181,8 @@ If NodeJS is registered, the value in the "Registered" column will be "True".
ExternalEvaluate["NodeJS", "require('process').cwd()"]
```
5) Download [`pres.numbers`](https://sheetjs.com/pres.numbers) and move the file
to the base folder as shown in the previous step.
5) Download [`pres.numbers`](https://docs.sheetjs.com/pres.numbers) and move
the file to the base folder as shown in the previous step.
6) Copy and evaluate the "Complete Function" in the previous codeblock.
@ -301,11 +301,11 @@ The `\` characters must be doubled.
</TabItem>
</Tabs>
4) Download https://sheetjs.com/pres.numbers and save to Downloads folder:
4) Download https://docs.sheetjs.com/pres.numbers and save to Downloads folder:
```bash
cd ~/Downloads/
curl -LO https://sheetjs.com/pres.numbers
curl -LO https://docs.sheetjs.com/pres.numbers
```
5) In the Mathematica notebook, run the new function. If the file was saved to
@ -337,7 +337,7 @@ SheetJSImportURL[x_] := Module[{path},(
7) Test by downloading the test file in the notebook:
```mathematica
data = SheetJSImportURL["https://sheetjs.com/pres.numbers"]
data = SheetJSImportURL["https://docs.sheetjs.com/pres.numbers"]
```
![SheetJSImportURL result](pathname:///mathematica/SheetJSImportURL.png)

@ -32,7 +32,7 @@ flowchart LR
nfile --> |Stata command\nimport excel|data
```
The demo will read [a Numbers workbook](https://sheetjs.com/pres.numbers) and
The demo will read [a Numbers workbook](https://docs.sheetjs.com/pres.numbers) and
generate variables for each column. A sample Stata session is shown below:
![Stata commands](pathname:///stata/commands.png)
@ -52,6 +52,7 @@ This demo was tested by SheetJS users in the following deployments:
|:-------------|:-----------|
| `darwin-x64` | 2024-04-10 |
| `win10-x64` | 2024-04-10 |
| `linux-x64` | 2024-04-25 |
:::
@ -351,7 +352,7 @@ should be run in the same Terminal session.
<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.numbers`}
curl -LO https://docs.sheetjs.com/pres.numbers`}
</CodeBlock>
### Stata Test
@ -452,6 +453,60 @@ browse Name Index
![Data Editor showing data from the file](pathname:///stata/data-editor.png)
:::info pass
In the terminal version of Stata, `browse` does not work:
```
. browse Name Index
command browse is unrecognized
r(199);
```
The `codebook` command will display details.
<details>
<summary><b>Expected Output</b> (click to show)</summary>
```
-------------------------------------------------------------------------------
Name Name
-------------------------------------------------------------------------------
Type: String (str12)
Unique values: 5 Missing "": 0/5
Tabulation: Freq. Value
1 "Barack Obama"
1 "Bill Clinton"
1 "Donald Trump"
1 "GeorgeW Bush"
1 "Joseph Biden"
Warning: Variable has embedded blanks.
-------------------------------------------------------------------------------
Index Index
-------------------------------------------------------------------------------
Type: Numeric (byte)
Range: [42,46] Units: 1
Unique values: 5 Missing .: 0/5
Tabulation: Freq. Value
1 42
1 43
1 44
1 45
1 46
```
</details>
:::
[^1]: Run `help import excel` in Stata or see ["import excel"](https://www.stata.com/manuals/dimportexcel.pdf) in the Stata documentation.
[^2]: See [`read` in "Reading Files"](/docs/api/parse-options)
[^3]: See [`write` in "Writing Files"](/docs/api/write-options)

@ -166,7 +166,7 @@ This demo was tested in macOS. The path names will differ in other platforms.
:::
This demo uses the [`pres.numbers` test file](https://sheetjs.com/pres.numbers).
This demo processes [`pres.numbers`](https://docs.sheetjs.com/pres.numbers).
There are 3 parts to the demo:
A) "Import": SheetJS tooling will read the test file and generate a clean XLSX
@ -209,11 +209,11 @@ mkdir -p ~/Documents/MATLAB/
mv xlsx-cli ~/Documents/MATLAB/
```
3) Download https://sheetjs.com/pres.numbers and save to Downloads folder:
3) Download https://docs.sheetjs.com/pres.numbers and save to Downloads folder:
```bash
cd ~/Downloads/
curl -LO https://sheetjs.com/pres.numbers
curl -LO https://docs.sheetjs.com/pres.numbers
```
4) Save the following to `SheetJSMATLAB.m` in the workspace folder:

@ -30,7 +30,7 @@ flowchart LR
:::note Tested Deployments
This demo was last tested by SheetJS users on 2024 March 31 in Maple 2024.
This demo was last tested by SheetJS users on 2024-04-25 in Maple 2024.
:::
@ -160,7 +160,7 @@ mv duktape-2.7.0/src/*.{c,h} .
<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.numbers`}
curl -LO https://docs.sheetjs.com/pres.numbers`}
</CodeBlock>
6) Still within WSL, download the extension C code

@ -155,7 +155,7 @@ This demo was tested in the following deployments:
| `16.20.2` | 2024-02-23 | End-of-Life |
| `18.19.1` | 2024-02-23 | Maintenance LTS |
| `20.11.1` | 2024-02-23 | Active LTS |
| `21.6.2` | 2024-02-23 | Current |
| `22.0.0` | 2024-04-25 | Current |
While streaming methods work in End-of-Life versions of NodeJS, production
deployments should upgrade to a Current or LTS version of NodeJS.
@ -174,10 +174,10 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`}
curl -LO https://docs.sheetjs.com/stream/SheetJSNodeJStream.js
```
3) Download [the test file](https://sheetjs.com/pres.xlsx):
3) Download [the test file](https://docs.sheetjs.com/pres.xlsx):
```bash
curl -LO https://sheetjs.com/pres.xlsx
curl -LO https://docs.sheetjs.com/pres.xlsx
```
4) Run the script:
@ -453,12 +453,12 @@ stream.to_csv(wb.Sheets[wb.SheetNames[0]]).resume();`}
:::note Tested Deployments
This demo was last tested on 2024-02-23 against Deno `1.41.0`.
This demo was last tested on 2024-04-25 against Deno `1.42.4`.
:::
[`SheetJSDenoStream.ts`](pathname:///stream/SheetJSDenoStream.ts) is a small
example script that downloads https://sheetjs.com/pres.numbers and prints
example script that downloads https://docs.sheetjs.com/pres.numbers and prints
CSV row objects.
1) Run the script:
@ -467,5 +467,5 @@ CSV row objects.
deno run -A https://docs.sheetjs.com/stream/SheetJSDenoStream.ts
```
This script will fetch [`pres.numbers`](https://sheetjs.com/pres.numbers) and
This script will fetch [`pres.numbers`](https://docs.sheetjs.com/pres.numbers) and
generate CSV rows. The result will be printed to the terminal window.

@ -193,7 +193,7 @@ Each browser demo was tested in the following environments:
| Browser | Date | Comments |
|:------------|:-----------|:----------------------------------------|
| Chrome 122 | 2024-03-12 | |
| Chrome 122 | 2024-04-25 | |
| Edge 122 | 2024-03-12 | |
| Safari 17.3 | 2024-03-12 | File System Access API is not supported |
| Brave 1.59 | 2024-03-12 | File System Access API is not supported |
@ -239,7 +239,7 @@ sequenceDiagram
In the following example, the script:
- downloads https://sheetjs.com/pres.numbers in a Web Worker
- downloads https://docs.sheetjs.com/pres.numbers in a Web Worker
- loads the SheetJS library and parses the file in the Worker
- generates an HTML string of the first table in the Worker
- sends the string to the main browser context
@ -260,7 +260,7 @@ importScripts("https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.mi
self.addEventListener('message', async(e) => {
try {
/* Fetch file */
const res = await fetch("https://sheetjs.com/pres.numbers");
const res = await fetch("https://docs.sheetjs.com/pres.numbers");
const ab = await res.arrayBuffer();
\n\
/* Parse file */

@ -190,7 +190,7 @@ 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>
<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>
<li><a href="https://docs.sheetjs.com/pres.numbers">pres.numbers</a></li>
</ul>
<Tabs groupId="os">
@ -211,7 +211,7 @@ If the `curl` command fails, run the commands within WSL `bash`.
<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.numbers`}
curl -LO https://docs.sheetjs.com/pres.numbers`}
</CodeBlock>
3) Download [`sheetjs.duk.c`](pathname:///duk/sheetjs.duk.c):
@ -469,13 +469,13 @@ 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>
<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>
<li><a href="https://docs.sheetjs.com/pres.numbers">pres.numbers</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.numbers`}
curl -LO https://docs.sheetjs.com/pres.numbers`}
</CodeBlock>
6) Download [`SheetJSDuk.php`](pathname:///duk/SheetJSDuk.php):
@ -576,13 +576,13 @@ 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>
<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>
<li><a href="https://docs.sheetjs.com/pres.numbers">pres.numbers</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.numbers`}
curl -LO https://docs.sheetjs.com/pres.numbers`}
</CodeBlock>
4) Download [`SheetJSDuk.py`](pathname:///duk/SheetJSDuk.py):
@ -649,7 +649,7 @@ The main Duktape code can be added to the Zig build pipeline.
:::note pass
The following explanation was verified against Zig 0.11.0.
The following explanation was verified against Zig 0.12.0.
:::
@ -667,7 +667,7 @@ folder must be added to the include path list:
```
The `duktape.c` source file must be added to the build sequence. For Zig version
0.11.0, Duktape must be compiled with flags `-std=c99 -fno-sanitize=undefined`
0.12.0, Duktape must be compiled with flags `-std=c99 -fno-sanitize=undefined`
and linked against `libc` and `libm`:
```zig title="build.zig"
@ -743,7 +743,7 @@ This demo was tested in the following deployments:
|:-------------|:--------|:---------|:-----------|
| `darwin-x64` | `2.7.0` | `0.11.0` | 2024-03-10 |
| `win10-x64` | `2.7.0` | `0.11.0` | 2024-03-10 |
| `linux-x64` | `2.7.0` | `0.11.0` | 2024-03-10 |
| `linux-x64` | `2.7.0` | `0.12.0` | 2024-04-25 |
On Windows, due to incompatibilities between WSL and PowerShell, some commands
must be run in WSL Bash.
@ -757,24 +757,24 @@ mkdir sheetjs-zig
cd sheetjs-zig
```
1) Download Zig 0.11.0 from https://ziglang.org/download/ and extract to the
1) Download Zig 0.12.0 from https://ziglang.org/download/ and extract to the
project folder.
<Tabs groupId="triple">
<TabItem value="darwin-x64" label="MacOS">
```bash
curl -LO https://ziglang.org/download/0.11.0/zig-macos-x86_64-0.11.0.tar.xz
tar -xzf zig-macos-x86_64-0.11.0.tar.xz
curl -LO https://ziglang.org/download/0.12.0/zig-macos-x86_64-0.12.0.tar.xz
tar -xzf zig-macos-x86_64-0.12.0.tar.xz
```
</TabItem>
<TabItem value="linux-x64" label="Linux">
```bash
curl -LO https://ziglang.org/download/0.11.0/zig-linux-x86_64-0.11.0.tar.xz
xz -d zig-linux-x86_64-0.11.0.tar.xz
tar -xf zig-linux-x86_64-0.11.0.tar
curl -LO https://ziglang.org/download/0.12.0/zig-linux-x86_64-0.12.0.tar.xz
xz -d zig-linux-x86_64-0.12.0.tar.xz
tar -xf zig-linux-x86_64-0.12.0.tar
```
</TabItem>
@ -787,8 +787,8 @@ The following commands should be run within WSL bash.
:::
```bash
curl -LO https://ziglang.org/download/0.11.0/zig-windows-x86_64-0.11.0.zip
unzip zig-windows-x86_64-0.11.0.zip
curl -LO https://ziglang.org/download/0.12.0/zig-windows-x86_64-0.12.0.zip
unzip zig-windows-x86_64-0.12.0.zip
```
</TabItem>
@ -800,14 +800,14 @@ unzip zig-windows-x86_64-0.11.0.zip
<TabItem value="darwin-x64" label="MacOS">
```bash
./zig-macos-x86_64-0.11.0/zig init-exe
./zig-macos-x86_64-0.12.0/zig init
```
</TabItem>
<TabItem value="linux-x64" label="Linux">
```bash
./zig-linux-x86_64-0.11.0/zig init-exe
./zig-linux-x86_64-0.12.0/zig init
```
</TabItem>
@ -820,7 +820,7 @@ The following command should be run within Powershell.
:::
```bash
.\zig-windows-x86_64-0.11.0\zig.exe init-exe
.\zig-windows-x86_64-0.12.0\zig.exe init
```
</TabItem>
@ -841,7 +841,7 @@ three files to the `src` subdirectory:
<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>
<li><a href="https://sheetjs.com/pres.numbers">pres.numbers</a></li>
<li><a href="https://docs.sheetjs.com/pres.numbers">pres.numbers</a></li>
</ul>
The following commands can be run within a shell on macOS and Linux. On Windows,
@ -850,7 +850,7 @@ the commands should be run within WSL bash:
<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.numbers
curl -LO https://docs.sheetjs.com/pres.numbers
mv *.js src`}
</CodeBlock>
@ -859,8 +859,6 @@ mv *.js src`}
```zig title="build.zig (add highlighted lines)"
const exe = b.addExecutable(.{
.name = "sheetjs-zig",
// In this case the main source file is merely a path, however, in more
// complicated build scripts, this could be a generated file.
.root_source_file = .{ .path = "src/main.zig" },
.target = target,
.optimize = optimize,
@ -886,14 +884,14 @@ curl -L -o src/main.zig https://docs.sheetjs.com/duk/main.zig
<TabItem value="darwin-x64" label="MacOS">
```bash
./zig-macos-x86_64-0.11.0/zig build run -- pres.numbers
./zig-macos-x86_64-0.12.0/zig build run -- pres.numbers
```
</TabItem>
<TabItem value="linux-x64" label="Linux">
```bash
./zig-linux-x86_64-0.11.0/zig build run -- pres.numbers
./zig-linux-x86_64-0.12.0/zig build run -- pres.numbers
```
:::caution pass
@ -916,7 +914,7 @@ sudo pacman -Syu glibc linux-api-headers
<TabItem value="win10-x64" label="Windows">
```bash
.\zig-windows-x86_64-0.11.0\zig.exe build run -- pres.numbers
.\zig-windows-x86_64-0.12.0\zig.exe build run -- pres.numbers
```
</TabItem>
@ -978,7 +976,7 @@ curl -LO https://docs.sheetjs.com/duk/SheetJSDuk.pl
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.extendscript.js
curl -LO https://sheetjs.com/pres.xlsx`}
curl -LO https://docs.sheetjs.com/pres.xlsx`}
</CodeBlock>
4) Run the script:

@ -756,12 +756,12 @@ 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>
<li><a href="https://docs.sheetjs.com/pres.numbers">pres.numbers</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
curl -LO https://sheetjs.com/pres.numbers`}
curl -LO https://docs.sheetjs.com/pres.numbers`}
</CodeBlock>
13) Download [`sheetjs.v8.cc`](pathname:///v8/sheetjs.v8.cc):
@ -866,7 +866,7 @@ This demo was last tested in the following deployments:
| `darwin-x64` | `0.89.0` | 2024-04-04 |
| `darwin-arm` | `0.82.0` | 2023-12-01 |
| `win10-x64` | `0.89.0` | 2024-03-24 |
| `linux-x64` | `0.89.0` | 2024-03-21 |
| `linux-x64` | `0.91.0` | 2024-04-25 |
| `linux-arm` | `0.82.0` | 2023-12-01 |
:::
@ -886,14 +886,17 @@ cargo add v8
cargo run
```
3) Download the SheetJS Standalone script and move to the project directory:
3) 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>
<li><a href="https://docs.sheetjs.com/pres.numbers">pres.numbers</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
curl -LO https://docs.sheetjs.com/pres.numbers`}
</CodeBlock>
4) Download [`main.rs`](pathname:///v8/main.rs) and replace `src/main.rs`:
@ -902,10 +905,9 @@ curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}
curl -L -o src/main.rs https://docs.sheetjs.com/v8/main.rs
```
5) Download [the test file](https://sheetjs.com/pres.numbers) and run:
5) Build and run the app:
```bash
curl -LO https://sheetjs.com/pres.numbers
cargo run pres.numbers
```

@ -30,9 +30,9 @@ This demo was tested in the following deployments:
| OpenJDK | Rhino | Date |
|:--------|:---------|:-----------|
| 22 | `1.7.14` | 2024-04-04 |
| 21.0.1 | `1.7.14` | 2023-12-05 |
| 21.0.2 | `1.7.14` | 2024-04-25 |
| 17.0.10 | `1.7.14` | 2024-03-25 |
| 1.8.0 | `1.7.14` | 2023-12-05 |
| 1.8.0 | `1.7.14` | 2024-04-25 |
:::
@ -152,12 +152,12 @@ 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.xlsx">pres.xlsx</a></li>
<li><a href="https://docs.sheetjs.com/pres.xlsx">pres.xlsx</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
curl -LO https://sheetjs.com/pres.xlsx`}
curl -LO https://docs.sheetjs.com/pres.xlsx`}
</CodeBlock>
4) Download [`SheetJSRhino.zip`](pathname:///rhino/SheetJSRhino.zip) and unzip

@ -344,12 +344,12 @@ 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>
<li><a href="https://docs.sheetjs.com/pres.numbers">pres.numbers</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
curl -LO https://sheetjs.com/pres.numbers`}
curl -LO https://docs.sheetjs.com/pres.numbers`}
</CodeBlock>
3) Download the Swift scripts for the demo
@ -511,12 +511,12 @@ 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>
<li><a href="https://docs.sheetjs.com/pres.numbers">pres.numbers</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
curl -LO https://sheetjs.com/pres.numbers`}
curl -LO https://docs.sheetjs.com/pres.numbers`}
</CodeBlock>
8) Run the program:

@ -41,7 +41,7 @@ setting the environment variable on supported platforms.
:::note pass
Most of the integration functions are not documented. This explanation is based
on version `3.0.1`.
on version `3.1.0`.
:::
@ -167,7 +167,7 @@ This demo was tested in the following deployments:
| `darwin-arm` | `3.0.0-beta-2056` | 2023-12-01 |
| `win10-x64` | `3.1.0` | 2024-04-17 |
| `win11-arm` | `3.0.0-beta-2056` | 2023-12-01 |
| `linux-x64` | `3.0.1` | 2024-03-21 |
| `linux-x64` | `3.1.0` | 2024-04-25 |
| `linux-arm` | `3.0.0-beta-2056` | 2023-12-01 |
:::
@ -248,7 +248,7 @@ dotnet run
```bash
dotnet nuget add source https://www.myget.org/F/jint/api/v3/index.json
dotnet add package Jint --version 3.0.1
dotnet add package Jint --version 3.1.0
```
To verify Jint is installed, replace `Program.cs` with the following:
@ -274,13 +274,13 @@ 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>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js`}>shim.min.js</a></li>
<li><a href="https://sheetjs.com/pres.xlsx">pres.xlsx</a></li>
<li><a href="https://docs.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`}
curl -LO https://docs.sheetjs.com/pres.xlsx`}
</CodeBlock>
6) Replace `Program.cs` with the following:

@ -94,7 +94,7 @@ This demo was tested in the following deployments:
| Architecture | Git Commit | Go version | Date |
|:-------------|:-----------|:-----------|:-----------|
| `darwin-x64` | `e401ed4` | `1.22.1` | 2024-03-15 |
| `darwin-x64` | `e401ed4` | `1.21.7` | 2024-04-25 |
| `darwin-arm` | `873a149` | `1.21.3` | 2023-10-18 |
| `win10-x64` | `e401ed4` | `1.22.1` | 2024-03-24 |
| `win11-arm` | `b396bb4` | `1.21.1` | 2023-12-01 |
@ -121,13 +121,13 @@ 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>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js`}>shim.min.js</a></li>
<li><a href="https://sheetjs.com/pres.numbers">pres.numbers</a></li>
<li><a href="https://docs.sheetjs.com/pres.numbers">pres.numbers</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.numbers`}
curl -LO https://docs.sheetjs.com/pres.numbers`}
</CodeBlock>
2) Download [`SheetGoja.go`](pathname:///goja/SheetGoja.go):

@ -153,13 +153,13 @@ 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>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js`}>shim.min.js</a></li>
<li><a href="https://sheetjs.com/pres.xlsx">pres.xlsx</a></li>
<li><a href="https://docs.sheetjs.com/pres.xlsx">pres.xlsx</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js
curl -LO https://sheetjs.com/pres.xlsx`}
curl -LO https://docs.sheetjs.com/pres.xlsx`}
</CodeBlock>
2) Download [`SheetJSNashorn.java`](pathname:///nashorn/SheetJSNashorn.java):

@ -267,10 +267,10 @@ This demo was tested in the following deployments:
| `darwin-arm` | `2788d71` | 2023-10-18 |
| `win10-x64` | `9e561d5` | 2024-03-04 |
| `win11-arm` | `03cc5ec` | 2023-12-01 |
| `linux-x64` | `6a89d7c` | 2024-03-21 |
| `linux-x64` | `3b45d15` | 2024-04-25 |
| `linux-arm` | `03cc5ec` | 2023-12-01 |
When the demo was tested, commit `9e561d5` corresponded to the latest release.
When the demo was tested, `3b45d15` was the HEAD commit on the `master` branch.
:::
@ -286,7 +286,7 @@ tests were run entirely within Windows Subsystem for Linux.
```bash
git clone https://github.com/bellard/quickjs
cd quickjs
git checkout 6a89d7c
git checkout 3b45d15
make
cd ..
```
@ -317,12 +317,12 @@ 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>
<li><a href="https://docs.sheetjs.com/pres.numbers">pres.numbers</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
curl -LO https://sheetjs.com/pres.numbers`}
curl -LO https://docs.sheetjs.com/pres.numbers`}
</CodeBlock>
5) Run the test program:
@ -343,9 +343,9 @@ This demo was tested in the following environments:
| Git Commit | Date |
|:-----------|:-----------|
| `6a89d7c` | 2024-03-21 |
| `3b45d15` | 2024-04-25 |
When the demo was tested, commit `6a89d7c` corresponded to the latest release.
When the demo was tested, `3b45d15` was the HEAD commit on the `master` branch.
:::
@ -365,12 +365,12 @@ 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>
<li><a href="https://docs.sheetjs.com/pres.numbers">pres.numbers</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
curl -LO https://sheetjs.com/pres.numbers`}
curl -LO https://docs.sheetjs.com/pres.numbers`}
</CodeBlock>
2) Download [`SheetJSQuick.js`](pathname:///quickjs/SheetJSQuick.js)

@ -364,7 +364,7 @@ This demo was tested in the following deployments:
| Architecture | Git Commit | Date |
|:-------------|:-----------|:-----------|
| `darwin-x64` | `15b323d` | 2024-03-15 |
| `darwin-x64` | `d070c74` | 2024-04-25 |
| `darwin-arm` | `2b4f949` | 2023-10-18 |
| `linux-x64` | `d217af8` | 2024-03-21 |
| `linux-arm` | `84732b3` | 2023-12-01 |
@ -501,12 +501,12 @@ 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>
<li><a href="https://docs.sheetjs.com/pres.numbers">pres.numbers</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
curl -LO https://sheetjs.com/pres.numbers`}
curl -LO https://docs.sheetjs.com/pres.numbers`}
</CodeBlock>
7) Copy the `libhermes` and `libjsi` libraries into the current folder:
@ -697,12 +697,12 @@ 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>
<li><a href="https://docs.sheetjs.com/pres.numbers">pres.numbers</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -o xlsx.full.min.js https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
curl -o pres.numbers https://sheetjs.com/pres.numbers`}
curl -o pres.numbers https://docs.sheetjs.com/pres.numbers`}
</CodeBlock>
10) Run the application:
@ -774,12 +774,12 @@ 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>
<li><a href="https://docs.sheetjs.com/pres.numbers">pres.numbers</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
curl -LO https://sheetjs.com/pres.numbers`}
curl -LO https://docs.sheetjs.com/pres.numbers`}
</CodeBlock>
5) Bundle the test file and create `payload.js`:

@ -70,7 +70,7 @@ This demo was tested in the following deployments:
| Platform | Ruby | ExecJS | Date |
|:-------------|:---------|:--------|:-----------|
| `darwin-x64` | `2.6.10` | `2.9.1` | 2024-03-15 |
| `darwin-x64` | `2.6.10` | `2.9.1` | 2024-04-25 |
| `darwin-arm` | `2.6.10` | `2.9.1` | 2023-12-01 |
| `win10-x64` | `3.2.3` | `2.9.1` | 2024-03-10 |
| `win11-arm` | `3.0.2` | `2.9.1` | 2023-12-01 |
@ -87,7 +87,8 @@ This demo was tested in the following deployments:
gem install execjs
```
:::note pass
<details>
<summary><b>Installation Notes</b> (click to show)</summary>
The command may need to be run as an administrator or root user:
@ -95,8 +96,6 @@ The command may need to be run as an administrator or root user:
sudo gem install execjs
```
:::
:::note pass
On Arch Linux-based platforms including the Steam Deck, `rubygems` must be
@ -108,6 +107,8 @@ sudo pacman -Syu rubygems
:::
</details>
1) Create a new project folder:
```bash
@ -120,12 +121,12 @@ 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>
<li><a href="https://docs.sheetjs.com/pres.numbers">pres.numbers</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
curl -LO https://sheetjs.com/pres.numbers`}
curl -LO https://docs.sheetjs.com/pres.numbers`}
</CodeBlock>
3) Download [`ExecSheetJS.rb`](pathname:///execjs/ExecSheetJS.rb):

@ -135,7 +135,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | `c3ead3f` | 2024-03-15 |
| `darwin-arm` | `c3ead3f` | 2023-10-19 |
| `win10-x64` | `c3ead3f` | 2024-03-04 |
| `linux-x64` | `c3ead3f` | 2024-03-21 |
| `linux-x64` | `1f6e17c` | 2024-04-25 |
:::
@ -180,7 +180,7 @@ All commands in this demo should be run in a "Native Tools Command Prompt".
```bash
git clone https://github.com/chakra-core/ChakraCore.git
cd ChakraCore
git checkout c3ead3f
git checkout 1f6e17c
cd ..
```
@ -376,13 +376,13 @@ 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>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js`}>shim.min.js</a></li>
<li><a href="https://sheetjs.com/pres.numbers">pres.numbers</a></li>
<li><a href="https://docs.sheetjs.com/pres.numbers">pres.numbers</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -L -O https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
curl -L -O https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js
curl -L -O https://sheetjs.com/pres.numbers`}
curl -L -O https://docs.sheetjs.com/pres.numbers`}
</CodeBlock>
6) Run the test program:
@ -411,7 +411,7 @@ If successful, the program will print the contents of the first sheet as CSV.
:::note Tested Deployments
This demo was last tested on 2024-03-21 against `ch` commit `c3ead3f`.
This demo was last tested on 2024-04-25 against `ch` commit `1f6e17c`.
:::
@ -435,13 +435,13 @@ 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>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js`}>shim.min.js</a></li>
<li><a href="https://sheetjs.com/pres.numbers">pres.numbers</a></li>
<li><a href="https://docs.sheetjs.com/pres.numbers">pres.numbers</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -L -O https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
curl -L -O https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js
curl -L -O https://sheetjs.com/pres.numbers`}
curl -L -O https://docs.sheetjs.com/pres.numbers`}
</CodeBlock>
2) Bundle the test file and create `payload.js`:

@ -120,9 +120,9 @@ This demo was tested in the following deployments:
| Architecture | Boa | Date |
|:-------------|:---------|:-----------|
| `darwin-x64` | `0.18.0` | 2024-03-15 |
| `darwin-x64` | `0.18.0` | 2024-04-25 |
| `darwin-arm` | `0.17.3` | 2023-10-20 |
| `win10-x64` | `0.17.3` | 2024-03-04 |
| `win10-x64` | `0.18.0` | 2024-04-25 |
| `win11-arm` | `0.17.3` | 2023-12-01 |
| `linux-x64` | `0.18.0` | 2024-03-21 |
| `linux-arm` | `0.17.3` | 2023-12-01 |
@ -143,14 +143,17 @@ cargo run
cargo add boa_engine
```
3) Download the SheetJS Standalone script and move to the project directory:
3) 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>
<li><a href="https://docs.sheetjs.com/pres.xlsx">pres.xlsx</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
curl -LO https://docs.sheetjs.com/pres.xlsx`}
</CodeBlock>
4) Download [`main.rs`](pathname:///boa/main.rs) and replace `src/main.rs`:
@ -159,10 +162,9 @@ curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js`}
curl -L -o src/main.rs https://docs.sheetjs.com/boa/main.rs
```
5) Download [the test file](https://sheetjs.com/pres.xlsx) and run:
5) Build and run the app in release mode:
```bash
curl -LO https://sheetjs.com/pres.xlsx
cargo run --release
```

@ -127,7 +127,7 @@ curl -LO https://docs.sheetjs.com/perl/SheetJE.pl
4) Download a test file and run:
```bash
curl -LO https://sheetjs.com/data/cd.xls
curl -LO https://docs.sheetjs.com/cd.xls
perl SheetJE.pl cd.xls
```

@ -25,8 +25,8 @@ command-line tool for reading data from files.
This demo requires a much larger heap size than is normally used in JerryScript
deployments! In local testing, the following sizes were needed:
- 8192 (8M) for https://sheetjs.com/pres.xlsx
- 65536 (64M) for https://sheetjs.com/pres.numbers
- 8192 (8M) for https://docs.sheetjs.com/pres.xlsx
- 65536 (64M) for https://docs.sheetjs.com/pres.numbers
:::
@ -36,7 +36,7 @@ This demo was tested in the following environments:
| Architecture | Commit | Date |
|:-------------|:----------|:-----------|
| `darwin-x64` | `cefd391` | 2024-03-15 |
| `darwin-x64` | `47bd5d4` | 2024-04-25 |
| `darwin-arm` | `ef4cb2b` | 2023-12-08 |
| `win10-x64` | `47bd5d4` | 2024-04-14 |
| `win11-arm` | `ef4cb2b` | 2023-12-08 |
@ -372,13 +372,13 @@ three files to the `SheetJSJerry` 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://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js`}>shim.min.js</a></li>
<li><a href="https://sheetjs.com/pres.xlsx">pres.xlsx</a></li>
<li><a href="https://docs.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`}
curl -LO https://docs.sheetjs.com/pres.xlsx`}
</CodeBlock>
4) Download [`sheetjs.jerry.c`](pathname:///jerryscript/sheetjs.jerry.c) into
@ -438,13 +438,13 @@ 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>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js`}>shim.min.js</a></li>
<li><a href="https://sheetjs.com/pres.xlsx">pres.xlsx</a></li>
<li><a href="https://docs.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`}
curl -LO https://docs.sheetjs.com/pres.xlsx`}
</CodeBlock>
2) Bundle the test file and create `payload.js`:

@ -56,7 +56,7 @@ This demo was tested in the following deployments:
|:--------|:--------|:-----------|
| 22 | 24.0.0 | 2024-03-23 |
| 21.0.2 | 24.0.0 | 2024-03-23 |
| 17.0.10 | 24.0.0 | 2024-03-25 |
| 17.0.7 | 24.0.1 | 2024-04-25 |
:::
@ -65,14 +65,14 @@ This demo was tested in the following deployments:
0) Download GraalJS and its dependencies:
```bash
curl -LO "https://repo1.maven.org/maven2/org/graalvm/js/js-scriptengine/24.0.0/js-scriptengine-24.0.0.jar"
curl -LO "https://repo1.maven.org/maven2/org/graalvm/js/js-language/24.0.0/js-language-24.0.0.jar"
curl -LO "https://repo1.maven.org/maven2/org/graalvm/polyglot/polyglot/24.0.0/polyglot-24.0.0.jar"
curl -LO "https://repo1.maven.org/maven2/org/graalvm/sdk/collections/24.0.0/collections-24.0.0.jar"
curl -LO "https://repo1.maven.org/maven2/org/graalvm/truffle/truffle-api/24.0.0/truffle-api-24.0.0.jar"
curl -LO "https://repo1.maven.org/maven2/org/graalvm/sdk/nativeimage/24.0.0/nativeimage-24.0.0.jar"
curl -LO "https://repo1.maven.org/maven2/org/graalvm/shadowed/icu4j/24.0.0/icu4j-24.0.0.jar"
curl -LO "https://repo1.maven.org/maven2/org/graalvm/regex/regex/24.0.0/regex-24.0.0.jar"
curl -LO "https://repo1.maven.org/maven2/org/graalvm/js/js-scriptengine/24.0.1/js-scriptengine-24.0.1.jar"
curl -LO "https://repo1.maven.org/maven2/org/graalvm/js/js-language/24.0.1/js-language-24.0.1.jar"
curl -LO "https://repo1.maven.org/maven2/org/graalvm/polyglot/polyglot/24.0.1/polyglot-24.0.1.jar"
curl -LO "https://repo1.maven.org/maven2/org/graalvm/sdk/collections/24.0.1/collections-24.0.1.jar"
curl -LO "https://repo1.maven.org/maven2/org/graalvm/truffle/truffle-api/24.0.1/truffle-api-24.0.1.jar"
curl -LO "https://repo1.maven.org/maven2/org/graalvm/sdk/nativeimage/24.0.1/nativeimage-24.0.1.jar"
curl -LO "https://repo1.maven.org/maven2/org/graalvm/shadowed/icu4j/24.0.1/icu4j-24.0.1.jar"
curl -LO "https://repo1.maven.org/maven2/org/graalvm/regex/regex/24.0.1/regex-24.0.1.jar"
```
1) Download the SheetJS Standalone script, shim script and test file. Move all
@ -81,13 +81,13 @@ 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>
<li><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js`}>shim.min.js</a></li>
<li><a href="https://sheetjs.com/pres.xlsx">pres.xlsx</a></li>
<li><a href="https://docs.sheetjs.com/pres.xlsx">pres.xlsx</a></li>
</ul>
<CodeBlock language="bash">{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js
curl -LO https://sheetjs.com/pres.xlsx`}
curl -LO https://docs.sheetjs.com/pres.xlsx`}
</CodeBlock>
2) Download [`SheetJSNashorn.java`](pathname:///nashorn/SheetJSNashorn.java):
@ -113,14 +113,14 @@ CSV rows from the first worksheet.
<TabItem value="unix" label="Linux/MacOS">
```bash
java -cp ".:js-scriptengine-24.0.0.jar:js-language-24.0.0.jar:polyglot-24.0.0.jar:collections-24.0.0.jar:truffle-api-24.0.0.jar:nativeimage-24.0.0.jar:icu4j-24.0.0.jar:regex-24.0.0.jar" -Dpolyglot.js.nashorn-compat=true SheetJSNashorn pres.xlsx
java -cp ".:js-scriptengine-24.0.1.jar:js-language-24.0.1.jar:polyglot-24.0.1.jar:collections-24.0.1.jar:truffle-api-24.0.1.jar:nativeimage-24.0.1.jar:icu4j-24.0.1.jar:regex-24.0.1.jar" -Dpolyglot.js.nashorn-compat=true SheetJSNashorn pres.xlsx
```
</TabItem>
<TabItem value="win" label="Windows">
```bash
java -cp ".;js-scriptengine-24.0.0.jar;js-language-24.0.0.jar;polyglot-24.0.0.jar;collections-24.0.0.jar;truffle-api-24.0.0.jar;nativeimage-24.0.0.jar;icu4j-24.0.0.jar;regex-24.0.0.jar" -D"polyglot.js.nashorn-compat=true" SheetJSNashorn pres.xlsx
java -cp ".;js-scriptengine-24.0.1.jar;js-language-24.0.1.jar;polyglot-24.0.1.jar;collections-24.0.1.jar;truffle-api-24.0.1.jar;nativeimage-24.0.1.jar;icu4j-24.0.1.jar;regex-24.0.1.jar" -D"polyglot.js.nashorn-compat=true" SheetJSNashorn pres.xlsx
```
</TabItem>
@ -150,14 +150,14 @@ cd sheethorn
<TabItem value="unix" label="Linux/MacOS">
```bash
java -cp ".:js-scriptengine-24.0.0.jar:js-language-24.0.0.jar:polyglot-24.0.0.jar:collections-24.0.0.jar:truffle-api-24.0.0.jar:nativeimage-24.0.0.jar:icu4j-24.0.0.jar:regex-24.0.0.jar:SheetJSNashorn.jar" -Dpolyglot.js.nashorn-compat=true SheetJSNashorn pres.xlsx
java -cp ".:js-scriptengine-24.0.1.jar:js-language-24.0.1.jar:polyglot-24.0.1.jar:collections-24.0.1.jar:truffle-api-24.0.1.jar:nativeimage-24.0.1.jar:icu4j-24.0.1.jar:regex-24.0.1.jar:SheetJSNashorn.jar" -Dpolyglot.js.nashorn-compat=true SheetJSNashorn pres.xlsx
```
</TabItem>
<TabItem value="win" label="Windows">
```bash
java -cp ".;js-scriptengine-24.0.0.jar;js-language-24.0.0.jar;polyglot-24.0.0.jar;collections-24.0.0.jar;truffle-api-24.0.0.jar;nativeimage-24.0.0.jar;icu4j-24.0.0.jar;regex-24.0.0.jar;SheetJSNashorn.jar" -D"polyglot.js.nashorn-compat=true" SheetJSNashorn pres.xlsx
java -cp ".;js-scriptengine-24.0.1.jar;js-language-24.0.1.jar;polyglot-24.0.1.jar;collections-24.0.1.jar;truffle-api-24.0.1.jar;nativeimage-24.0.1.jar;icu4j-24.0.1.jar;regex-24.0.1.jar;SheetJSNashorn.jar" -D"polyglot.js.nashorn-compat=true" SheetJSNashorn pres.xlsx
```
</TabItem>

@ -368,13 +368,13 @@ 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>
<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.xlsb">pres.xlsb</a></li>
<li><a href="https://docs.sheetjs.com/pres.xlsb">pres.xlsb</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.xlsb`}
curl -LO https://docs.sheetjs.com/pres.xlsb`}
</CodeBlock>
7) Run the application:

@ -406,7 +406,7 @@ For modern websites targeting Chrome 42+, `fetch` is recommended:
// XLSX is a global from the standalone script
(async() => {
const url = "https://sheetjs.com/pres.xlsx";
const url = "https://docs.sheetjs.com/pres.xlsx";
const data = await (await fetch(url)).arrayBuffer();
/* data is an ArrayBuffer */
const workbook = XLSX.read(data);
@ -418,7 +418,7 @@ For modern websites targeting Chrome 42+, `fetch` is recommended:
For broader support, the `XMLHttpRequest` approach is recommended:
```js
var url = "https://sheetjs.com/pres.xlsx";
var url = "https://docs.sheetjs.com/pres.xlsx";
/* set up async GET request */
var req = new XMLHttpRequest();
@ -447,7 +447,7 @@ NodeJS releases starting from version 18.0 have native support for fetch:
```js
const XLSX = require("xlsx");
const url = "https://sheetjs.com/pres.xlsx";
const url = "https://docs.sheetjs.com/pres.xlsx";
const data = await (await fetch(url)).arrayBuffer();
/* data is an ArrayBuffer */
const workbook = XLSX.read(data);
@ -461,7 +461,7 @@ For broader compatibility, third-party modules are recommended.
var XLSX = require("xlsx");
var request = require("request");
var url = "https://sheetjs.com/pres.xlsx";
var url = "https://docs.sheetjs.com/pres.xlsx";
request({url: url, encoding: null}, function(err, resp, body) {
var workbook = XLSX.read(body);
@ -475,7 +475,7 @@ request({url: url, encoding: null}, function(err, resp, body) {
const XLSX = require("xlsx");
const axios = require("axios");
const url = "https://sheetjs.com/pres.xlsx";
const url = "https://docs.sheetjs.com/pres.xlsx";
(async() => {
const res = await axios.get(url, {responseType: "arraybuffer"});
/* res.data is a Buffer */
@ -496,7 +496,7 @@ import * as XLSX from 'xlsx';
import * as cptable from 'xlsx/dist/cpexcel.full.mjs';
XLSX.set_cptable(cptable);
const url = "https://sheetjs.com/pres.xlsx";
const url = "https://docs.sheetjs.com/pres.xlsx";
// highlight-next-line
const data = await (await fetch(url)).arrayBuffer();
/* data is an ArrayBuffer */
@ -515,7 +515,7 @@ import * as XLSX from 'https://cdn.sheetjs.com/xlsx-${current}/package/xlsx.mjs'
import * as cptable from 'https://cdn.sheetjs.com/xlsx-${current}/package/dist/cpexcel.full.mjs';
XLSX.set_cptable(cptable);
\n\
const url = "https://sheetjs.com/pres.xlsx";
const url = "https://docs.sheetjs.com/pres.xlsx";
// highlight-next-line
const data = await (await fetch(url)).arrayBuffer();
/* data is an ArrayBuffer */
@ -542,7 +542,7 @@ resources. Responses should be manually concatenated using `Buffer.concat`:
const XLSX = require("xlsx");
const { net } = require("electron");
const url = "https://sheetjs.com/pres.xlsx";
const url = "https://docs.sheetjs.com/pres.xlsx";
const req = net.request(url);
req.on("response", (res) => {
const bufs = []; // this array will collect all of the buffers

@ -631,7 +631,7 @@ import { read, utils } from "xlsx";
import 'react-data-grid/lib/styles.css';
const url = "https://sheetjs.com/pres.xlsx";
const url = "https://docs.sheetjs.com/pres.xlsx";
export default function App() {
const [columns, setColumns] = useState([]);

@ -35,11 +35,11 @@ produces HTML output. The function takes an options argument:
| `header` | | Override header |
| `footer` | | Override footer |
Starting from [the sample file `pres.numbers`](https://sheetjs.com/pres.numbers):
Starting from [the sample file `pres.numbers`](https://docs.sheetjs.com/pres.numbers):
```jsx live
function SheetJSHTML() {
const url = "https://sheetjs.com/pres.numbers";
const url = "https://docs.sheetjs.com/pres.numbers";
const [__html, setHTML] = React.useState("");
React.useEffect(() => { (async() => {
/* download file and parse */

@ -30,7 +30,7 @@ function SheetJSPreCSView() {
setHTML(res);
};
React.useEffect(() => { (async() => {
const url = "https://sheetjs.com/pres.numbers";
const url = "https://docs.sheetjs.com/pres.numbers";
process(await (await fetch(url)).arrayBuffer());
})(); }, []);

@ -248,7 +248,7 @@ support for CSS styling and rich text.
<script>
(async() => {
/* replace with the URL of the file */
const URL_TO_DOWNLOAD = "https://sheetjs.com/pres.numbers";
const URL_TO_DOWNLOAD = "https://docs.sheetjs.com/pres.numbers";
const ab = await (await fetch(URL_TO_DOWNLOAD)).arrayBuffer();
/* Parse file and get first worksheet */
@ -268,7 +268,7 @@ support for CSS styling and rich text.
<details open>
<summary><b>Live Example</b> (click to hide)</summary>
This demo processes https://sheetjs.com/pres.numbers
This demo processes https://docs.sheetjs.com/pres.numbers
```jsx live
/* The live editor requires this function wrapper */
@ -278,7 +278,7 @@ function Numbers2HTML(props) {
/* Fetch and update HTML */
React.useEffect(() => { (async() => {
/* Fetch file */
const f = await fetch("https://sheetjs.com/pres.numbers");
const f = await fetch("https://docs.sheetjs.com/pres.numbers");
const ab = await f.arrayBuffer();
/* Parse file */

Some files were not shown because too many files have changed in this diff Show More