mdx cleanup in preparation for v2
- use autolinks (e.g <https://sheetjs.com> -> https://sheetjs.com) - move <summary> blocks to separate lines
This commit is contained in:
parent
24eaed9f6b
commit
92e3c5aa72
49
README.md
49
README.md
@ -21,6 +21,55 @@ $ make spell # spell check (.spelling custom dictionary)
|
||||
$ make graph # build format graph and legend
|
||||
```
|
||||
|
||||
### Documentation Markup
|
||||
|
||||
The original documentation used [GFM](https://github.github.com/gfm/).
|
||||
|
||||
Pages currently use MDX v1.
|
||||
|
||||
<details>
|
||||
<summary><b>MDX Notes</b> (click to show)</summary>
|
||||
|
||||
**Multi-line tags**
|
||||
|
||||
Markdown and MDX v1 accept the following:
|
||||
|
||||
```
|
||||
<details><summary><b>MDX Notes</b> (click to show)</summary>
|
||||
|
||||
Note
|
||||
|
||||
</details>
|
||||
```
|
||||
|
||||
This is no longer valid in MDX v2. The `<summary>` part must be separated:
|
||||
|
||||
```
|
||||
<details>
|
||||
<summary><b>MDX Notes</b> (click to show)</summary>
|
||||
|
||||
Note
|
||||
|
||||
</details>
|
||||
```
|
||||
|
||||
**Shortlinks**
|
||||
|
||||
Markdown and MDX v1 support shortlinks:
|
||||
|
||||
```
|
||||
Scripts are available at <https://cdn.sheetjs.com>
|
||||
```
|
||||
|
||||
This is no longer valid in MDX v2. Autolinks should be used:
|
||||
|
||||
```
|
||||
Scripts are available at https://cdn.sheetjs.com
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
### Engine Compatibility Tables
|
||||
|
||||
`docz/src/data/engines.xls` is an XLML workbook that controls the compatibility
|
||||
|
@ -11,7 +11,7 @@ import CodeBlock from '@theme/CodeBlock';
|
||||
|
||||
# Standalone Browser Scripts
|
||||
|
||||
Each standalone release script is available at <https://cdn.sheetjs.com/>.
|
||||
Each standalone release script is available at https://cdn.sheetjs.com/.
|
||||
|
||||
<p>The current version is {current} and can be referenced as follows:</p>
|
||||
|
||||
@ -33,7 +33,7 @@ new versions are released!
|
||||
A number of services host older versions of the SheetJS libraries. Due to
|
||||
syncing issues, they are generally out of date.
|
||||
|
||||
**The SheetJS CDN** <https://cdn.sheetjs.com/> **is the authoritative source**
|
||||
**The SheetJS CDN** https://cdn.sheetjs.com/ **is the authoritative source**
|
||||
**for SheetJS scripts**
|
||||
|
||||
:::
|
||||
@ -54,7 +54,8 @@ A slimmer build is generated at `dist/xlsx.mini.min.js`. Compared to full build:
|
||||
- no support for XLSB / XLS / Lotus 1-2-3 / SpreadsheetML 2003 / Numbers
|
||||
- node stream utils removed
|
||||
|
||||
<details><summary><b>How to integrate the mini build</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>How to integrate the mini build</b> (click to show)</summary>
|
||||
|
||||
Replace references to `xlsx.full.min.js` with `xlsx.mini.min.js`. Starting from
|
||||
scratch, a single script tag should be added at the top of the HTML page:
|
||||
|
@ -13,7 +13,7 @@ import CodeBlock from '@theme/CodeBlock';
|
||||
|
||||
# Frameworks and Bundlers
|
||||
|
||||
Each standalone release package is available at <https://cdn.sheetjs.com/>. The
|
||||
Each standalone release package is available at https://cdn.sheetjs.com/. The
|
||||
NodeJS package is designed to be used with frameworks and bundlers. It is a
|
||||
proper ECMAScript Module release which can be optimized with developer tools.
|
||||
|
||||
@ -88,7 +88,7 @@ but the registry is out of date. The latest version on that registry is 0.18.5
|
||||
|
||||
This is a known registry bug
|
||||
|
||||
**The SheetJS CDN** <https://cdn.sheetjs.com/> **is the authoritative source**
|
||||
**The SheetJS CDN** https://cdn.sheetjs.com/ **is the authoritative source**
|
||||
**for SheetJS modules.**
|
||||
|
||||
For existing projects, the easiest approach is to uninstall and reinstall:
|
||||
|
@ -12,7 +12,7 @@ import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
import CodeBlock from '@theme/CodeBlock';
|
||||
|
||||
Package tarballs are available on <https://cdn.sheetjs.com>.
|
||||
Package tarballs are available on https://cdn.sheetjs.com.
|
||||
|
||||
<p><a href={`https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`}>https://cdn.sheetjs.com/xlsx-{current}/xlsx-{current}.tgz</a> is the URL for version {current}</p>
|
||||
|
||||
@ -77,7 +77,7 @@ but the registry is out of date. The latest version on that registry is 0.18.5
|
||||
|
||||
This is a known registry bug
|
||||
|
||||
**The SheetJS CDN** <https://cdn.sheetjs.com/> **is the authoritative source**
|
||||
**The SheetJS CDN** https://cdn.sheetjs.com/ **is the authoritative source**
|
||||
**for SheetJS modules.**
|
||||
|
||||
For existing projects, the easiest approach is to uninstall and reinstall:
|
||||
|
@ -11,7 +11,7 @@ import CodeBlock from '@theme/CodeBlock';
|
||||
|
||||
# AMD (define)
|
||||
|
||||
Each standalone release script is available at <https://cdn.sheetjs.com/>.
|
||||
Each standalone release script is available at https://cdn.sheetjs.com/.
|
||||
|
||||
`xlsx.full.min.js` supports AMD with name `xlsx` out of the box.
|
||||
|
||||
|
@ -10,7 +10,7 @@ import current from '/version.js';
|
||||
|
||||
# ExtendScript
|
||||
|
||||
Each standalone release script is available at <https://cdn.sheetjs.com/>.
|
||||
Each standalone release script is available at https://cdn.sheetjs.com/.
|
||||
|
||||
`xlsx.extendscript.js` is an ExtendScript build for Photoshop and InDesign.
|
||||
|
||||
|
@ -13,7 +13,7 @@ import CodeBlock from '@theme/CodeBlock';
|
||||
|
||||
# Deno
|
||||
|
||||
Module scripts and type definitions are available at <https://cdn.sheetjs.com/>.
|
||||
Module scripts and type definitions are available at https://cdn.sheetjs.com/.
|
||||
|
||||
Using the URL imports, `deno run` will automatically download scripts and types:
|
||||
|
||||
@ -72,7 +72,7 @@ and the types URLs should be updated at the same time:
|
||||
|
||||
The official Deno registry is out of date. This is a registry bug.
|
||||
|
||||
**The SheetJS CDN** <https://cdn.sheetjs.com/> **is the authoritative source**
|
||||
**The SheetJS CDN** https://cdn.sheetjs.com/ **is the authoritative source**
|
||||
**for SheetJS modules.**
|
||||
|
||||
:::
|
||||
|
@ -12,7 +12,7 @@ import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
import CodeBlock from '@theme/CodeBlock';
|
||||
|
||||
Package tarballs are available on <https://cdn.sheetjs.com>.
|
||||
Package tarballs are available on https://cdn.sheetjs.com.
|
||||
|
||||
<p><a href={`https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`}>https://cdn.sheetjs.com/xlsx-{current}/xlsx-{current}.tgz</a> is the URL for version {current}</p>
|
||||
|
||||
|
@ -8,7 +8,7 @@ title: Installation
|
||||
import DocCardList from '@theme/DocCardList';
|
||||
import {useCurrentSidebarCategory} from '@docusaurus/theme-common';
|
||||
|
||||
<https://cdn.sheetjs.com> is the primary software distribution site. Please
|
||||
https://cdn.sheetjs.com is the primary software distribution site. Please
|
||||
read the installation instructions for your use case:
|
||||
|
||||
<ul>{useCurrentSidebarCategory().items.map((item, index) => {
|
||||
|
@ -43,7 +43,7 @@ sequenceDiagram
|
||||
## Acquire Data
|
||||
|
||||
The raw data is available in JSON form[^1]. It has been mirrored at
|
||||
<https://sheetjs.com/data/executive.json>
|
||||
https://sheetjs.com/data/executive.json
|
||||
|
||||
### Raw Data
|
||||
|
||||
@ -54,7 +54,8 @@ const url = "https://sheetjs.com/data/executive.json";
|
||||
const raw_data = await (await fetch(url)).json();
|
||||
```
|
||||
|
||||
<details><summary><b>Code Explanation</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Code Explanation</b> (click to show)</summary>
|
||||
|
||||
`fetch` is a low-level API for downloading data from an endpoint. It separates
|
||||
the network step from the response parsing step.
|
||||
@ -176,7 +177,8 @@ the code in more detail.
|
||||
|
||||
:::
|
||||
|
||||
<details><summary><b>Code Explanation</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Code Explanation</b> (click to show)</summary>
|
||||
|
||||
**Verifying if a person was a US President**
|
||||
|
||||
@ -234,7 +236,8 @@ represents the start of the first presidential term.
|
||||
prez.forEach(row => row.start = row.terms.find(term => term.type === "prez").start);
|
||||
```
|
||||
|
||||
<details><summary><b>Code Explanation</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Code Explanation</b> (click to show)</summary>
|
||||
|
||||
**Finding the first presidential term**
|
||||
|
||||
@ -304,7 +307,8 @@ At this point, each row in the `prez` array has a `start` property. Since the
|
||||
prez.sort((l,r) => l.start.localeCompare(r.start));
|
||||
```
|
||||
|
||||
<details><summary><b>Code Explanation</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Code Explanation</b> (click to show)</summary>
|
||||
|
||||
**Comparator Functions and Relative Ordering in JavaScript**
|
||||
|
||||
@ -370,7 +374,8 @@ const rows = prez.map(row => ({
|
||||
}));
|
||||
```
|
||||
|
||||
<details><summary><b>Code Explanation</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Code Explanation</b> (click to show)</summary>
|
||||
|
||||
**Wrangling One Data Row**
|
||||
|
||||
@ -492,7 +497,8 @@ cell styling and frozen rows.
|
||||
|
||||
:::
|
||||
|
||||
<details><summary><b>Changing Header Names</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Changing Header Names</b> (click to show)</summary>
|
||||
|
||||
By default, `json_to_sheet` creates a worksheet with a header row. In this case,
|
||||
the headers come from the JS object keys: "name" and "birthday".
|
||||
@ -506,7 +512,8 @@ XLSX.utils.sheet_add_aoa(worksheet, [["Name", "Birthday"]], { origin: "A1" });
|
||||
|
||||
</details>
|
||||
|
||||
<details><summary><b>Changing Column Widths</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Changing Column Widths</b> (click to show)</summary>
|
||||
|
||||
Some of the names are longer than the default column width. Column widths are
|
||||
set by setting the `"!cols"` worksheet property.[^7]
|
||||
@ -581,7 +588,7 @@ function Presidents() { return ( <button onClick={async () => {
|
||||
}}><b>Click to Generate file!</b></button> ); }
|
||||
```
|
||||
|
||||
<https://sheetjs.com/pres.html> is a hosted version of this demo.
|
||||
https://sheetjs.com/pres.html is a hosted version of this demo.
|
||||
|
||||
## Run the Demo Locally
|
||||
|
||||
@ -730,7 +737,8 @@ Native `fetch` support was added in NodeJS 18. For older versions of NodeJS,
|
||||
the script will throw an error `fetch is not defined`. A third-party library
|
||||
like `axios` presents a similar API for fetching data:
|
||||
|
||||
<details><summary><b>Example using axios</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Example using axios</b> (click to show)</summary>
|
||||
|
||||
Install the dependencies:
|
||||
|
||||
@ -793,7 +801,8 @@ This script will write a new file `Presidents.xlsx` in the same folder.
|
||||
|
||||
:::
|
||||
|
||||
<details><summary><b>Other Server-Side Platforms</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Other Server-Side Platforms</b> (click to show)</summary>
|
||||
|
||||
<Tabs>
|
||||
<TabItem value="deno" label="Deno">
|
||||
@ -1161,7 +1170,7 @@ see a preview of the data. The Numbers app can open the file.
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
[^1]: <https://theunitedstates.io/congress-legislators/executive.json> is the
|
||||
[^1]: https://theunitedstates.io/congress-legislators/executive.json is the
|
||||
original location of the example dataset. The contributors to the dataset
|
||||
dedicated the content to the public domain.
|
||||
[^2]: See ["The Executive Branch"](https://github.com/unitedstates/congress-legislators#the-executive-branch)
|
||||
|
@ -42,7 +42,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://sheetjs.com/data/PortfolioSummary.xls
|
||||
|
||||
:::info pass
|
||||
|
||||
@ -60,7 +60,8 @@ const url = "https://sheetjs.com/data/PortfolioSummary.xls";
|
||||
const file = await (await fetch(url)).arrayBuffer();
|
||||
```
|
||||
|
||||
<details><summary><b>Code Explanation</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Code Explanation</b> (click to show)</summary>
|
||||
|
||||
`fetch` is a low-level API for downloading data from an endpoint. It separates
|
||||
the network step from the response parsing step.
|
||||
@ -211,7 +212,8 @@ recommended to use utility functions to present JS-friendly data structures.
|
||||
The `sheet_to_html` utility function[^7] generates an HTML table from worksheet
|
||||
objects. The following live example shows the first 20 rows of data in a table:
|
||||
|
||||
<details><summary><b>Live example</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Live example</b> (click to show)</summary>
|
||||
|
||||
:::info pass
|
||||
|
||||
@ -306,7 +308,8 @@ will have holes in cells `A14:A16` (written as `null`):
|
||||
[null, "Q4", 609.1, 25.6, 423, 20.9, 8.1, 2.9, 1040.2, 39.6]
|
||||
```
|
||||
|
||||
<details><summary><b>Live example</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Live example</b> (click to show)</summary>
|
||||
|
||||
```jsx live
|
||||
function SheetJSAoAHoles() {
|
||||
@ -346,7 +349,8 @@ the code in more detail.
|
||||
|
||||
:::
|
||||
|
||||
<details><summary><b>Code Explanation</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Code Explanation</b> (click to show)</summary>
|
||||
|
||||
**Analyzing every row in the dataset**
|
||||
|
||||
@ -455,7 +459,8 @@ After post-processing, the rows now have proper year fields:
|
||||
[2013, "Q4", 609.1, 25.6, 423, 20.9, 8.1, 2.9, 1040.2, 39.6]
|
||||
```
|
||||
|
||||
<details><summary><b>Live example</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Live example</b> (click to show)</summary>
|
||||
|
||||
```jsx live
|
||||
function SheetJSAoAFilled() {
|
||||
@ -491,7 +496,8 @@ is between 2007 and 2023, `Array#filter` can be used to select the rows:
|
||||
const rows = raw_data.filter(r => r[0] >= 2007 && r[0] <= 2023);
|
||||
```
|
||||
|
||||
<details><summary><b>Live example</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Live example</b> (click to show)</summary>
|
||||
|
||||
```jsx live
|
||||
function SheetJSAoAFiltered() {
|
||||
@ -526,7 +532,8 @@ Looking at the headers:
|
||||
The desired data is in column `I`. The column index can be calculated using
|
||||
`XLSX.utils.decode_col`[^11].
|
||||
|
||||
<details><summary><b>Column Index calculation</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Column Index calculation</b> (click to show)</summary>
|
||||
|
||||
```jsx live
|
||||
function SheetJSDecodeCol() {
|
||||
@ -565,7 +572,8 @@ following row:
|
||||
{ "FY": 2016, "FQ": "Q1", "total": 1220.3 }
|
||||
```
|
||||
|
||||
<details><summary><b>Live example</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Live example</b> (click to show)</summary>
|
||||
|
||||
```jsx live
|
||||
function SheetJSObjects() {
|
||||
@ -617,7 +625,7 @@ best presented in simple HTML tables[^12]:
|
||||
|
||||
### Vanilla JS
|
||||
|
||||
<https://sheetjs.com/sl.html> is a hosted version of this demo.
|
||||
https://sheetjs.com/sl.html is a hosted version of this demo.
|
||||
|
||||
Without a framework, HTML table row elements can be programmatically created
|
||||
with `document.createElement` and added to the table body element. For example,
|
||||
|
@ -19,8 +19,8 @@ deployments and use cases.
|
||||
|
||||
## Installation
|
||||
|
||||
<https://cdn.sheetjs.com> is the primary software distribution site. Please
|
||||
read the installation instructions for your use case:
|
||||
https://cdn.sheetjs.com is the primary software distribution site. Please read
|
||||
the installation instructions for your use case:
|
||||
|
||||
<ul>{useCurrentSidebarCategory().items.map((item, index) => {
|
||||
if(item.label != "Installation") return "";
|
||||
|
@ -382,7 +382,8 @@ function aoa_average_of_key(aoo, key) {
|
||||
}
|
||||
```
|
||||
|
||||
<details><summary><b>Live Demo</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Live Demo</b> (click to show)</summary>
|
||||
|
||||
```jsx live
|
||||
function SheetJSAoOAverageKey() {
|
||||
@ -437,7 +438,8 @@ function ws_average_of_col(ws, C) {
|
||||
}
|
||||
```
|
||||
|
||||
<details><summary><b>Live Demo</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Live Demo</b> (click to show)</summary>
|
||||
|
||||
```jsx live
|
||||
function SheetJSDenseAverageKey() {
|
||||
@ -511,7 +513,8 @@ The van Reeken array mean can be implemented in one line of JavaScript code:
|
||||
for(var n = 1, mean = 0; n <= x.length; ++n) mean += (x[n-1] - mean)/n;
|
||||
```
|
||||
|
||||
<details><summary><b>Math details</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Math details</b> (click to show)</summary>
|
||||
|
||||
Let $M[x;m] = \frac{1}{m}\sum_{i=1}^{m}x_m$ be the mean of the first $m$ elements. Then:
|
||||
|
||||
@ -592,7 +595,8 @@ function aoa_mean_of_key(aoo, key) {
|
||||
}
|
||||
```
|
||||
|
||||
<details><summary><b>Live Demo</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Live Demo</b> (click to show)</summary>
|
||||
|
||||
```jsx live
|
||||
function SheetJSAoOMeanKey() {
|
||||
@ -647,7 +651,8 @@ function ws_mean_of_col(ws, C) {
|
||||
}
|
||||
```
|
||||
|
||||
<details><summary><b>Live Demo</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Live Demo</b> (click to show)</summary>
|
||||
|
||||
```jsx live
|
||||
function SheetJSDenseMeanKey() {
|
||||
|
@ -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://sheetjs.com/data/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
|
||||
@ -126,7 +126,8 @@ The demo builds a model for predicting MPG from Horsepower data. It:
|
||||
- builds a model and trains with `fitDataset`[^8]
|
||||
- predicts MPG from a set of sample inputs and displays results in a table
|
||||
|
||||
<details><summary><b>Live Demo</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Live Demo</b> (click to show)</summary>
|
||||
|
||||
:::caution pass
|
||||
|
||||
|
@ -32,7 +32,8 @@ Demos for various libraries are included in separate pages:
|
||||
Modern JavaScript math and statistics libraries typically use `Float64Array` or
|
||||
`Float32Array` objects to efficiently store data variables.
|
||||
|
||||
<details><summary><b>Technical details</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Technical details</b> (click to show)</summary>
|
||||
|
||||
Under the hood, `ArrayBuffer` objects represent raw binary data. "Typed arrays"
|
||||
such as `Float64Array` and `Float32Array` are objects designed for efficient
|
||||
@ -140,7 +141,8 @@ for(let R = 1; R < aoa.length; ++R) {
|
||||
}
|
||||
```
|
||||
|
||||
<details><summary><b>Live Demo</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Live Demo</b> (click to show)</summary>
|
||||
|
||||
This example fetches and parses [`iris.xlsx`](pathname:///typedarray/iris.xlsx).
|
||||
The first worksheet is processed and the new data and mapping are printed.
|
||||
@ -293,7 +295,8 @@ XLSX.utils.sheet_add_aoa(ws, [ arr ], { origin: "B1" });
|
||||
|
||||
![Typed Array to single row with title](pathname:///typedarray/ta-row.png)
|
||||
|
||||
<details open><summary><b>Live Demo</b> (click to hide)</summary>
|
||||
<details open>
|
||||
<summary><b>Live Demo</b> (click to hide)</summary>
|
||||
|
||||
In this example, two typed arrays are exported. `aoa_to_sheet` creates the
|
||||
worksheet and `sheet_add_aoa` will add the data to the sheet.
|
||||
@ -375,7 +378,8 @@ XLSX.utils.sheet_add_aoa(ws, arr, { origin: "A2" });
|
||||
|
||||
![Typed Array to single column with title](pathname:///typedarray/ta-col.png)
|
||||
|
||||
<details open><summary><b>Live Demo</b> (click to hide)</summary>
|
||||
<details open>
|
||||
<summary><b>Live Demo</b> (click to hide)</summary>
|
||||
|
||||
In this example, two typed arrays are exported. `aoa_to_sheet` creates the
|
||||
worksheet and `sheet_add_aoa` will add the data to the sheet.
|
||||
|
@ -314,7 +314,8 @@ export default function SheetJSKaiokenAoO() {
|
||||
}
|
||||
```
|
||||
|
||||
<details open><summary><b>How to run the example</b> (click to hide)</summary>
|
||||
<details open>
|
||||
<summary><b>How to run the example</b> (click to hide)</summary>
|
||||
|
||||
<Tabs groupId="starter">
|
||||
<TabItem name="vite" value="ViteJS">
|
||||
@ -410,7 +411,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://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.
|
||||
|
||||
@ -468,7 +469,8 @@ export default function SheetJSKaiokenHTML() {
|
||||
}
|
||||
```
|
||||
|
||||
<details open><summary><b>How to run the example</b> (click to hide)</summary>
|
||||
<details open>
|
||||
<summary><b>How to run the example</b> (click to hide)</summary>
|
||||
|
||||
<Tabs groupId="starter">
|
||||
<TabItem name="vite" value="ViteJS">
|
||||
@ -564,7 +566,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://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.
|
||||
|
||||
|
@ -317,7 +317,8 @@ export default function SheetJSReactAoO() {
|
||||
}
|
||||
```
|
||||
|
||||
<details open><summary><b>How to run the example</b> (click to hide)</summary>
|
||||
<details open>
|
||||
<summary><b>How to run the example</b> (click to hide)</summary>
|
||||
|
||||
<Tabs groupId="starter">
|
||||
<TabItem name="vite" value="ViteJS">
|
||||
@ -541,7 +542,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://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.
|
||||
|
||||
@ -600,7 +601,8 @@ export default function SheetJSReactHTML() {
|
||||
}
|
||||
```
|
||||
|
||||
<details open><summary><b>How to run the example</b> (click to hide)</summary>
|
||||
<details open>
|
||||
<summary><b>How to run the example</b> (click to hide)</summary>
|
||||
|
||||
<Tabs groupId="starter">
|
||||
<TabItem name="vite" value="ViteJS">
|
||||
@ -709,7 +711,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://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.
|
||||
|
||||
|
@ -414,7 +414,8 @@ export class AppComponent {
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
<details open><summary><b>How to run the example</b> (click to hide)</summary>
|
||||
<details open>
|
||||
<summary><b>How to run the example</b> (click to hide)</summary>
|
||||
|
||||
:::note Tested Deployments
|
||||
|
||||
@ -607,7 +608,8 @@ export class AppComponent {
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
<details open><summary><b>How to run the example</b> (click to hide)</summary>
|
||||
<details open>
|
||||
<summary><b>How to run the example</b> (click to hide)</summary>
|
||||
|
||||
:::note Tested Deployments
|
||||
|
||||
@ -1034,7 +1036,7 @@ will have an `ng-version` attribute.
|
||||
npm run build
|
||||
```
|
||||
|
||||
[^1]: The main website for Angular versions 2-16 is <https://angular.io/> . The project moved to a new domain <https://angular.dev/> during the Angular 17 launch.
|
||||
[^1]: The main website for Angular versions 2-16 is https://angular.io/ . The project moved to a new domain https://angular.dev/ during the Angular 17 launch.
|
||||
[^2]: See `OnInit` in the [Angular 2-16 docs](https://angular.io/api/core/OnInit) or [Angular 17 docs](https://angular.dev/guide/components/lifecycle#ngoninit)
|
||||
[^3]: See [`ngFor`](https://angular.io/api/common/NgFor) in the Angular 2-16 docs.
|
||||
[^4]: See [`@for`](https://angular.dev/api/core/@for) in the Angular 17 docs.
|
||||
|
@ -345,7 +345,8 @@ function exportFile() {
|
||||
</template>
|
||||
```
|
||||
|
||||
<details open><summary><b>How to run the example</b> (click to hide)</summary>
|
||||
<details open>
|
||||
<summary><b>How to run the example</b> (click to hide)</summary>
|
||||
|
||||
<Tabs groupId="starter">
|
||||
<TabItem name="vite" value="ViteJS">
|
||||
@ -505,7 +506,8 @@ function exportFile() {
|
||||
</template>
|
||||
```
|
||||
|
||||
<details open><summary><b>How to run the example</b> (click to hide)</summary>
|
||||
<details open>
|
||||
<summary><b>How to run the example</b> (click to hide)</summary>
|
||||
|
||||
<Tabs groupId="starter">
|
||||
<TabItem name="vite" value="ViteJS">
|
||||
|
@ -128,7 +128,8 @@ function exportFile() {
|
||||
</main>
|
||||
```
|
||||
|
||||
<details open><summary><b>How to run the example</b> (click to hide)</summary>
|
||||
<details open>
|
||||
<summary><b>How to run the example</b> (click to hide)</summary>
|
||||
|
||||
:::note Tested Deployments
|
||||
|
||||
@ -227,7 +228,8 @@ function exportFile() {
|
||||
</main>
|
||||
```
|
||||
|
||||
<details open><summary><b>How to run the example</b> (click to hide)</summary>
|
||||
<details open>
|
||||
<summary><b>How to run the example</b> (click to hide)</summary>
|
||||
|
||||
:::note Tested Deployments
|
||||
|
||||
|
@ -235,7 +235,8 @@ $scope.exportSheetJS = function() {
|
||||
};
|
||||
```
|
||||
|
||||
<details><summary><b>Complete Example</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Complete Example</b> (click to show)</summary>
|
||||
|
||||
1) Save the following to `index.html`:
|
||||
|
||||
@ -336,7 +337,8 @@ The HTML table can be directly exported with [`table_to_book`](/docs/api/utiliti
|
||||
};
|
||||
```
|
||||
|
||||
<details><summary><b>Complete Example</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Complete Example</b> (click to show)</summary>
|
||||
|
||||
1) Save the following to `index.html`:
|
||||
|
||||
|
@ -63,7 +63,7 @@ The official Google CDN does not have the newest releases of Dojo Toolkit
|
||||
|
||||
**This is a known Google CDN bug.**
|
||||
|
||||
The script <https://docs.sheetjs.com/dojo/dojo.js> was fetched from the official
|
||||
The script https://docs.sheetjs.com/dojo/dojo.js was fetched from the official
|
||||
`1.17.3` uncompressed release artifact[^1].
|
||||
|
||||
:::
|
||||
@ -201,5 +201,5 @@ function export_all_data_from_store(store) {
|
||||
}
|
||||
```
|
||||
|
||||
[^1]: All Dojo Toolkit releases are available at <https://download.dojotoolkit.org/>. The mirrored `dojo.js` corresponds to the `1.17.3` uncompressed script <http://download.dojotoolkit.org/release-1.17.3/dojo.js.uncompressed.js>.
|
||||
[^1]: All Dojo Toolkit releases are available at https://download.dojotoolkit.org/. The mirrored `dojo.js` corresponds to the `1.17.3` uncompressed script http://download.dojotoolkit.org/release-1.17.3/dojo.js.uncompressed.js.
|
||||
[^2]: See [`dojo/store`](https://dojotoolkit.org/reference-guide/dojo/store.html) in the Dojo Toolkit documentation.
|
@ -48,7 +48,8 @@ The SheetJS testing grid still includes IE and should work.
|
||||
The modern upload and download strategies are not available in older versions of
|
||||
IE, but there are approaches using ActiveX or Flash.
|
||||
|
||||
<details><summary><b>Complete Example</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Complete Example</b> (click to show)</summary>
|
||||
|
||||
This demo includes all of the support files for the Flash and ActiveX methods.
|
||||
|
||||
@ -76,7 +77,8 @@ npx -y http-server .
|
||||
|
||||
</details>
|
||||
|
||||
<details><summary><b>Other Live Demos</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Other Live Demos</b> (click to show)</summary>
|
||||
|
||||
:::caution pass
|
||||
|
||||
@ -85,10 +87,10 @@ demo pages should be downloaded and hosted using a simple HTTP server.
|
||||
|
||||
:::
|
||||
|
||||
<https://oss.sheetjs.com/sheetjs/ajax.html> uses XMLHttpRequest to download test
|
||||
https://oss.sheetjs.com/sheetjs/ajax.html uses XMLHttpRequest to download test
|
||||
files and convert to CSV
|
||||
|
||||
<https://oss.sheetjs.com/sheetjs/> demonstrates reading files with `FileReader`.
|
||||
https://oss.sheetjs.com/sheetjs/ demonstrates reading files with `FileReader`.
|
||||
|
||||
Older versions of IE do not support HTML5 File API but do support Base64.
|
||||
|
||||
@ -214,7 +216,8 @@ This demo was tested in the following environments:
|
||||
|
||||
:::
|
||||
|
||||
<details><summary><b>Full Exposition</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Full Exposition</b> (click to show)</summary>
|
||||
|
||||
**State**
|
||||
|
||||
|
@ -128,7 +128,8 @@ document.getElementById("xport").onclick = async() => {
|
||||
For ParcelJS version 1, the entire script should be copied to `index.js` and the
|
||||
main `index.html` page should load the `index.js` script:
|
||||
|
||||
<details><summary><b>ParcelJS v1 example</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>ParcelJS v1 example</b> (click to show)</summary>
|
||||
|
||||
```html title="index.html"
|
||||
<body>
|
||||
|
@ -45,7 +45,8 @@ Complete Examples are included [in the "Dojo" demo](/docs/demos/frontend/dojo)
|
||||
|
||||
Snowpack works with no caveats.
|
||||
|
||||
<details><summary><b>Complete Example</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Complete Example</b> (click to show)</summary>
|
||||
|
||||
:::note Tested Deployments
|
||||
|
||||
@ -166,7 +167,8 @@ Click on "Click here to export" to generate a file.
|
||||
|
||||
WMR works with no caveats.
|
||||
|
||||
<details><summary><b>Complete Example</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Complete Example</b> (click to show)</summary>
|
||||
|
||||
:::note Tested Deployments
|
||||
|
||||
|
@ -71,7 +71,7 @@ const wb = XLSX.read(ab);
|
||||
|
||||
## Browser Demos
|
||||
|
||||
When the page is accessed, the browser will attempt to download <https://sheetjs.com/pres.numbers>
|
||||
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]
|
||||
@ -108,9 +108,10 @@ req.onload = function(e) {
|
||||
req.send();
|
||||
```
|
||||
|
||||
<details><summary><b>Live Download demo</b> (click to show)</summary>
|
||||
<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 download https://sheetjs.com/pres.numbers
|
||||
and show the data in an HTML table.
|
||||
|
||||
```jsx live
|
||||
@ -160,9 +161,10 @@ fetch(url).then(function(res) {
|
||||
});
|
||||
```
|
||||
|
||||
<details><summary><b>Live Download demo</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Live Download demo</b> (click to show)</summary>
|
||||
|
||||
This demo uses `fetch` to download <https://sheetjs.com/pres.numbers> and show
|
||||
This demo uses `fetch` to download https://sheetjs.com/pres.numbers and show
|
||||
the data in an HTML table.
|
||||
|
||||
```jsx live
|
||||
@ -254,9 +256,10 @@ async function workbook_dl_axios(url) {
|
||||
}
|
||||
```
|
||||
|
||||
<details><summary><b>Live Download demo</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Live Download demo</b> (click to show)</summary>
|
||||
|
||||
This demo uses `axios` to download <https://sheetjs.com/pres.numbers> and show
|
||||
This demo uses `axios` to download https://sheetjs.com/pres.numbers and show
|
||||
the data in an HTML table.
|
||||
|
||||
:::caution pass
|
||||
@ -315,9 +318,10 @@ superagent
|
||||
});
|
||||
```
|
||||
|
||||
<details><summary><b>Live Download demo</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Live Download demo</b> (click to show)</summary>
|
||||
|
||||
This demo uses `superagent` to download <https://sheetjs.com/pres.numbers> and
|
||||
This demo uses `superagent` to download https://sheetjs.com/pres.numbers and
|
||||
show the data in an HTML table.
|
||||
|
||||
:::caution pass
|
||||
@ -384,7 +388,8 @@ https.get('https://sheetjs.com/pres.numbers', function(res) {
|
||||
});
|
||||
```
|
||||
|
||||
<details><summary><b>Complete Example</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Complete Example</b> (click to show)</summary>
|
||||
|
||||
:::note Tested Environments
|
||||
|
||||
@ -431,7 +436,8 @@ async function parse_from_url(url) {
|
||||
}
|
||||
```
|
||||
|
||||
<details><summary><b>Complete Example</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Complete Example</b> (click to show)</summary>
|
||||
|
||||
:::note Tested Environments
|
||||
|
||||
@ -510,7 +516,8 @@ request(url, {encoding: null}, function(err, res, data) {
|
||||
});
|
||||
```
|
||||
|
||||
<details><summary><b>Complete Example</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Complete Example</b> (click to show)</summary>
|
||||
|
||||
:::note Tested Environments
|
||||
|
||||
@ -552,7 +559,8 @@ async function workbook_dl_axios(url) {
|
||||
}
|
||||
```
|
||||
|
||||
<details><summary><b>Complete Example</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Complete Example</b> (click to show)</summary>
|
||||
|
||||
:::note Tested Environments
|
||||
|
||||
|
@ -114,7 +114,7 @@ fdata.append('file', file);
|
||||
This demo explores a number of APIs and libraries for making POST requests. Each
|
||||
approach will upload data stored in `FormData` objects.
|
||||
|
||||
This snippet uses `XMLHttpRequest` to upload data to <https://s2c.sheetjs.com>:
|
||||
This snippet uses `XMLHttpRequest` to upload data to https://s2c.sheetjs.com:
|
||||
|
||||
```js title="Uploading Form Data with XMLHttpRequest"
|
||||
/* send data using XMLHttpRequest */
|
||||
@ -126,7 +126,7 @@ req.send(fdata);
|
||||
## Browser Demos
|
||||
|
||||
When the upload button is clicked, the browser will build up a new workbook,
|
||||
generate a XLSX file, upload it to <https://s2c.sheetjs.com> and show the
|
||||
generate a XLSX file, upload it to https://s2c.sheetjs.com and show the
|
||||
response. If the process was successful, a HTML table will be displayed
|
||||
|
||||
:::note Tested Deployments
|
||||
@ -142,7 +142,7 @@ Each browser demo was tested in the following environments:
|
||||
|
||||
#### Test Server
|
||||
|
||||
The <https://s2c.sheetjs.com> service is currently hosted on Deno Deploy. The
|
||||
The https://s2c.sheetjs.com service is currently hosted on Deno Deploy. The
|
||||
["Deno Deploy" demo](/docs/demos/cloud/deno#demo) covers the exact steps for
|
||||
deploying the service.
|
||||
|
||||
@ -162,7 +162,8 @@ req.open("POST", "https://s2c.sheetjs.com", true);
|
||||
req.send(fdata);
|
||||
```
|
||||
|
||||
<details><summary><b>Complete Code Snippet</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Complete Code Snippet</b> (click to show)</summary>
|
||||
|
||||
```js title="SheetJS + XMLHttpRequest example"
|
||||
/* create sample SheetJS workbook object */
|
||||
@ -190,10 +191,11 @@ req.send(fdata);
|
||||
|
||||
</details>
|
||||
|
||||
<details><summary><b>Live demo</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Live demo</b> (click to show)</summary>
|
||||
|
||||
This demo starts from an array of arrays of data. When the button is clicked, a
|
||||
workbook file will be generated and uploaded to <https://s2c.sheetjs.com>. The
|
||||
workbook file will be generated and uploaded to https://s2c.sheetjs.com. The
|
||||
service will return a HTML table.
|
||||
|
||||
```jsx live
|
||||
@ -263,7 +265,8 @@ function SheetJSXHRUL() {
|
||||
fetch("https://s2c.sheetjs.com", { method: "POST", body: fdata });
|
||||
```
|
||||
|
||||
<details><summary><b>Complete Code Snippet</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Complete Code Snippet</b> (click to show)</summary>
|
||||
|
||||
```js title="SheetJS + fetch example"
|
||||
/* create sample SheetJS workbook object */
|
||||
@ -289,9 +292,10 @@ fetch("https://s2c.sheetjs.com", { method: "POST", body: fdata });
|
||||
|
||||
</details>
|
||||
|
||||
<details><summary><b>Live demo</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Live demo</b> (click to show)</summary>
|
||||
|
||||
This demo uses `fetch` to upload data to <https://s2c.sheetjs.com>. It will parse
|
||||
This demo uses `fetch` to upload data to https://s2c.sheetjs.com. It will parse
|
||||
the workbook and return an HTML table.
|
||||
|
||||
```jsx live
|
||||
@ -364,7 +368,8 @@ Uploading form data is nearly identical to the `fetch` example:
|
||||
axios("https://s2c.sheetjs.com", { method: "POST", body: fdata });
|
||||
```
|
||||
|
||||
<details><summary><b>Complete Code Snippet</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Complete Code Snippet</b> (click to show)</summary>
|
||||
|
||||
```js title="SheetJS + axios example"
|
||||
/* create sample SheetJS workbook object */
|
||||
@ -390,9 +395,10 @@ axios("https://s2c.sheetjs.com", { method: "POST", data: fdata });
|
||||
|
||||
</details>
|
||||
|
||||
<details><summary><b>Live demo</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Live demo</b> (click to show)</summary>
|
||||
|
||||
This demo uses `axios` to upload data to <https://s2c.sheetjs.com>. It will parse
|
||||
This demo uses `axios` to upload data to https://s2c.sheetjs.com. It will parse
|
||||
the workbook and return an HTML table.
|
||||
|
||||
:::caution pass
|
||||
@ -472,7 +478,8 @@ The `send` method accepts a `FormData` object as the first argument:
|
||||
superagent.post("https://s2c.sheetjs.com").send(fd);
|
||||
```
|
||||
|
||||
<details><summary><b>Complete Code Snippet</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Complete Code Snippet</b> (click to show)</summary>
|
||||
|
||||
```js title="SheetJS + superagent example"
|
||||
/* create sample SheetJS workbook object */
|
||||
@ -498,9 +505,10 @@ superagent.post("https://s2c.sheetjs.com").send(fd);
|
||||
|
||||
</details>
|
||||
|
||||
<details><summary><b>Live demo</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Live demo</b> (click to show)</summary>
|
||||
|
||||
This demo uses `superagent` to upload data to <https://s2c.sheetjs.com>. It will
|
||||
This demo uses `superagent` to upload data to https://s2c.sheetjs.com. It will
|
||||
parse the workbook and return an HTML table.
|
||||
|
||||
:::caution pass
|
||||
@ -587,9 +595,10 @@ This demo was tested in the following environments:
|
||||
|
||||
:::
|
||||
|
||||
<details><summary><b>Complete Example</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Complete Example</b> (click to show)</summary>
|
||||
|
||||
This demo uses `fetch` to upload data to <https://s2c.sheetjs.com>. It will parse
|
||||
This demo uses `fetch` to upload data to https://s2c.sheetjs.com. It will parse
|
||||
the workbook and return data in CSV rows.
|
||||
|
||||
1) Install the [SheetJS NodeJS module](/docs/getting-started/installation/nodejs):
|
||||
@ -709,9 +718,10 @@ This demo was tested in the following environments:
|
||||
|
||||
:::
|
||||
|
||||
<details><summary><b>Complete Example</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Complete Example</b> (click to show)</summary>
|
||||
|
||||
This demo uses `request` to upload data to <https://s2c.sheetjs.com>. It will
|
||||
This demo uses `request` to upload data to https://s2c.sheetjs.com. It will
|
||||
parse the workbook and return data in CSV rows.
|
||||
|
||||
1) Install the [SheetJS NodeJS module](/docs/getting-started/installation/nodejs)
|
||||
|
@ -151,7 +151,7 @@ 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
|
||||
4) Test POST requests using https://sheetjs.com/pres.numbers . The following
|
||||
commands should be run in a new terminal window:
|
||||
|
||||
```bash
|
||||
|
@ -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://sheetjs.com/pres.numbers
|
||||
|
||||
4) Open `http://localhost:7262/` in your browser.
|
||||
|
||||
|
@ -151,7 +151,7 @@ app.listen(3000);
|
||||
bun run src/SheetJSElysia.ts
|
||||
```
|
||||
|
||||
5) Test POST requests using <https://sheetjs.com/pres.numbers> . The following
|
||||
5) Test POST requests using https://sheetjs.com/pres.numbers . The following
|
||||
commands should be run in a new terminal window:
|
||||
|
||||
```bash
|
||||
|
@ -209,7 +209,7 @@ npx @nestjs/cli start
|
||||
|
||||
:::
|
||||
|
||||
8) Test POST requests using <https://sheetjs.com/pres.numbers> . The following
|
||||
8) Test POST requests using https://sheetjs.com/pres.numbers . The following
|
||||
commands should be run in a new terminal window:
|
||||
|
||||
```bash
|
||||
|
@ -166,7 +166,7 @@ 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
|
||||
3) Test POST requests using https://sheetjs.com/pres.numbers . The following
|
||||
commands should be run in a new terminal window:
|
||||
|
||||
```bash
|
||||
|
@ -120,7 +120,8 @@ That approach is not explored in this demo.
|
||||
|
||||
:::
|
||||
|
||||
<details><summary><b>Complete Example</b> (click to show)</summary>
|
||||
<details>
|
||||
<summary><b>Complete Example</b> (click to show)</summary>
|
||||
|
||||
:::note Tested Deployments
|
||||
|
||||
|