This commit is contained in:
SheetJS 2022-08-26 15:21:53 -04:00
parent 94d2754778
commit 8dec73b809
11 changed files with 120 additions and 21 deletions

@ -6,9 +6,17 @@ build:
mv docz/build/ docs
cp CNAME docs
.PHONY: init
init:
cd docz; npm i; cd ..
.PHONY: dev
dev:
cd docz; npm run start; cd ..
.PHONY: serve
serve:
cd docs; python -mSimpleHTTPServer || python3 -mhttp.server; cd -
npx -y http-server docs
.PHONY: spell
spell:

@ -1,3 +1,35 @@
# SheetJS CE Docs
Hosted URL: <https://docs.sheetjs.com>
## Development
`docz/version.js` exports a version number for use in docs pages.
Build commands:
```bash
$ make init # install dependencies
$ make # build static site
$ make serve # serve static site
$ make dev # run dev server
$ make spell # spell check (.spelling custom dictionary)
$ make graph # build format graph and legend
```
## Live Demos
**Imports do not work from live codeblocks!**
<https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js> is loaded
on each page, making the `XLSX` variable available to live blocks.
Specific pages can load scripts using the `head` component:
```html
<head>
<script src="https://cdn.sheetjs.com/xspreadsheet/xlsxspread.min.js"></script>
</head>
```

@ -119,7 +119,7 @@ import { read, writeFileXLSX } from "https://cdn.sheetjs.com/xlsx-${current}/pac
</script>`}
</code></pre>
If XLS support is required, `cpexcel.full.mjs` must be manually imported:
If Encoding support is required, `cpexcel.full.mjs` must be manually imported:
<pre><code parentName="pre" {...{"className": "language-html"}}>{`\
<script type="module">

@ -78,9 +78,9 @@ yarn add https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`}
:::
## XLS Support
## Encoding support
If XLS support is required, `cpexcel.full.mjs` must be manually imported:
If Encoding support is required, `cpexcel.full.mjs` must be manually imported:
```js
/* load the codepage support library for extended support with older formats */

@ -32,9 +32,9 @@ but the Deno registry is out of date.
:::
## XLS Support
## Encoding support
If XLS support is required, `cpexcel.full.mjs` must be manually imported:
If Encoding support is required, `cpexcel.full.mjs` must be manually imported:
<pre><code parentName="pre" {...{"className": "language-ts"}}>{`\
/* load the codepage support library for extended support with older formats */

@ -27,11 +27,13 @@ After downloading the script, it can be directly imported:
```js
import * as XLSX from './xlsx.mjs';
import * as fs from 'fs';
XLSX.set_fs(fs);
```
## XLS Support
## Encoding support
If XLS support is required, `cpexcel.full.mjs` must be manually imported.
If Encoding support is required, `cpexcel.full.mjs` must be manually imported.
<div><a href={`https://cdn.sheetjs.com/xlsx-${current}/package/dist/cpexcel.full.mjs`}>https://cdn.sheetjs.com/xlsx-{current}/package/dist/cpexcel.full.mjs</a> is the URL for {current}</div><br/>

@ -1,5 +1,5 @@
---
title: Data Grids and UI
title: Data Grids and Tables
---
Various JavaScript UI components provide a more interactive editing experience.

@ -270,8 +270,7 @@ The following example shows how to query for each table in an SQLite database,
query for the data for each table, add each non-empty table to a workbook, and
export as XLSX.
[The Northwind database is available in SQLite form](https://github.com/jpwhite3/northwind-SQLite3/raw/master/Northwind_large.sqlite.zip).
Download and expand the zip archive to reveal `Northwind_large.sqlite`
[The Northwind database is available in SQLite form](https://raw.githubusercontent.com/jpwhite3/northwind-SQLite3/master/dist/northwind.db).
<Tabs>
<TabItem value="nodejs" label="NodeJS">
@ -298,7 +297,7 @@ import * as fs from 'fs';
XLSX.set_fs(fs);
/* Initialize database */
var db = Database("Northwind_large.sqlite");
var db = Database("northwind.db");
/* Create new workbook */
var wb = XLSX.utils.book_new();
@ -348,7 +347,7 @@ import * as fs from 'fs';
XLSX.set_fs(fs);
/* Initialize database */
var db = Database.open("Northwind_large.sqlite");
var db = Database.open("northwind.db");
/* Create new workbook */
var wb = XLSX.utils.book_new();
@ -375,6 +374,51 @@ XLSX.writeFile(wb, "bun.xlsx");
3) Run `bun bun.mjs` and open `bun.xlsx`
</TabItem>
<TabItem value="deno" label="Deno">
[`sqlite` library](https://deno.land/x/sqlite/) returns raw arrays of arrays.
1) Save the following to `deno.ts`:
```ts title="deno.ts"
/* Load SQLite3 connector library */
import { DB } from "https://deno.land/x/sqlite/mod.ts";
/* Load SheetJS library */
// @deno-types="https://cdn.sheetjs.com/xlsx-latest/package/types/index.d.ts"
import * as XLSX from 'https://cdn.sheetjs.com/xlsx-latest/package/xlsx.mjs';
/* Initialize database */
var db = new DB("northwind.db");
/* Create new workbook */
var wb = XLSX.utils.book_new();
/* Get list of table names */
var sql = db.prepareQuery("SELECT name FROM sqlite_master WHERE type='table'");
var result = sql.all();
/* Loop across each name */
result.forEach(function(row) {
/* Get first 100K rows */
var query = db.prepareQuery("SELECT * FROM '" + row[0] + "' LIMIT 100000")
var aoa = query.all();
if(aoa.length > 0) {
/* Create array of arrays */
var data = [query.columns().map(x => x.name)].concat(aoa);
/* Create Worksheet from the aoa */
var ws = XLSX.utils.aoa_to_sheet(data, {dense: true});
/* Add to Workbook */
XLSX.utils.book_append_sheet(wb, ws, row[0]);
}
});
/* Write File */
XLSX.writeFile(wb, "deno.xlsx");
```
3) Run `deno run --allow-read --allow-write deno.ts` and open `deno.xlsx`
</TabItem>
</Tabs>

@ -80,7 +80,7 @@ onMount(async() => {
// highlight-start
pres = utils.sheet_to_json(ws); // generate objects and update state
// highlight-end
})
});
/* get state data and export to XLSX */
function exportFile() {
@ -131,7 +131,7 @@ onMount(async() => {
// highlight-start
html = utils.sheet_to_html(ws); // generate HTML and update state
// highlight-end
})
});
/* get state data and export to XLSX */
function exportFile() {

@ -311,7 +311,7 @@ import * as fs from 'fs';
set_fs(fs);
var wb = XLSX.readFile("sheetjs.numbers");
XLSX.writeFile(wb, "sheetjs.xls");
XLSX.writeFile(wb, "sheetjs.xlsx");
```
### Deno
@ -327,6 +327,19 @@ const wb = XLSX.readFile("sheetjs.numbers");
XLSX.writeFile(wb, "sheetjs.xlsx");
```
### Bun
Bun requires the `fs` module:
```js
import * as XLSX from 'xlsx';
import * as fs from 'fs';
XLSX.set_fs(fs);
var wb = XLSX.readFile("sheetjs.numbers");
XLSX.writeFile(wb, "sheetjs.xlsx");
```
### Apps
Desktop and mobile apps have their own specific APIs covered in separate demos:

@ -78,12 +78,12 @@ function Table2XLSX(props) {
/* Callback invoked when the button is clicked */
const xport = React.useCallback(async () => {
/* Create worksheet from HTML DOM TABLE */
const table = document.getElementById("Table2XLSX");
const wb = XLSX.utils.table_to_book(table);
/* Create worksheet from HTML DOM TABLE */
const table = document.getElementById("Table2XLSX");
const wb = XLSX.utils.table_to_book(table);
/* Export to file (start a download) */
XLSX.writeFile(wb, "SheetJSTable.xlsx");
/* Export to file (start a download) */
XLSX.writeFile(wb, "SheetJSTable.xlsx");
});
return (<>