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;
							 | 
						||
| 
								 | 
							
								}
							 |