## 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: <details> <summary><b>nodejs read a file</b> (click to show)</summary> ```js if(typeof require !== 'undefined') XLSX = require('xlsx'); var workbook = XLSX.readFile('test.xlsx'); /* DO SOMETHING WITH workbook HERE */ ``` </details> <details> <summary><b>Browser read TABLE element from page</b> (click to show)</summary> ```js var worksheet = XLSX.utils.table_to_book(document.getElementById('tableau')); /* DO SOMETHING WITH workbook HERE */ ``` </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>): ```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(); ``` </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. ```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); ``` </details> <details> <summary><b>Browser file upload form element</b> (click to show)</summary> ```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); ``` </details> ### Parsing Examples - <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. <details> <summary><b>Get base64 encoding on OSX / Windows</b> (click to show)</summary> 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) </details> - <http://oss.sheetjs.com/js-xlsx/ajax.html> XMLHttpRequest