forked from sheetjs/sheetjs
		
	
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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;
 | |
| }
 |