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