forked from sheetjs/sheetjs
		
	meteor example [ci skip]
This commit is contained in:
		
							parent
							
								
									53e534f2cc
								
							
						
					
					
						commit
						118e9ad9cb
					
				
							
								
								
									
										37
									
								
								README.md
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										37
									
								
								README.md
									
									
									
									
									
								
							@ -169,6 +169,7 @@ The `demos` directory includes sample projects for:
 | 
			
		||||
- [`angular`](demos/angular/)
 | 
			
		||||
- [`browserify`](demos/browserify/)
 | 
			
		||||
- [`Adobe ExtendScript`](demos/extendscript/)
 | 
			
		||||
- [`meteor`](demos/meteor/)
 | 
			
		||||
- [`phantomjs`](demos/phantomjs/)
 | 
			
		||||
- [`requirejs`](demos/requirejs/)
 | 
			
		||||
- [`systemjs`](demos/systemjs/)
 | 
			
		||||
@ -176,6 +177,9 @@ The `demos` directory includes sample projects for:
 | 
			
		||||
 | 
			
		||||
### Optional Modules
 | 
			
		||||
 | 
			
		||||
<details>
 | 
			
		||||
	<summary><b>Optional features</b> (click to show)</summary>
 | 
			
		||||
 | 
			
		||||
The node version automatically requires modules for additional features.  Some
 | 
			
		||||
of these modules are rather large in size and are only needed in special
 | 
			
		||||
circumstances, so they do not ship with the core.  For browser use, they must
 | 
			
		||||
@ -200,6 +204,7 @@ be configured to remove support with `resolve.alias`:
 | 
			
		||||
  }
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
</details>
 | 
			
		||||
 | 
			
		||||
### ECMAScript 5 Compatibility
 | 
			
		||||
 | 
			
		||||
@ -431,6 +436,9 @@ the buffering for you.
 | 
			
		||||
 | 
			
		||||
The full object format is described later in this README.
 | 
			
		||||
 | 
			
		||||
<details>
 | 
			
		||||
	<summary><b>Reading a specific cell </b> (click to show)</summary>
 | 
			
		||||
 | 
			
		||||
This example extracts the value stored in cell A1 from the first worksheet:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
@ -447,6 +455,35 @@ var desired_cell = worksheet[address_of_cell];
 | 
			
		||||
var desired_value = (desired_cell ? desired_cell.v : undefined);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
</details>
 | 
			
		||||
 | 
			
		||||
<details>
 | 
			
		||||
	<summary><b>Adding a new worksheet to a workbook</b> (click to show)</summary>
 | 
			
		||||
 | 
			
		||||
This example uses [`XLSX.utils.aoa_to_sheet`](#array-of-arrays-input) to make a
 | 
			
		||||
worksheet and appends the new worksheet to the workbook:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
var new_ws_name = "SheetJS";
 | 
			
		||||
 | 
			
		||||
/* make worksheet */
 | 
			
		||||
var ws_data = [
 | 
			
		||||
	[ "S", "h", "e", "e", "t", "J", "S" ],
 | 
			
		||||
	[  1 ,  2 ,  3 ,  4 ,  5 ]
 | 
			
		||||
];
 | 
			
		||||
var ws = XLSX.utils.aoa_to_sheet(ws_data);
 | 
			
		||||
 | 
			
		||||
/* Add the sheet name to the list */
 | 
			
		||||
wb.SheetNames.push(ws_name);
 | 
			
		||||
 | 
			
		||||
/* Load the worksheet object */
 | 
			
		||||
wb.Sheets[ws_name] = ws;
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
</details>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Complete Examples
 | 
			
		||||
 | 
			
		||||
- <https://github.com/SheetJS/js-xlsx/blob/master/bin/xlsx.njs> node
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								demos/meteor/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										1
									
								
								demos/meteor/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
.meteor
 | 
			
		||||
							
								
								
									
										9
									
								
								demos/meteor/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										9
									
								
								demos/meteor/Makefile
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,9 @@
 | 
			
		||||
.PHONY: start
 | 
			
		||||
start:
 | 
			
		||||
	@meteor
 | 
			
		||||
 | 
			
		||||
.PHONY: init
 | 
			
		||||
init:
 | 
			
		||||
	@npm install babel-runtime meteor-node-stubs
 | 
			
		||||
	@meteor add pfafman:filesaver
 | 
			
		||||
	@mkdir -p node_modules; cd node_modules; ln -s ../../../ xlsx; cd -
 | 
			
		||||
							
								
								
									
										38
									
								
								demos/meteor/README.md
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										38
									
								
								demos/meteor/README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,38 @@
 | 
			
		||||
# Meteor
 | 
			
		||||
 | 
			
		||||
This library is universal: outside of environment-specific features (parsing DOM
 | 
			
		||||
tables in the browser, streaming write in nodejs), the core is ES3/ES5 and can
 | 
			
		||||
be used in any reasonably compliant JS implementation.  It should play nice with
 | 
			
		||||
meteor out of the box.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## This demonstration
 | 
			
		||||
 | 
			
		||||
You can split the work between the client and server side as you see fit.  The
 | 
			
		||||
obvious extremes of pure-client code and pure-server code are straightforward.
 | 
			
		||||
This demo tries to split the work to demonstrate that the workbook object can be
 | 
			
		||||
passed on the wire.
 | 
			
		||||
 | 
			
		||||
The read demo:
 | 
			
		||||
- accepts files from the client side
 | 
			
		||||
- sends binary string to server
 | 
			
		||||
- processes data on server side
 | 
			
		||||
- sends workbook object to client
 | 
			
		||||
- renders HTML and adds to a DOM element
 | 
			
		||||
 | 
			
		||||
The write demo:
 | 
			
		||||
- generates workbook on server side
 | 
			
		||||
- sends workbook object to client
 | 
			
		||||
- generates file on client side
 | 
			
		||||
- triggers a download.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Environment-specific features
 | 
			
		||||
 | 
			
		||||
File-related operations (e.g. `XLSX.readFile` and `XLSX.writeFile`) will not be
 | 
			
		||||
available in client-side code. If you need to read a local file from the client,
 | 
			
		||||
use a file input or drag-and-drop.
 | 
			
		||||
 | 
			
		||||
Browser-specific operations (e.g. `XLSX.utils.table_to_book`) are limited to
 | 
			
		||||
client side code. You should never have to read from DOM elements on the server
 | 
			
		||||
side, but you can use a third-party virtual DOM to provide the required API.
 | 
			
		||||
							
								
								
									
										2
									
								
								demos/meteor/client/main.css
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								demos/meteor/client/main.css
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
			
		||||
/* CSS declarations go here */
 | 
			
		||||
a { text-decoration: none }
 | 
			
		||||
							
								
								
									
										27
									
								
								demos/meteor/client/main.html
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										27
									
								
								demos/meteor/client/main.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
			
		||||
<head>
 | 
			
		||||
	<title>meteor-xlsx</title>
 | 
			
		||||
</head>
 | 
			
		||||
 | 
			
		||||
<body>
 | 
			
		||||
<pre>
 | 
			
		||||
<b><a href="//sheetjs.com">SheetJS Meteor Demo</a></b>
 | 
			
		||||
 | 
			
		||||
<b>Meteor Read Demo</b>
 | 
			
		||||
 | 
			
		||||
{{> read}}
 | 
			
		||||
 | 
			
		||||
<b>Meteor Write Demo</b>
 | 
			
		||||
 | 
			
		||||
{{> write}}
 | 
			
		||||
 | 
			
		||||
</pre>
 | 
			
		||||
</body>
 | 
			
		||||
 | 
			
		||||
<template name="read">
 | 
			
		||||
	<label for="upload">Parse File: </label><input type="file" id="upload" />
 | 
			
		||||
	<div id="out"></div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<template name="write">
 | 
			
		||||
	<label for="dnload">Write File: </label><button id="dnload">Generate Worksheet</button>
 | 
			
		||||
</template>
 | 
			
		||||
							
								
								
									
										50
									
								
								demos/meteor/client/main.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										50
									
								
								demos/meteor/client/main.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,50 @@
 | 
			
		||||
import { Template } from 'meteor/templating';
 | 
			
		||||
import { ReactiveVar } from 'meteor/reactive-var';
 | 
			
		||||
 | 
			
		||||
import './main.html';
 | 
			
		||||
 | 
			
		||||
const XLSX = require('xlsx');
 | 
			
		||||
 | 
			
		||||
Template.read.events({
 | 
			
		||||
	'change input' (evt, instance) {
 | 
			
		||||
		/* "Browser file upload form element" from SheetJS README */
 | 
			
		||||
		const file = evt.currentTarget.files[0];
 | 
			
		||||
		const reader = new FileReader();
 | 
			
		||||
		reader.onload = function(e) {
 | 
			
		||||
			const data = e.target.result;
 | 
			
		||||
			const name = file.name;
 | 
			
		||||
			/* Meteor magic */
 | 
			
		||||
			Meteor.call('upload', data, name, function(err, wb) {
 | 
			
		||||
				if(err) console.error(err);
 | 
			
		||||
				else {
 | 
			
		||||
					/* do something here -- this just dumps an array of arrays to console */
 | 
			
		||||
					console.log(XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]], {header:1}));
 | 
			
		||||
					document.getElementById('out').innerHTML = (XLSX.utils.sheet_to_html(wb.Sheets[wb.SheetNames[0]]));
 | 
			
		||||
				}
 | 
			
		||||
			});
 | 
			
		||||
		};
 | 
			
		||||
		reader.readAsBinaryString(file);
 | 
			
		||||
	},
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
Template.write.events({
 | 
			
		||||
	'click button' (evt, instance) {
 | 
			
		||||
		Meteor.call('download', function(err, wb) {
 | 
			
		||||
			if(err) console.error(err);
 | 
			
		||||
			else {
 | 
			
		||||
				console.log(wb);
 | 
			
		||||
				/* "Browser download file" from SheetJS README */
 | 
			
		||||
				var wopts = { bookType:'xlsx', bookSST:false, type:'binary' };
 | 
			
		||||
				var wbout = XLSX.write(wb, wopts);
 | 
			
		||||
				saveAs(new Blob([s2ab(wbout)],{type:"application/octet-stream"}), "meteor.xlsx");
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
	},
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
function s2ab(s) {
 | 
			
		||||
	var buf = new ArrayBuffer(s.length);
 | 
			
		||||
	var view = new Uint8Array(buf);
 | 
			
		||||
	for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
 | 
			
		||||
	return buf;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								demos/meteor/package.json
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										11
									
								
								demos/meteor/package.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "meteor-xlsx",
 | 
			
		||||
  "private": true,
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "start": "meteor run"
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "babel-runtime": "^6.20.0",
 | 
			
		||||
    "meteor-node-stubs": "~0.2.4"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										22
									
								
								demos/meteor/server/main.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										22
									
								
								demos/meteor/server/main.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,22 @@
 | 
			
		||||
import { Meteor } from 'meteor/meteor';
 | 
			
		||||
 | 
			
		||||
const XLSX = require('xlsx');
 | 
			
		||||
 | 
			
		||||
Meteor.methods({
 | 
			
		||||
	upload: (bstr, name) => {
 | 
			
		||||
		/* read the data and return the workbook object to the frontend */
 | 
			
		||||
		return XLSX.read(bstr, {type:'binary'});
 | 
			
		||||
	},
 | 
			
		||||
	download: () => {
 | 
			
		||||
		/* generate a workbook object and return to the frontend */
 | 
			
		||||
		const data = [
 | 
			
		||||
			["a", "b", "c"],
 | 
			
		||||
			[ 1 ,  2 ,  3 ]
 | 
			
		||||
		];
 | 
			
		||||
		const ws = XLSX.utils.aoa_to_sheet(data);
 | 
			
		||||
		const wb = {SheetNames: ["Sheet1"], Sheets:{Sheet1:ws }};
 | 
			
		||||
		return wb;
 | 
			
		||||
	}
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
Meteor.startup(() => { });
 | 
			
		||||
@ -28,6 +28,7 @@ The `demos` directory includes sample projects for:
 | 
			
		||||
- [`angular`](demos/angular/)
 | 
			
		||||
- [`browserify`](demos/browserify/)
 | 
			
		||||
- [`Adobe ExtendScript`](demos/extendscript/)
 | 
			
		||||
- [`meteor`](demos/meteor/)
 | 
			
		||||
- [`phantomjs`](demos/phantomjs/)
 | 
			
		||||
- [`requirejs`](demos/requirejs/)
 | 
			
		||||
- [`systemjs`](demos/systemjs/)
 | 
			
		||||
@ -35,6 +36,9 @@ The `demos` directory includes sample projects for:
 | 
			
		||||
 | 
			
		||||
### Optional Modules
 | 
			
		||||
 | 
			
		||||
<details>
 | 
			
		||||
	<summary><b>Optional features</b> (click to show)</summary>
 | 
			
		||||
 | 
			
		||||
The node version automatically requires modules for additional features.  Some
 | 
			
		||||
of these modules are rather large in size and are only needed in special
 | 
			
		||||
circumstances, so they do not ship with the core.  For browser use, they must
 | 
			
		||||
@ -59,6 +63,7 @@ be configured to remove support with `resolve.alias`:
 | 
			
		||||
  }
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
</details>
 | 
			
		||||
 | 
			
		||||
### ECMAScript 5 Compatibility
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -2,6 +2,9 @@
 | 
			
		||||
 | 
			
		||||
The full object format is described later in this README.
 | 
			
		||||
 | 
			
		||||
<details>
 | 
			
		||||
	<summary><b>Reading a specific cell </b> (click to show)</summary>
 | 
			
		||||
 | 
			
		||||
This example extracts the value stored in cell A1 from the first worksheet:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
@ -18,6 +21,35 @@ var desired_cell = worksheet[address_of_cell];
 | 
			
		||||
var desired_value = (desired_cell ? desired_cell.v : undefined);
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
</details>
 | 
			
		||||
 | 
			
		||||
<details>
 | 
			
		||||
	<summary><b>Adding a new worksheet to a workbook</b> (click to show)</summary>
 | 
			
		||||
 | 
			
		||||
This example uses [`XLSX.utils.aoa_to_sheet`](#array-of-arrays-input) to make a
 | 
			
		||||
worksheet and appends the new worksheet to the workbook:
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
var new_ws_name = "SheetJS";
 | 
			
		||||
 | 
			
		||||
/* make worksheet */
 | 
			
		||||
var ws_data = [
 | 
			
		||||
	[ "S", "h", "e", "e", "t", "J", "S" ],
 | 
			
		||||
	[  1 ,  2 ,  3 ,  4 ,  5 ]
 | 
			
		||||
];
 | 
			
		||||
var ws = XLSX.utils.aoa_to_sheet(ws_data);
 | 
			
		||||
 | 
			
		||||
/* Add the sheet name to the list */
 | 
			
		||||
wb.SheetNames.push(ws_name);
 | 
			
		||||
 | 
			
		||||
/* Load the worksheet object */
 | 
			
		||||
wb.Sheets[ws_name] = ws;
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
</details>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Complete Examples
 | 
			
		||||
 | 
			
		||||
- <https://github.com/SheetJS/js-xlsx/blob/master/bin/xlsx.njs> node
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user