sqlite
This commit is contained in:
parent
0ff2781144
commit
41e0838cb6
118
docz/docs/04-getting-started/03-demos/10-database.md
Normal file
118
docz/docs/04-getting-started/03-demos/10-database.md
Normal file
@ -0,0 +1,118 @@
|
||||
---
|
||||
sidebar_position: 9
|
||||
title: Databases
|
||||
---
|
||||
|
||||
import current from '/version.js';
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
|
||||
## SQLite
|
||||
|
||||
Most platforms offer a simple way to query `.sqlite` databases.
|
||||
|
||||
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`
|
||||
|
||||
<Tabs>
|
||||
<TabItem value="nodejs" label="NodeJS">
|
||||
|
||||
1) Install the dependencies:
|
||||
|
||||
```bash
|
||||
$ npm i --save https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz better-sqlite3
|
||||
```
|
||||
|
||||
2) Save the following to `node.mjs`:
|
||||
|
||||
```js title="node.mjs"
|
||||
/* Load SQLite3 connector library */
|
||||
import Database from "better-sqlite3";
|
||||
|
||||
/* Load SheetJS library */
|
||||
import * as XLSX from 'xlsx/xlsx.mjs';
|
||||
import * as fs from 'fs';
|
||||
XLSX.set_fs(fs);
|
||||
|
||||
/* Initialize database */
|
||||
var db = Database("Northwind_large.sqlite");
|
||||
|
||||
/* 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");
|
||||
```
|
||||
|
||||
3) Run `node node.mjs` and open `node.xlsx`
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="bun" label="Bun">
|
||||
|
||||
1) Install the dependencies:
|
||||
|
||||
```bash
|
||||
$ npm i --save https://cdn.sheetjs.com/xlsx-latest/xlsx-latest.tgz
|
||||
```
|
||||
|
||||
2) Save the following to `bun.mjs`:
|
||||
|
||||
```js title="bun.mjs"
|
||||
/* Load SQLite3 connector library */
|
||||
import { Database } from "bun:sqlite";
|
||||
|
||||
/* Load SheetJS library */
|
||||
import * as XLSX from 'xlsx/xlsx.mjs';
|
||||
import * as fs from 'fs';
|
||||
XLSX.set_fs(fs);
|
||||
|
||||
/* Initialize database */
|
||||
var db = Database.open("Northwind_large.sqlite");
|
||||
|
||||
/* 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");
|
||||
```
|
||||
|
||||
3) Run `bun bun.mjs` and open `bun.xlsx`
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
@ -44,6 +44,7 @@ The demo projects include small runnable examples and short explainers.
|
||||
- [`Headless Automation`](./headless)
|
||||
- [`Other JavaScript Engines`](https://github.com/SheetJS/SheetJS/tree/master/demos/altjs/)
|
||||
- [`"serverless" functions`](https://github.com/SheetJS/SheetJS/tree/master/demos/function/)
|
||||
- [`sqlite3`](./database#sqlite)
|
||||
- [`Databases and Key/Value Stores`](https://github.com/SheetJS/SheetJS/tree/master/demos/database/)
|
||||
- [`Legacy Internet Explorer`](https://github.com/SheetJS/SheetJS/tree/master/demos/oldie/)
|
||||
|
||||
|
@ -188,6 +188,20 @@ import * as fs from "fs";
|
||||
import { writeFile, set_fs } from "xlsx/xlsx.mjs";
|
||||
set_fs(fs);
|
||||
|
||||
/* output format determined by filename */
|
||||
writeFile(workbook, "out.xlsb");
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="bun" label="Bun">
|
||||
|
||||
As with Node ESM, `fs` must be loaded manually:
|
||||
|
||||
```js
|
||||
import * as fs from "fs";
|
||||
import { writeFile, set_fs } from "xlsx/xlsx.mjs";
|
||||
set_fs(fs);
|
||||
|
||||
/* output format determined by filename */
|
||||
writeFile(workbook, "out.xlsb");
|
||||
```
|
||||
|
@ -65,6 +65,30 @@ const workbook = XLSX.read(ab, { cellFormula: true });
|
||||
|
||||
**`XLSX.readFile`**
|
||||
|
||||
```js
|
||||
/* using readFile in NodeJS, add `cellFormula` to the second argument */
|
||||
const workbook = XLSX.readFile("test.xlsx", { cellFormula: true });
|
||||
// -------------------------------------------^^^^^^^^^^^^^^^^^
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="bun" label="Bun">
|
||||
|
||||
Typically file data will be available as a `Buffer` from a network request / API
|
||||
or stored in the filesystem. `cellFormula: true` should be added to the second
|
||||
options argument to `read` or `readFile`:
|
||||
|
||||
**`XLSX.read`**
|
||||
|
||||
```js
|
||||
/* using read in NodeJS, `cellFormula` is in the second argument */
|
||||
const ab = await (await fetch("test.xlsx")).arrayBuffer();
|
||||
const workbook = XLSX.read(ab, { cellFormula: true });
|
||||
// ------------------------------^^^^^^^^^^^^^^^^^
|
||||
```
|
||||
|
||||
**`XLSX.readFile`**
|
||||
|
||||
```js
|
||||
/* using readFile in NodeJS, add `cellFormula` to the second argument */
|
||||
const workbook = XLSX.readFile("test.xlsx", { cellFormula: true });
|
||||
|
@ -105,6 +105,30 @@ var wb = XLSX.utils.book_new(); var ws = XLSX.utils.aoa_to_sheet([
|
||||
[true,false,],
|
||||
]); XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
|
||||
XLSX.writeFile(wb, "textport.numbers", {numbers: XLSX_ZAHL_PAYLOAD, compression: true});
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="bun" label="Bun">
|
||||
|
||||
After installing the package:
|
||||
|
||||
<pre><code parentName="pre" {...{"className": "language-bash"}}>{`\
|
||||
$ npm install --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`}
|
||||
</code></pre>
|
||||
|
||||
The scripts will be available at `xlsx/dist/xlsx.zahl` (CommonJS) and
|
||||
`xlsx/dist/xlsx.zahl.mjs` (ESM).
|
||||
|
||||
```js
|
||||
import * as XLSX from "xlsx";
|
||||
import XLSX_ZAHL_PAYLOAD from "xlsx/dist/xlsx.zahl";
|
||||
var wb = XLSX.utils.book_new(); var ws = XLSX.utils.aoa_to_sheet([
|
||||
["SheetJS", "<3","விரிதாள்"],
|
||||
[72,,"Arbeitsblätter"],
|
||||
[,62,"数据"],
|
||||
[true,false,],
|
||||
]); XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
|
||||
XLSX.writeFile(wb, "textport.numbers", {numbers: XLSX_ZAHL_PAYLOAD, compression: true});
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
@ -44,6 +44,12 @@ Start a local server and navigate to that directory to run the tests.
|
||||
`make ctest` will generate the browser fixtures. To add more files, edit the
|
||||
`tests/fixtures.lst` file and add the paths.
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="bun" label="Bun">
|
||||
|
||||
`make test-bun` will run the full Bun test suite and `make test-bun_misc`
|
||||
will run the smaller feature-specific tests.
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="deno" label="Deno">
|
||||
|
||||
|
@ -132,6 +132,12 @@ make dist
|
||||
|
||||
```bash
|
||||
curl -fsSL https://deno.land/install.sh | sh
|
||||
```
|
||||
|
||||
5) (For Bun testing) Install Bun:
|
||||
|
||||
```bash
|
||||
curl https://bun.sh/install | bash
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
Loading…
Reference in New Issue
Block a user