## 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); ```