| 
									
										
										
										
											2017-03-20 09:02:25 +00:00
										 |  |  | ## 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: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-30 20:37:53 +00:00
										 |  |  | <details> | 
					
						
							|  |  |  | 	<summary><b>nodejs read a file</b> (click to show)</summary> | 
					
						
							| 
									
										
										
										
											2017-03-20 09:02:25 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```js | 
					
						
							|  |  |  | if(typeof require !== 'undefined') XLSX = require('xlsx'); | 
					
						
							|  |  |  | var workbook = XLSX.readFile('test.xlsx'); | 
					
						
							|  |  |  | /* DO SOMETHING WITH workbook HERE */ | 
					
						
							| 
									
										
										
										
											2017-03-29 19:14:15 +00:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-30 20:37:53 +00:00
										 |  |  | </details> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <details> | 
					
						
							|  |  |  | 	<summary><b>Browser read TABLE element from page</b> (click to show)</summary> | 
					
						
							| 
									
										
										
										
											2017-03-29 19:14:15 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```js | 
					
						
							|  |  |  | var worksheet = XLSX.utils.table_to_book(document.getElementById('tableau')); | 
					
						
							|  |  |  | /* DO SOMETHING WITH workbook HERE */ | 
					
						
							| 
									
										
										
										
											2017-03-20 09:02:25 +00:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-30 20:37:53 +00:00
										 |  |  | </details> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <details> | 
					
						
							|  |  |  | 	<summary><b>Browser download file (ajax)</b> (click to show)</summary> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note: for a more complete example that works in older browsers, check the demo | 
					
						
							|  |  |  | at <http://oss.sheetjs.com/js-xlsx/ajax.html>): | 
					
						
							| 
									
										
										
										
											2017-03-20 09:02:25 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```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(); | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-30 20:37:53 +00:00
										 |  |  | </details> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <details> | 
					
						
							|  |  |  | 	<summary><b>Browser drag-and-drop</b> (click to show)</summary> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Drag-and-drop uses FileReader with readAsBinaryString or readAsArrayBuffer. | 
					
						
							|  |  |  | Note: readAsBinaryString and readAsArrayBuffer may not be available in every | 
					
						
							|  |  |  | browser.  Use dynamic feature tests to determine which method to use. | 
					
						
							| 
									
										
										
										
											2017-03-20 09:02:25 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```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); | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-30 20:37:53 +00:00
										 |  |  | </details> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <details> | 
					
						
							|  |  |  | 	<summary><b>Browser file upload form element</b> (click to show)</summary> | 
					
						
							| 
									
										
										
										
											2017-03-20 09:02:25 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ```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); | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-30 20:37:53 +00:00
										 |  |  | </details> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### Complete Examples
 | 
					
						
							| 
									
										
										
										
											2017-04-16 04:32:13 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | - <http://oss.sheetjs.com/js-xlsx/> HTML5 File API / Base64 Text / Web Workers | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note that older versions of IE do not support HTML5 File API, so the base64 mode | 
					
						
							|  |  |  | is used for testing.  On OSX you can get the base64 encoding with: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```bash | 
					
						
							|  |  |  | $ <target_file base64 | pbcopy | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | On Windows XP and up you can get the base64 encoding using `certutil`: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```cmd | 
					
						
							|  |  |  | > certutil -encode target_file target_file.b64
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | (note: You have to open the file and remove the header and footer lines) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | - <http://oss.sheetjs.com/js-xlsx/ajax.html> XMLHttpRequest | 
					
						
							|  |  |  | 
 |