forked from sheetjs/sheetjs
		
	
		
			
	
	
		
			120 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			120 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|  | ## Parsing Workbooks
 | ||
|  | 
 | ||
|  | For parsing, the first step is to read the file.  This involves acquiring the | ||
|  | data and feeding it into the library.  Here are a few common scenarios: | ||
|  | 
 | ||
|  | - node readFile: | ||
|  | 
 | ||
|  | ```js | ||
|  | if(typeof require !== 'undefined') XLSX = require('xlsx'); | ||
|  | var workbook = XLSX.readFile('test.xlsx'); | ||
|  | /* DO SOMETHING WITH workbook HERE */ | ||
|  | ``` | ||
|  | 
 | ||
|  | - ajax (for a more complete example that works in older browsers, check the demo | ||
|  |   at <http://oss.sheetjs.com/js-xlsx/ajax.html>): | ||
|  | 
 | ||
|  | ```js | ||
|  | /* set up XMLHttpRequest */ | ||
|  | var url = "test_files/formula_stress_test_ajax.xlsx"; | ||
|  | var oReq = new XMLHttpRequest(); | ||
|  | oReq.open("GET", url, true); | ||
|  | oReq.responseType = "arraybuffer"; | ||
|  | 
 | ||
|  | oReq.onload = function(e) { | ||
|  |   var arraybuffer = oReq.response; | ||
|  | 
 | ||
|  |   /* convert data to binary string */ | ||
|  |   var data = new Uint8Array(arraybuffer); | ||
|  |   var arr = new Array(); | ||
|  |   for(var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]); | ||
|  |   var bstr = arr.join(""); | ||
|  | 
 | ||
|  |   /* Call XLSX */ | ||
|  |   var workbook = XLSX.read(bstr, {type:"binary"}); | ||
|  | 
 | ||
|  |   /* DO SOMETHING WITH workbook HERE */ | ||
|  | } | ||
|  | 
 | ||
|  | oReq.send(); | ||
|  | ``` | ||
|  | 
 | ||
|  | - HTML5 drag-and-drop using readAsBinaryString or readAsArrayBuffer: | ||
|  |   note: readAsBinaryString and readAsArrayBuffer may not be available in every | ||
|  |   browser.  Use dynamic feature tests to determine which method to use. | ||
|  | 
 | ||
|  | ```js | ||
|  | /* processing array buffers, only required for readAsArrayBuffer */ | ||
|  | function fixdata(data) { | ||
|  |   var o = "", l = 0, w = 10240; | ||
|  |   for(; l<data.byteLength/w; ++l) o+=String.fromCharCode.apply(null,new Uint8Array(data.slice(l*w,l*w+w))); | ||
|  |   o+=String.fromCharCode.apply(null, new Uint8Array(data.slice(l*w))); | ||
|  |   return o; | ||
|  | } | ||
|  | 
 | ||
|  | var rABS = true; // true: readAsBinaryString ; false: readAsArrayBuffer | ||
|  | /* set up drag-and-drop event */ | ||
|  | function handleDrop(e) { | ||
|  |   e.stopPropagation(); | ||
|  |   e.preventDefault(); | ||
|  |   var files = e.dataTransfer.files; | ||
|  |   var i,f; | ||
|  |   for (i = 0; i != files.length; ++i) { | ||
|  |     f = files[i]; | ||
|  |     var reader = new FileReader(); | ||
|  |     var name = f.name; | ||
|  |     reader.onload = function(e) { | ||
|  |       var data = e.target.result; | ||
|  | 
 | ||
|  |       var workbook; | ||
|  |       if(rABS) { | ||
|  |         /* if binary string, read with type 'binary' */ | ||
|  |         workbook = XLSX.read(data, {type: 'binary'}); | ||
|  |       } else { | ||
|  |         /* if array buffer, convert to base64 */ | ||
|  |         var arr = fixdata(data); | ||
|  |         workbook = XLSX.read(btoa(arr), {type: 'base64'}); | ||
|  |       } | ||
|  | 
 | ||
|  |       /* DO SOMETHING WITH workbook HERE */ | ||
|  |     }; | ||
|  |     if(rABS) reader.readAsBinaryString(f); | ||
|  |     else reader.readAsArrayBuffer(f); | ||
|  |   } | ||
|  | } | ||
|  | drop_dom_element.addEventListener('drop', handleDrop, false); | ||
|  | ``` | ||
|  | 
 | ||
|  | - HTML5 input file element using readAsBinaryString or readAsArrayBuffer: | ||
|  | 
 | ||
|  | ```js | ||
|  | /* fixdata and rABS are defined in the drag and drop example */ | ||
|  | function handleFile(e) { | ||
|  |   var files = e.target.files; | ||
|  |   var i,f; | ||
|  |   for (i = 0; i != files.length; ++i) { | ||
|  |     f = files[i]; | ||
|  |     var reader = new FileReader(); | ||
|  |     var name = f.name; | ||
|  |     reader.onload = function(e) { | ||
|  |       var data = e.target.result; | ||
|  | 
 | ||
|  |       var workbook; | ||
|  |       if(rABS) { | ||
|  |         /* if binary string, read with type 'binary' */ | ||
|  |         workbook = XLSX.read(data, {type: 'binary'}); | ||
|  |       } else { | ||
|  |         /* if array buffer, convert to base64 */ | ||
|  |         var arr = fixdata(data); | ||
|  |         workbook = XLSX.read(btoa(arr), {type: 'base64'}); | ||
|  |       } | ||
|  | 
 | ||
|  |       /* DO SOMETHING WITH workbook HERE */ | ||
|  |     }; | ||
|  |     reader.readAsBinaryString(f); | ||
|  |   } | ||
|  | } | ||
|  | input_dom_element.addEventListener('change', handleFile, false); | ||
|  | ``` | ||
|  | 
 |