forked from sheetjs/sheetjs
SheetJS
ab2ecebac9
- basic support for parsing BIFF2-4 - basic support for writing BIFF2 - cleaned up some bad substr uses for IE6 compatibility - added flow type annotations for xlsx.flow.js - added numerous null guards (fixes #255 h/t @martinheidegger) - README cleanup (fixes #539 h/t @oliversalzburg) - pin jszip to local version (closes #408 h/t @limouri) bower issues: | id | author | comment | |-----:|:------------------|:------------------------------------------| | #254 | @kkirsche | fixes #254 by removing version from json | | #165 | @vincentcialdella | fixes #165 by changing default script | | #180 | @owencraig | fixes #180 by using xlsx.core.min.js | format issues: | id | author | comment | |-----:|:------------------|:------------------------------------------| | #271 | @morstaine | fixes #271 by reworking related parse fns | | #504 | @JanSchuermannPH | fixes #504 detect FullPaths h/t @Mithgol | | #508 | @basma-emad | fixes #508 offending file used `x:` NS |
43 lines
1.6 KiB
JavaScript
43 lines
1.6 KiB
JavaScript
function firstbyte(f/*:RawData*/,o/*:?TypeOpts*/)/*:number*/ {
|
|
switch((o||{}).type || "base64") {
|
|
case 'buffer': return f[0];
|
|
case 'base64': return Base64.decode(f.substr(0,12)).charCodeAt(0);
|
|
case 'binary': return f.charCodeAt(0);
|
|
case 'array': return f[0];
|
|
default: throw new Error("Unrecognized type " + (o ? o.type : "undefined"));
|
|
}
|
|
}
|
|
|
|
function read_zip(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
|
|
/*:: if(!jszip) throw new Error("JSZip is not available"); */
|
|
var zip, d = data;
|
|
var o = opts||{};
|
|
if(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? "buffer" : "base64";
|
|
switch(o.type) {
|
|
case "base64": zip = new jszip(d, { base64:true }); break;
|
|
case "binary": case "array": zip = new jszip(d, { base64:false }); break;
|
|
case "buffer": zip = new jszip(d); break;
|
|
default: throw new Error("Unrecognized type " + o.type);
|
|
}
|
|
return parse_zip(zip, o);
|
|
}
|
|
|
|
function readSync(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
|
|
var zip, d = data, n=0;
|
|
var o = opts||{};
|
|
if(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? "buffer" : "base64";
|
|
if(o.type == "file") { o.type = "buffer"; d = _fs.readFileSync(data); }
|
|
switch((n = firstbyte(d, o))) {
|
|
case 0xD0: return parse_xlscfb(CFB.read(d, o), o);
|
|
case 0x09: return parse_xlscfb(s2a(o.type === 'base64' ? Base64.decode(d) : d), o);
|
|
case 0x3C: return parse_xlml(d, o);
|
|
case 0x50: return read_zip(d, o);
|
|
default: throw new Error("Unsupported file " + n);
|
|
}
|
|
}
|
|
|
|
function readFileSync(filename/*:string*/, opts/*:?ParseOpts*/)/*:Workbook*/ {
|
|
var o = opts||{}; o.type = 'file';
|
|
return readSync(filename, o);
|
|
}
|