forked from sheetjs/docs.sheetjs.com
chinook
This commit is contained in:
parent
727a67b152
commit
820cbdfada
@ -373,6 +373,13 @@ node esb.node.js
|
||||
|
||||
</details>
|
||||
|
||||
:::note
|
||||
|
||||
Bundling raw data is supported using the `binary` loader. For more advanced
|
||||
content workflows, [ViteJS](/docs/demos/static/vitejs) is the recommended tool.
|
||||
|
||||
:::
|
||||
|
||||
## Parcel
|
||||
|
||||
Parcel should play nice with SheetJS out of the box.
|
||||
|
@ -68,7 +68,7 @@ db.readTransaction(tx =>
|
||||
|
||||
:::note
|
||||
|
||||
This demo was last tested on 2023 April 30
|
||||
This demo was last tested on 2023 May 28 in Chromium 113
|
||||
|
||||
:::
|
||||
|
||||
@ -122,21 +122,41 @@ 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://raw.githubusercontent.com/jpwhite3/northwind-SQLite3/master/dist/northwind.db).
|
||||
The Chinook database is a MIT-licensed sample database. The original source code
|
||||
repository `http://chinookdatabase.codeplex.com` is no longer available, so the
|
||||
[raw SQL queries are mirrored here](pathname:///sqlite/chinook.sql).
|
||||
|
||||
:::note
|
||||
|
||||
This demo was last tested on 2023 February 26
|
||||
This demo was last tested on 2023 May 28
|
||||
|
||||
:::
|
||||
|
||||
### NodeJS
|
||||
|
||||
The **`better-sqlite3`** module provides a very simple API for working with
|
||||
SQLite databases. `Statement#all` runs a prepared statement and returns an array
|
||||
of JS objects.
|
||||
The `better-sqlite3` module provides an API for working with SQLite databases.
|
||||
`Statement#all` runs a prepared statement and returns an array of objects:
|
||||
|
||||
0) [Download `northwind.db`](https://raw.githubusercontent.com/jpwhite3/northwind-SQLite3/master/dist/northwind.db).
|
||||
```js
|
||||
import Database from "better-sqlite3";
|
||||
import * as XLSX from "xlsx";
|
||||
|
||||
/* open database */
|
||||
var db = Database("chinook.db");
|
||||
|
||||
/* get data from the `Invoice` table */
|
||||
var aoo = db.prepare("SELECT * FROM 'Invoice' LIMIT 100000").all();
|
||||
|
||||
/* create worksheet from the row objects */
|
||||
var ws = XLSX.utils.json_to_sheet(aoo, {dense: true});
|
||||
```
|
||||
|
||||
0) Build `chinook.db` from [the SQL statements](pathname:///sqlite/chinook.sql):
|
||||
|
||||
```bash
|
||||
curl -LO https://docs.sheetjs.com/sqlite/chinook.sql
|
||||
sqlite3 chinook.db ".read chinook.sql"
|
||||
```
|
||||
|
||||
1) Install the dependencies:
|
||||
|
||||
@ -144,50 +164,38 @@ of JS objects.
|
||||
npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz better-sqlite3@8.1.0`}
|
||||
</CodeBlock>
|
||||
|
||||
2) Save the following to `node.mjs`:
|
||||
2) Download [`SheetJSQLiteNode.mjs`](pathname:///sqlite/SheetJSQLiteNode.mjs):
|
||||
|
||||
```js title="node.mjs"
|
||||
/* Load SQLite3 connector library */
|
||||
import Database from "better-sqlite3";
|
||||
|
||||
/* Load SheetJS library */
|
||||
import * as XLSX from 'xlsx';
|
||||
import * as fs from 'fs';
|
||||
XLSX.set_fs(fs);
|
||||
|
||||
/* Initialize database */
|
||||
var db = Database("northwind.db");
|
||||
|
||||
/* Create new workbook */
|
||||
var wb = XLSX.utils.book_new();
|
||||
|
||||
/* Get list of table names */
|
||||
var sql = db.prepare("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 aoo = db.prepare("SELECT * FROM '" + row.name + "' LIMIT 100000").all();
|
||||
if(aoo.length > 0) {
|
||||
/* Create Worksheet from the row objects */
|
||||
var ws = XLSX.utils.json_to_sheet(aoo, {dense: true});
|
||||
/* Add to Workbook */
|
||||
XLSX.utils.book_append_sheet(wb, ws, row.name);
|
||||
}
|
||||
});
|
||||
|
||||
/* Write File */
|
||||
XLSX.writeFile(wb, "node.xlsx");
|
||||
```bash
|
||||
curl -LO https://docs.sheetjs.com/sqlite/SheetJSQLiteNode.mjs
|
||||
```
|
||||
|
||||
3) Run `node node.mjs` and open `node.xlsx`
|
||||
3) Run `node SheetJSQLiteNode.mjs` and open `SheetJSQLiteNode.xlsx`
|
||||
|
||||
### Bun
|
||||
|
||||
Bun ships with a built-in high-performance module `bun:sqlite`.
|
||||
Bun ships with a built-in high-performance module `bun:sqlite`:
|
||||
|
||||
0) [Download `northwind.db`](https://raw.githubusercontent.com/jpwhite3/northwind-SQLite3/master/dist/northwind.db).
|
||||
```js
|
||||
import { Database } from "bun:sqlite";
|
||||
import * as XLSX from "xlsx";
|
||||
|
||||
/* open database */
|
||||
var db = Database.open("chinook.db");
|
||||
|
||||
/* get data from the `Invoice` table */
|
||||
var aoo = db.prepare("SELECT * FROM 'Invoice' LIMIT 100000").all();
|
||||
|
||||
/* create worksheet from the row objects */
|
||||
var ws = XLSX.utils.json_to_sheet(aoo, {dense: true});
|
||||
```
|
||||
|
||||
0) Build `chinook.db` from [the SQL statements](pathname:///sqlite/chinook.sql):
|
||||
|
||||
```bash
|
||||
curl -LO https://docs.sheetjs.com/sqlite/chinook.sql
|
||||
sqlite3 chinook.db ".read chinook.sql"
|
||||
```
|
||||
|
||||
1) Install the dependencies:
|
||||
|
||||
@ -195,87 +203,45 @@ Bun ships with a built-in high-performance module `bun:sqlite`.
|
||||
npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`}
|
||||
</CodeBlock>
|
||||
|
||||
2) Save the following to `bun.mjs`:
|
||||
2) Download [`SheetJSQLiteBun.mjs`](pathname:///sqlite/SheetJSQLiteBun.mjs):
|
||||
|
||||
```js title="bun.mjs"
|
||||
/* Load SQLite3 connector library */
|
||||
import { Database } from "bun:sqlite";
|
||||
|
||||
/* Load SheetJS library */
|
||||
import * as XLSX from 'xlsx';
|
||||
import * as fs from 'fs';
|
||||
XLSX.set_fs(fs);
|
||||
|
||||
/* Initialize database */
|
||||
var db = Database.open("northwind.db");
|
||||
|
||||
/* Create new workbook */
|
||||
var wb = XLSX.utils.book_new();
|
||||
|
||||
/* Get list of table names */
|
||||
var sql = db.prepare("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 aoo = db.prepare("SELECT * FROM '" + row.name + "' LIMIT 100000").all();
|
||||
if(aoo.length > 0) {
|
||||
/* Create Worksheet from the row objects */
|
||||
var ws = XLSX.utils.json_to_sheet(aoo, {dense: true});
|
||||
/* Add to Workbook */
|
||||
XLSX.utils.book_append_sheet(wb, ws, row.name);
|
||||
}
|
||||
});
|
||||
|
||||
/* Write File */
|
||||
XLSX.writeFile(wb, "bun.xlsx");
|
||||
```bash
|
||||
curl -LO https://docs.sheetjs.com/sqlite/SheetJSQLiteBun.mjs
|
||||
```
|
||||
|
||||
3) Run `bun bun.mjs` and open `bun.xlsx`
|
||||
3) Run `bun run SheetJSQLiteBun.mjs` and open `SheetJSQLiteBun.xlsx`
|
||||
|
||||
### Deno
|
||||
|
||||
Deno `sqlite` library returns raw arrays of arrays.
|
||||
Deno `sqlite` library returns raw arrays of arrays:
|
||||
|
||||
0) [Download `northwind.db`](https://raw.githubusercontent.com/jpwhite3/northwind-SQLite3/master/dist/northwind.db).
|
||||
|
||||
1) Save the following to `deno.ts`:
|
||||
|
||||
<CodeBlock language="ts" title="deno.ts">{`\
|
||||
/* Load SQLite3 connector library */
|
||||
<CodeBlock language="ts">{`\
|
||||
import { DB } from "https://deno.land/x/sqlite/mod.ts";
|
||||
\n\
|
||||
/* Load SheetJS library */
|
||||
// @deno-types="https://cdn.sheetjs.com/xlsx-${current}/package/types/index.d.ts"
|
||||
import * as XLSX from 'https://cdn.sheetjs.com/xlsx-${current}/package/xlsx.mjs';
|
||||
import * as XLSX from "https://cdn.sheetjs.com/xlsx-${current}/package/xlsx.mjs";
|
||||
\n\
|
||||
/* Initialize database */
|
||||
var db = new DB("northwind.db");
|
||||
/* open database */
|
||||
var db = new DB("chinook.db");
|
||||
\n\
|
||||
/* Create new workbook */
|
||||
var wb = XLSX.utils.book_new();
|
||||
/* get data from the \`Invoice\` table */
|
||||
var aoa = db.prepareQuery("SELECT * FROM 'Invoice' LIMIT 100000").all();
|
||||
\n\
|
||||
/* 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]);
|
||||
}
|
||||
});
|
||||
\n\
|
||||
/* Write File */
|
||||
XLSX.writeFile(wb, "deno.xlsx");`}
|
||||
/* create worksheet from the row objects */
|
||||
var data = [query.columns().map(x => x.name)].concat(aoa);
|
||||
var ws = XLSX.utils.aoa_to_sheet(data, {dense: true});`}
|
||||
</CodeBlock>
|
||||
|
||||
2) Run `deno run --allow-read --allow-write deno.ts` and open `deno.xlsx`
|
||||
0) Build `chinook.db` from [the SQL statements](pathname:///sqlite/chinook.sql):
|
||||
|
||||
```bash
|
||||
curl -LO https://docs.sheetjs.com/sqlite/chinook.sql
|
||||
sqlite3 chinook.db ".read chinook.sql"
|
||||
```
|
||||
|
||||
1) Download [`SheetJSQLiteDeno.ts`](pathname:///sqlite/SheetJSQLiteDeno.ts):
|
||||
|
||||
```bash
|
||||
curl -LO https://docs.sheetjs.com/sqlite/SheetJSQLiteDeno.ts
|
||||
```
|
||||
|
||||
2) Run `deno run --allow-read --allow-write SheetJSQLiteDeno.ts` and open `SheetJSQLiteDeno.xlsx`
|
||||
|
@ -120,18 +120,18 @@ This string can be loaded into the JS engine and processed:
|
||||
|
||||
:::note
|
||||
|
||||
This demo was tested on 2023 February 14 using Rhino 1.7.14.
|
||||
This demo was tested on 2023 May 28 using Rhino 1.7.14.
|
||||
|
||||
:::
|
||||
|
||||
0) Ensure Java is installed. Create a folder for the project, download the
|
||||
[JAR](https://github.com/mozilla/rhino/releases/download/Rhino1_7_14_Release/rhino-1.7.14.jar)
|
||||
[JAR](https://repo1.maven.org/maven2/org/mozilla/rhino/1.7.14/rhino-1.7.14.jar)
|
||||
and rename to `rhino.jar`:
|
||||
|
||||
```bash
|
||||
mkdir sheetjs-java
|
||||
cd sheetjs-java
|
||||
curl -L -o rhino.jar https://github.com/mozilla/rhino/releases/download/Rhino1_7_14_Release/rhino-1.7.14.jar
|
||||
curl -L -o rhino.jar https://repo1.maven.org/maven2/org/mozilla/rhino/1.7.14/rhino-1.7.14.jar
|
||||
```
|
||||
|
||||
1) Download the standalone script and the test file:
|
||||
|
@ -497,6 +497,7 @@ CHISQ.INV
|
||||
CHISQ.INV.RT
|
||||
CHISQ.TEST
|
||||
COMBINA
|
||||
CONCAT
|
||||
CONFIDENCE.NORM
|
||||
CONFIDENCE.T
|
||||
COT
|
||||
@ -507,6 +508,7 @@ CSC
|
||||
CSCH
|
||||
DAYS
|
||||
DECIMAL
|
||||
ECMA.CEILING
|
||||
ERF.PRECISE
|
||||
ERFC.PRECISE
|
||||
EXPON.DIST
|
||||
@ -519,6 +521,11 @@ FIELDVALUE
|
||||
FILTERXML
|
||||
FLOOR.MATH
|
||||
FLOOR.PRECISE
|
||||
FORECAST.ETS
|
||||
FORECAST.ETS.CONFINT
|
||||
FORECAST.ETS.SEASONALITY
|
||||
FORECAST.ETS.STAT
|
||||
FORECAST.LINEAR
|
||||
FORMULATEXT
|
||||
GAMMA
|
||||
GAMMA.DIST
|
||||
@ -527,6 +534,7 @@ GAMMALN.PRECISE
|
||||
GAUSS
|
||||
HYPGEOM.DIST
|
||||
IFNA
|
||||
IFS
|
||||
IMCOSH
|
||||
IMCOT
|
||||
IMCSC
|
||||
@ -536,6 +544,7 @@ IMSECH
|
||||
IMSINH
|
||||
IMTAN
|
||||
ISFORMULA
|
||||
ISO.CEILING
|
||||
ISOMITTED
|
||||
ISOWEEKNUM
|
||||
LAMBDA
|
||||
@ -544,10 +553,13 @@ LOGNORM.DIST
|
||||
LOGNORM.INV
|
||||
MAKEARRAY
|
||||
MAP
|
||||
MAXIFS
|
||||
MINIFS
|
||||
MODE.MULT
|
||||
MODE.SNGL
|
||||
MUNIT
|
||||
NEGBINOM.DIST
|
||||
NETWORKDAYS.INTL
|
||||
NORM.DIST
|
||||
NORM.INV
|
||||
NORM.S.DIST
|
||||
@ -579,12 +591,14 @@ SKEW.P
|
||||
SORTBY
|
||||
STDEV.P
|
||||
STDEV.S
|
||||
SWITCH
|
||||
T.DIST
|
||||
T.DIST.2T
|
||||
T.DIST.RT
|
||||
T.INV
|
||||
T.INV.2T
|
||||
T.TEST
|
||||
TEXTJOIN
|
||||
UNICHAR
|
||||
UNICODE
|
||||
UNIQUE
|
||||
@ -592,6 +606,7 @@ VAR.P
|
||||
VAR.S
|
||||
WEBSERVICE
|
||||
WEIBULL.DIST
|
||||
WORKDAY.INTL
|
||||
XLOOKUP
|
||||
XOR
|
||||
Z.TEST
|
||||
|
Binary file not shown.
32
docz/static/sqlite/SheetJSQLiteBun.mjs
Normal file
32
docz/static/sqlite/SheetJSQLiteBun.mjs
Normal file
@ -0,0 +1,32 @@
|
||||
/* Load SQLite3 connector library */
|
||||
import { Database } from "bun:sqlite";
|
||||
|
||||
/* Load SheetJS library */
|
||||
import * as XLSX from "xlsx";
|
||||
import * as fs from "fs";
|
||||
XLSX.set_fs(fs);
|
||||
|
||||
/* Initialize database */
|
||||
var db = Database.open("chinook.db");
|
||||
|
||||
/* Create new workbook */
|
||||
var wb = XLSX.utils.book_new();
|
||||
|
||||
/* Get list of table names */
|
||||
var sql = db.prepare("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 aoo = db.prepare("SELECT * FROM '" + row.name + "' LIMIT 100000").all();
|
||||
if(aoo.length > 0) {
|
||||
/* Create Worksheet from the row objects */
|
||||
var ws = XLSX.utils.json_to_sheet(aoo, {dense: true});
|
||||
/* Add to Workbook */
|
||||
XLSX.utils.book_append_sheet(wb, ws, row.name);
|
||||
}
|
||||
});
|
||||
|
||||
/* Write File */
|
||||
XLSX.writeFile(wb, "SheetJSQLiteBun.xlsx");
|
33
docz/static/sqlite/SheetJSQLiteDeno.ts
Normal file
33
docz/static/sqlite/SheetJSQLiteDeno.ts
Normal file
@ -0,0 +1,33 @@
|
||||
/* 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("chinook.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, "SheetJSQLiteDeno.xlsx");
|
32
docz/static/sqlite/SheetJSQLiteNode.mjs
Normal file
32
docz/static/sqlite/SheetJSQLiteNode.mjs
Normal file
@ -0,0 +1,32 @@
|
||||
/* Load SQLite3 connector library */
|
||||
import Database from "better-sqlite3";
|
||||
|
||||
/* Load SheetJS library */
|
||||
import * as XLSX from "xlsx";
|
||||
import * as fs from "fs";
|
||||
XLSX.set_fs(fs);
|
||||
|
||||
/* Initialize database */
|
||||
var db = Database("chinook.db");
|
||||
|
||||
/* Create new workbook */
|
||||
var wb = XLSX.utils.book_new();
|
||||
|
||||
/* Get list of table names */
|
||||
var sql = db.prepare("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 aoo = db.prepare("SELECT * FROM '" + row.name + "' LIMIT 100000").all();
|
||||
if(aoo.length > 0) {
|
||||
/* Create Worksheet from the row objects */
|
||||
var ws = XLSX.utils.json_to_sheet(aoo, {dense: true});
|
||||
/* Add to Workbook */
|
||||
XLSX.utils.book_append_sheet(wb, ws, row.name);
|
||||
}
|
||||
});
|
||||
|
||||
/* Write File */
|
||||
XLSX.writeFile(wb, "SheetJSQLiteNode.xlsx");
|
15873
docz/static/sqlite/chinook.sql
Normal file
15873
docz/static/sqlite/chinook.sql
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user