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