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