estk test [ci skip]

This commit is contained in:
SheetJS 2022-05-20 04:56:18 -04:00
parent f1480ebd2e
commit b7d3eae3b7
14 changed files with 57 additions and 276 deletions

@ -31,7 +31,6 @@ can be installed with Bash on Windows or with `cygwin`.
**Bundlers and Tooling**
- [`browserify`](browserify/)
- [`fusebox`](fusebox/)
- [`parcel`](parcel/)
- [`requirejs`](requirejs/)
- [`rollup`](rollup/)
@ -44,7 +43,7 @@ can be installed with Bash on Windows or with `cygwin`.
- [`electron application`](electron/)
- [`nw.js application`](nwjs/)
- [`Chrome / Chromium extensions`](chrome/)
- [`Download a Google Sheet locally`](google-sheet/)
- [`Google Sheets API`](https://docs.sheetjs.com/docs/getting-started/demos/gsheet)
- [`Adobe ExtendScript`](extendscript/)
- [`Headless Browsers`](headless/)
- [`canvas-datagrid`](datagrid/)

@ -10,7 +10,7 @@ This demo is available at <https://oss.sheetjs.com/sheetjs/datagrid.html>
## Obtaining the Library
The `canvas-datagrid` NodeJS packages include a minified script that can be
directly inserted as a script tag. The unpkg CDN also hosts this script:
directly inserted as a script tag. The unpkg CDN also serves this script:
```html
<script src="https://unpkg.com/canvas-datagrid/dist/canvas-datagrid.js"></script>

@ -4,7 +4,7 @@ ExtendScript adds some features to a limited form of ECMAScript version 3. With
the included shim, the library can run within Photoshop and other Adobe apps!
The main file is `test.jsx`. Target-specific files prepend target directives.
Copy the `test.jsx` file as well as the `xlsx.extendscript.js` library script
Copy the `test.jsx` file as well as the `xlsx.extendscript.js` library script
to wherever you want the scripts to reside.
@ -30,6 +30,8 @@ var workbook = XLSX.readFile(filename);
XLSX.writeFile(workbook, filename);
```
<details><summary><b>Implementation Details</b> (click to show)</summary>
The `readFile` and `writeFile` functions use `"binary"` encoding under the hood:
@ -50,6 +52,7 @@ outFile.write(workbook);
outFile.close();
```
</details>
## Demo

@ -1,4 +0,0 @@
.fusebox
tsconfig.json
client.js
server.js

@ -1,17 +0,0 @@
.PHONY: all
all server.js client.js: fuse.js
node fuse.js
.PHONY: test ctest
test: server.js
@node server.js
xlsx --dev sheetjsfbox.xlsb
ctest: client.js
python -mSimpleHTTPServer
.PHONY: init
init:
mkdir -p node_modules
cd node_modules; ln -s ../../../ xlsx; cd -

@ -1,62 +0,0 @@
# FuseBox
This library is built with some dynamic logic to determine if it is invoked in a
script tag or in nodejs. FuseBox does not understand those feature tests, so by
default it will do some strange things.
## TypeScript Support
As with most TS modules in FuseBox, the glob import form should be used:
```typescript
import * as XLSX from 'xlsx';
```
The included `sheetjs.ts` script will be transpiled and bundled to `server.js`
for the `"node"` target and `client.js` for the `"browser"` target.
## Proper Target Detection
Out of the box, FuseBox will automatically provide shims to browser globals like
`process` and `Browser`. The proper way to detect `node` uses `process`:
```typescript
if(typeof process != 'undefined' && process.versions && process.versions.node) {
/* Script is running in nodejs */
} else {
/* Script is running in a browser environment */
}
```
## Server Target
The FuseBox documentation configuration can be used as-is:
```js
const fuse = FuseBox.init({
homeDir: ".",
target: "node",
output: "$name.js"
});
fuse.bundle("server").instructions(">sheetjs.ts"); fuse.run();
```
## Browser Target
The native shims must be suppressed for browser usage:
```js
const fuse = FuseBox.init({
homeDir: ".",
target: "browser",
natives: {
Buffer: false,
stream: false,
process: false
},
output: "$name.js"
});
fuse.bundle("client").instructions(">sheetjs.ts"); fuse.run();
```
[![Analytics](https://ga-beacon.appspot.com/UA-36810333-1/SheetJS/js-xlsx?pixel)](https://github.com/SheetJS/js-xlsx)

@ -1,26 +0,0 @@
const { FuseBox } = require("fuse-box");
const common_opts = {
homeDir: ".",
output: "$name.js"
};
const browser_opts = {
target: "browser",
natives: {
Buffer: false,
stream: false,
process: false
},
...common_opts
};
const node_opts = {
target: "node",
...common_opts
}
const fuse1 = FuseBox.init(browser_opts);
fuse1.bundle("client").instructions(">sheetjs.ts"); fuse1.run();
const fuse2 = FuseBox.init(node_opts);
fuse2.bundle("server").instructions(">sheetjs.ts"); fuse2.run();

@ -1,36 +0,0 @@
<!DOCTYPE html>
<!-- xlsx.js (C) 2013-present SheetJS http://sheetjs.com -->
<!-- vim: set ts=2: -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>SheetJS FuseBox Test</title>
<style>
a { text-decoration: none }
</style>
</head>
<body>
<pre>
<b><a href="http://sheetjs.com">SheetJS FuseBox Demo</a></b>
<a href="https://github.com/SheetJS/js-xlsx">Source Code Repo</a>
<a href="https://github.com/SheetJS/js-xlsx/issues">Issues? Something look weird? Click here and report an issue</a>
Original script: <a href="sheetjs.ts">sheetjs.ts</a>
<b>Console Output:</b>
</pre>
<pre id="console"></pre>
<b>
<script>
if(typeof console !== "undefined") console = {};
console.__log = console.log || function(){};
console.log = function(x) {
console.__log.apply(console, arguments);
document.getElementById('console').innerText += x + "\n";
};
console.error = console.debug = console.info = console.log
</script>
<script type="text/javascript" src="/client.js"></script>
</body>
</html>

@ -1,28 +0,0 @@
import * as XLSX from 'xlsx';
console.log(XLSX.version);
const bookType: string = "xlsb";
const fn: string = "sheetjsfbox." + bookType
const sn: string = "SheetJSFBox";
const aoa: any[][] = [ ["Sheet", "JS"], ["Fuse", "Box"], [72, 62] ];
var wb: XLSX.WorkBook = XLSX.utils.book_new();
var ws: XLSX.WorkSheet = XLSX.utils.aoa_to_sheet(aoa);
XLSX.utils.book_append_sheet(wb, ws, sn);
var payload: string = "";
var w2: XLSX.WorkBook;
if(typeof process != 'undefined' && process.versions && process.versions.node) {
/* server */
XLSX.writeFile(wb, fn);
w2 = XLSX.readFile(fn)
} else {
/* client */
payload = XLSX.write(wb, {bookType: "xlsb", type:"binary"});
w2 = XLSX.read(payload, {type:"binary"});
}
var s2: XLSX.WorkSheet = w2.Sheets[sn];
console.log(XLSX.utils.sheet_to_csv(s2));

@ -1,72 +1,9 @@
# Google Sheet Demo
# Google Sheets API
This demo is using [`drive-db`](https://github.com/franciscop/drive-db) to fetch a public Google Sheet and then `xlsx` to save the data locally as `test.xlsx`.
The old demo used a deprecated version of the Google Sheets API to export data
from Google Sheets Documents.
It uses modern Javascript; `import/export`, `async/away`, etc. To run this you need Node.js 12 or newer, and you will notice we added `"type": "module"` to the `package.json`.
Here is the full code:
```js
import xlsx from "xlsx";
import drive from "drive-db";
(async () => {
const data = await drive("1fvz34wY6phWDJsuIneqvOoZRPfo6CfJyPg1BYgHt59k");
/* Create a new workbook */
const workbook = xlsx.utils.book_new();
/* make worksheet */
const worksheet = xlsx.utils.json_to_sheet(data);
/* Add the worksheet to the workbook */
xlsx.utils.book_append_sheet(workbook, worksheet);
xlsx.writeFile(workbook, "test.xlsx");
})();
```
Let's go over the different parts:
```js
import xlsx from "xlsx";
import drive from "drive-db";
```
This imports both `xlsx` and `drive-db` libraries. While these are written in commonjs, Javascript Modules can usually import the commonjs modules with no problem.
```js
(async () => {
// ...
})();
```
<!-- alex ignore retext-profanities -->
This is what is called an [Immediately Invoked Function Expression](https://flaviocopes.com/javascript-iife/). These are normally used to either create a new execution context, or in this case to allow to run async code easier.
```js
const data = await drive("1fvz34wY6phWDJsuIneqvOoZRPfo6CfJyPg1BYgHt59k");
```
Using `drive-db`, fetch the data for the given spreadsheet id. In this case it's [this Google Sheet document](https://docs.google.com/spreadsheets/d/1fvz34wY6phWDJsuIneqvOoZRPfo6CfJyPg1BYgHt59k/edit), and since we don't specify the sheet it's the default one.
```js
const workbook = xlsx.utils.book_new();
const worksheet = xlsx.utils.json_to_sheet(data);
```
We need to create a workbook with a worksheet inside. The worksheet is created from the previously fetched data. `drive-db` exports the data in the same format that `xlsx`'s `.json_to_sheet()` method expects, so it's a straightforward operation.
```js
xlsx.utils.book_append_sheet(workbook, worksheet);
```
The worksheet needs to be inside the workbook, so we use the operation `.book_append_sheet()` to make it so.
```js
xlsx.writeFile(workbook, "test.xlsx");
```
Finally we save the workbook into a XLSX file in out filesystem. With this, now it can be opened by any spreadsheet program that we have installed.
[The new demo](https://docs.sheetjs.com/docs/getting-started/demos/gsheet) uses
the new Google Sheets API to read and write data.
[![Analytics](https://ga-beacon.appspot.com/UA-36810333-1/SheetJS/js-xlsx?pixel)](https://github.com/SheetJS/js-xlsx)

@ -1,17 +0,0 @@
import xlsx from "xlsx";
import drive from "drive-db";
(async () => {
const data = await drive("1fvz34wY6phWDJsuIneqvOoZRPfo6CfJyPg1BYgHt59k");
/* Create a new workbook */
const workbook = xlsx.utils.book_new();
/* make worksheet */
const worksheet = xlsx.utils.json_to_sheet(data);
/* Add the worksheet to the workbook */
xlsx.utils.book_append_sheet(workbook, worksheet);
xlsx.writeFile(workbook, "test.xlsx");
})();

@ -1,13 +0,0 @@
{
"name": "google-sheet",
"version": "1.0.0",
"description": " This demo is using 'drive-db' to fetch a public Google Sheet and then `xlsx` to save the data locally as test.xlsx",
"main": "index.js",
"type": "module",
"scripts": {
"start": "node ."
},
"keywords": [],
"author": "Francisco Presencia <public@francisco.io> (https://francisco.io/)",
"license": "MIT"
}

@ -10,7 +10,7 @@ This demo is available at <https://oss.sheetjs.com/sheetjs/x-spreadsheet.html>
## Obtaining the Library
The `x-data-spreadsheet` NodeJS packages include a minified script that can be
directly inserted as a script tag. The unpkg CDN also hosts this script:
directly inserted as a script tag. The unpkg CDN also serves this script:
```html
<script src="https://unpkg.com/x-data-spreadsheet/dist/xspreadsheet.js"></script>

45
estk.jsx Normal file

@ -0,0 +1,45 @@
#target estoolkit
var thisFile = new File($.fileName);
var basePath = thisFile.path;
#include "dist/xlsx.extendscript.js";
var filename = "/sheetjs.xlsx";
/* Read file from disk */
var workbook = XLSX.readFile(basePath + filename, {cellDates:true});
/* Display first worksheet */
var first_sheet_name = workbook.SheetNames[0], first_worksheet = workbook.Sheets[first_sheet_name];
var data = XLSX.utils.sheet_to_json(first_worksheet, {header:1});
alert(data);
var outfmts = [
["xlsb", "testw.xlsb"],
["biff8", "testw.xls"],
["xlml", "testw.xml"],
["fods", "testw.fods"],
["csv", "testw.csv"],
["txt", "testw.txt"],
["slk", "testw.slk"],
["eth", "testw.eth"],
["htm", "testw.htm"],
["dif", "testw.dif"],
["ods", "testw.ods"],
["xlsx", "testw.xlsx"]
];
for(var i = 0; i < outfmts.length; ++i) {
alert(outfmts[i][0]);
var fname = basePath + "/" + outfmts[i][1];
/* Write file to disk */
XLSX.writeFile(workbook, fname);
/* Read new file */
var wb = XLSX.readFile(fname, {cellDates:true});
/* Display first worksheet */
var f_sheet_name = wb.SheetNames[0], f_worksheet = wb.Sheets[f_sheet_name];
var data = XLSX.utils.sheet_to_json(f_worksheet, {header:1, cellDates:true});
alert(data);
}