forked from sheetjs/sheetjs
updating to 0.7.8
This commit is contained in:
parent
529ac1199d
commit
ba8bfe5b09
372
xlsx.js
372
xlsx.js
@ -3,21 +3,24 @@
|
||||
/*jshint -W041 */
|
||||
var XLSX = {};
|
||||
(function(XLSX){
|
||||
XLSX.version = '0.7.7';
|
||||
XLSX.version = '0.7.8';
|
||||
var current_codepage = 1252, current_cptable;
|
||||
if(typeof module !== "undefined" && typeof require !== 'undefined') {
|
||||
if(typeof cptable === 'undefined') cptable = require('./dist/cpexcel');
|
||||
current_cptable = cptable[current_codepage];
|
||||
}
|
||||
function reset_cp() { set_cp(1252); }
|
||||
function set_cp(cp) { current_codepage = cp; if(typeof cptable !== 'undefined') current_cptable = cptable[cp]; }
|
||||
var set_cp = function(cp) { current_codepage = cp; };
|
||||
|
||||
function char_codes(data) { var o = []; for(var i = 0; i != data.length; ++i) o[i] = data.charCodeAt(i); return o; }
|
||||
function debom_xml(data) {
|
||||
if(typeof cptable !== 'undefined') {
|
||||
function char_codes(data) { var o = []; for(var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i); return o; }
|
||||
var debom_xml = function(data) { return data; };
|
||||
|
||||
if(typeof cptable !== 'undefined') {
|
||||
set_cp = function(cp) { current_codepage = cp; current_cptable = cptable[cp]; };
|
||||
debom_xml = function(data) {
|
||||
if(data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) { return cptable.utils.decode(1200, char_codes(data.substr(2))); }
|
||||
}
|
||||
return data;
|
||||
return data;
|
||||
};
|
||||
}
|
||||
/* ssf.js (C) 2013-2014 SheetJS -- http://sheetjs.com */
|
||||
/*jshint -W041 */
|
||||
@ -827,15 +830,17 @@ function cc2str(arr) {
|
||||
for(var i = 0; i != arr.length; ++i) o += String.fromCharCode(arr[i]);
|
||||
return o;
|
||||
}
|
||||
|
||||
var has_buf = (typeof Buffer !== 'undefined');
|
||||
function getdata(data) {
|
||||
if(!data) return null;
|
||||
if(data.name.substr(-4) === ".bin") {
|
||||
if(data.data) return char_codes(data.data);
|
||||
if(data.asNodeBuffer && typeof Buffer !== 'undefined') return data.asNodeBuffer();
|
||||
if(data.asNodeBuffer && has_buf) return data.asNodeBuffer();
|
||||
if(data._data && data._data.getContent) return Array.prototype.slice.call(data._data.getContent());
|
||||
} else {
|
||||
if(data.data) return data.name.substr(-4) !== ".bin" ? debom_xml(data.data) : char_codes(data.data);
|
||||
if(data.asNodeBuffer && typeof Buffer !== 'undefined') return debom_xml(data.asNodeBuffer().toString('binary'));
|
||||
if(data.asNodeBuffer && has_buf) return debom_xml(data.asNodeBuffer().toString('binary'));
|
||||
if(data.asBinary) return debom_xml(data.asBinary());
|
||||
if(data._data && data._data.getContent) return debom_xml(cc2str(Array.prototype.slice.call(data._data.getContent(),0)));
|
||||
}
|
||||
@ -859,12 +864,11 @@ var _fs, jszip;
|
||||
if(typeof JSZip !== 'undefined') jszip = JSZip;
|
||||
if (typeof exports !== 'undefined') {
|
||||
if (typeof module !== 'undefined' && module.exports) {
|
||||
if(typeof Buffer !== 'undefined' && typeof jszip === 'undefined') jszip = require('jszip');
|
||||
if(typeof jszip === 'undefined') jszip = require('./jszip').JSZip;
|
||||
_fs = require('fs');
|
||||
if(has_buf && typeof jszip === 'undefined') jszip = require('js'+'zip');
|
||||
if(typeof jszip === 'undefined') jszip = require('./js'+'zip').JSZip;
|
||||
_fs = require('f'+'s');
|
||||
}
|
||||
}
|
||||
var _chr = function(c) { return String.fromCharCode(c); };
|
||||
var attregexg=/\b[\w:]+=["'][^"]*['"]/g;
|
||||
var tagregex=/<[^>]*>/g;
|
||||
var nsregex=/<\w*:/, nsregex2 = /<(\/?)\w+:/;
|
||||
@ -898,10 +902,10 @@ var rencoding = evert(encodings);
|
||||
var rencstr = "&<>'\"".split("");
|
||||
|
||||
// TODO: CP remap (need to read file version to determine OS)
|
||||
var encregex = /&[a-z]*;/g, coderegex = /_x([0-9a-fA-F]+)_/g;
|
||||
var encregex = /&[a-z]*;/g, coderegex = /_x([\da-fA-F]+)_/g;
|
||||
function unescapexml(text){
|
||||
var s = text + '';
|
||||
return s.replace(encregex, function($$) { return encodings[$$]; }).replace(coderegex,function(m,c) {return _chr(parseInt(c,16));});
|
||||
return s.replace(encregex, function($$) { return encodings[$$]; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));});
|
||||
}
|
||||
var decregex=/[&<>'"]/g, charegex = /[\u0000-\u0008\u000b-\u001f]/g;
|
||||
function escapexml(text){
|
||||
@ -935,7 +939,7 @@ var utf8read = function utf8reada(orig) {
|
||||
};
|
||||
|
||||
|
||||
if(typeof Buffer !== "undefined") {
|
||||
if(has_buf) {
|
||||
var utf8readb = function utf8readb(data) {
|
||||
var out = new Buffer(2*data.length), w, i, j = 1, k = 0, ww=0, c;
|
||||
for(i = 0; i < data.length; i+=j) {
|
||||
@ -1044,38 +1048,37 @@ function readIEEE754(buf, idx, isLE, nl, ml) {
|
||||
}
|
||||
|
||||
var __toBuffer, ___toBuffer;
|
||||
__toBuffer = ___toBuffer = function(bufs) {
|
||||
var x = [];
|
||||
for(var i = 0; i != bufs[0].length; ++i) { x = x.concat(bufs[0][i]); }
|
||||
return x;
|
||||
};
|
||||
if(typeof Buffer !== "undefined") {
|
||||
__toBuffer = ___toBuffer = function toBuffer_(bufs) { var x = []; for(var i = 0; i < bufs[0].length; ++i) { x.push.apply(x, bufs[0][i]); } return x; };
|
||||
var __double, ___double;
|
||||
__double = ___double = function(b, idx) { return readIEEE754(b, idx);};
|
||||
|
||||
var is_buf = function is_buf_a(a) { return Array.isArray(a); };
|
||||
if(has_buf) {
|
||||
__toBuffer = function(bufs) { return (bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0]) : ___toBuffer(bufs);};
|
||||
__double = function double_(b,i) { if(Buffer.isBuffer(b)) return b.readDoubleLE(i); return ___double(b,i); };
|
||||
is_buf = function is_buf_b(a) { return Buffer.isBuffer(a) || Array.isArray(a); };
|
||||
}
|
||||
|
||||
var ___readUInt32LE = function(b, idx) { return b.readUInt32LE ? b.readUInt32LE(idx) : b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };
|
||||
var ___readInt32LE = function(b, idx) { return (b[idx+3]<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };
|
||||
|
||||
var __readUInt8 = function(b, idx) { return b.readUInt8 ? b.readUInt8(idx) : b[idx]; };
|
||||
var __readUInt16LE = function(b, idx) { return b.readUInt16LE ? b.readUInt16LE(idx) : b[idx+1]*(1<<8)+b[idx]; };
|
||||
var __readInt16LE = function(b, idx) { var u = __readUInt16LE(b,idx); if(!(u & 0x8000)) return u; return (0xffff - u + 1) * -1; };
|
||||
var __readUInt32LE = typeof Buffer !== "undefined" ? function(b, i) { return Buffer.isBuffer(b) ? b.readUInt32LE(i) : ___readUInt32LE(b,i); } : ___readUInt32LE;
|
||||
var __readInt32LE = typeof Buffer !== "undefined" ? function(b, i) { return Buffer.isBuffer(b) ? b.readInt32LE(i) : ___readInt32LE(b,i); } : ___readInt32LE;
|
||||
var __readDoubleLE = function(b, idx) { return b.readDoubleLE ? b.readDoubleLE(idx) : readIEEE754(b, idx||0);};
|
||||
var __readUInt8 = function(b, idx) { return b[idx]; };
|
||||
var __readUInt16LE = function(b, idx) { return b[idx+1]*(1<<8)+b[idx]; };
|
||||
var __readInt16LE = function(b, idx) { var u = b[idx+1]*(1<<8)+b[idx]; return (u < 0x8000) ? u : (0xffff - u + 1) * -1; };
|
||||
var __readUInt32LE = function(b, idx) { return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };
|
||||
var __readInt32LE = function(b, idx) { return (b[idx+3]<<24)|(b[idx+2]<<16)|(b[idx+1]<<8)|b[idx]; };
|
||||
|
||||
|
||||
function ReadShift(size, t) {
|
||||
var o="", oo=[], w, vv, i, loc;
|
||||
if(t === 'dbcs') {
|
||||
loc = this.l;
|
||||
if(typeof Buffer !== 'undefined' && this instanceof Buffer) o = this.slice(this.l, this.l+2*size).toString("utf16le");
|
||||
if(has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l+2*size).toString("utf16le");
|
||||
else for(i = 0; i != size; ++i) { o+=String.fromCharCode(__readUInt16LE(this, loc)); loc+=2; }
|
||||
size *= 2;
|
||||
} else switch(size) {
|
||||
case 1: o = __readUInt8(this, this.l); break;
|
||||
case 2: o = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l); break;
|
||||
case 4: o = __readUInt32LE(this, this.l); break;
|
||||
case 8: if(t === 'f') { o = __readDoubleLE(this, this.l); break; }
|
||||
case 8: if(t === 'f') { o = __double(this, this.l); break; }
|
||||
}
|
||||
this.l+=size; return o;
|
||||
}
|
||||
@ -1086,7 +1089,8 @@ function WriteShift(t, val, f) {
|
||||
for(i = 0; i != val.length; ++i) this.writeUInt16LE(val.charCodeAt(i), this.l + 2 * i);
|
||||
size = 2 * val.length;
|
||||
} else switch(t) {
|
||||
case 1: size = 1; this.writeUInt8(val, this.l); break;
|
||||
case 1: size = 1; this[this.l] = val&255; break;
|
||||
case 3: size = 3; this[this.l+2] = val & 255; val >>>= 8; this[this.l+1] = val&255; val >>>= 8; this[this.l] = val&255; break;
|
||||
case 4: size = 4; this.writeUInt32LE(val, this.l); break;
|
||||
case 8: size = 8; if(f === 'f') { this.writeDoubleLE(val, this.l); break; }
|
||||
/* falls through */
|
||||
@ -1097,7 +1101,7 @@ function WriteShift(t, val, f) {
|
||||
}
|
||||
|
||||
function prep_blob(blob, pos) {
|
||||
blob.l = pos || 0;
|
||||
blob.l = pos;
|
||||
blob.read_shift = ReadShift;
|
||||
blob.write_shift = WriteShift;
|
||||
}
|
||||
@ -1107,12 +1111,11 @@ function parsenoop(blob, length) { blob.l += length; }
|
||||
function writenoop(blob, length) { blob.l += length; }
|
||||
|
||||
function new_buf(sz) {
|
||||
var o = typeof Buffer !== 'undefined' ? new Buffer(sz) : new Array(sz);
|
||||
var o = has_buf ? new Buffer(sz) : new Array(sz);
|
||||
prep_blob(o, 0);
|
||||
return o;
|
||||
}
|
||||
|
||||
function is_buf(a) { return (typeof Buffer !== 'undefined' && a instanceof Buffer) || Array.isArray(a); }
|
||||
/* [MS-XLSB] 2.1.4 Record */
|
||||
function recordhopper(data, cb, opts) {
|
||||
var tmpbyte, cntbyte, length;
|
||||
@ -1205,6 +1208,13 @@ function parse_RichStr(data, length) {
|
||||
data.l = start + length;
|
||||
return z;
|
||||
}
|
||||
function write_RichStr(str, o) {
|
||||
/* TODO: formatted string */
|
||||
if(o == null) o = new_buf(5+2*str.t.length);
|
||||
o.write_shift(1,0);
|
||||
write_XLWideString(str.t, o);
|
||||
return o;
|
||||
}
|
||||
|
||||
/* [MS-XLSB] 2.5.9 */
|
||||
function parse_Cell(data) {
|
||||
@ -1214,6 +1224,14 @@ function parse_Cell(data) {
|
||||
var fPhShow = data.read_shift(1);
|
||||
return { c:col, iStyleRef: iStyleRef };
|
||||
}
|
||||
function write_Cell(cell, o) {
|
||||
if(o == null) o = new_buf(8);
|
||||
o.write_shift(-4, cell.c);
|
||||
o.write_shift(3, cell.iStyleRef === undefined ? cell.iStyleRef : cell.s);
|
||||
o.write_shift(1, 0); /* fPhShow */
|
||||
return o;
|
||||
}
|
||||
|
||||
|
||||
/* [MS-XLSB] 2.5.21 */
|
||||
function parse_CodeName (data, length) { return parse_XLWideString(data, length); }
|
||||
@ -1236,7 +1254,7 @@ function parse_XLWideString(data) {
|
||||
return cchCharacters === 0 ? "" : data.read_shift(cchCharacters, 'dbcs');
|
||||
}
|
||||
function write_XLWideString(data, o) {
|
||||
if(o == null) o = new_buf(127);
|
||||
if(o == null) o = new_buf(4+2*data.length);
|
||||
o.write_shift(4, data.length);
|
||||
if(data.length > 0) o.write_shift(0, data, 'dbcs');
|
||||
return o;
|
||||
@ -1253,7 +1271,7 @@ function parse_RkNumber(data) {
|
||||
var fX100 = b[0] & 1, fInt = b[0] & 2;
|
||||
data.l+=4;
|
||||
b[0] &= 0xFC;
|
||||
var RK = fInt === 0 ? __readDoubleLE([0,0,0,0,b[0],b[1],b[2],b[3]],0) : __readInt32LE(b,0)>>2;
|
||||
var RK = fInt === 0 ? __double([0,0,0,0,b[0],b[1],b[2],b[3]],0) : __readInt32LE(b,0)>>2;
|
||||
return fX100 ? RK/100 : RK;
|
||||
}
|
||||
|
||||
@ -1660,14 +1678,21 @@ var CORE_PROPS = [
|
||||
XMLNS.CORE_PROPS = "http://schemas.openxmlformats.org/package/2006/metadata/core-properties";
|
||||
RELS.CORE_PROPS = 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties';
|
||||
|
||||
var CORE_PROPS_REGEX = (function() {
|
||||
var r = new Array(CORE_PROPS.length);
|
||||
for(var i = 0; i < CORE_PROPS.length; ++i) {
|
||||
var f = CORE_PROPS[i];
|
||||
var g = "(?:"+ f[0].substr(0,f[0].indexOf(":")) +":)"+ f[0].substr(f[0].indexOf(":")+1);
|
||||
r[i] = new RegExp("<" + g + "[^>]*>(.*)<\/" + g + ">");
|
||||
}
|
||||
return r;
|
||||
})();
|
||||
|
||||
function parse_core_props(data) {
|
||||
var p = {};
|
||||
|
||||
for(var i = 0; i != CORE_PROPS.length; ++i) {
|
||||
var f = CORE_PROPS[i];
|
||||
var g = "(?:"+ f[0].substr(0,f[0].indexOf(":")) +":)"+ f[0].substr(f[0].indexOf(":")+1);
|
||||
var cur = data.match(new RegExp("<" + g + "[^>]*>(.*)<\/" + g + ">"));
|
||||
for(var i = 0; i < CORE_PROPS.length; ++i) {
|
||||
var f = CORE_PROPS[i], cur = data.match(CORE_PROPS_REGEX[i]);
|
||||
if(cur != null && cur.length > 0) p[f[1]] = cur[1];
|
||||
if(f[2] === 'date' && p[f[1]]) p[f[1]] = new Date(p[f[1]]);
|
||||
}
|
||||
@ -1686,7 +1711,6 @@ var CORE_PROPS_XML_ROOT = writextag('cp:coreProperties', null, {
|
||||
|
||||
function cp_doit(f, g, h, o, p) {
|
||||
if(p[f] != null || g == null || g === "") return;
|
||||
if(typeof g !== 'string') g = String(g); /* TODO: remove */
|
||||
p[f] = g;
|
||||
o[o.length] = (h ? writextag(f,g,h) : writetag(f,g));
|
||||
}
|
||||
@ -1764,13 +1788,13 @@ function write_ext_props(cp, opts) {
|
||||
o[o.length] = (EXT_PROPS_XML_ROOT);
|
||||
|
||||
EXT_PROPS.forEach(function(f) {
|
||||
if(typeof cp[f[1]] === 'undefined') return;
|
||||
if(cp[f[1]] === undefined) return;
|
||||
var v;
|
||||
switch(f[2]) {
|
||||
case 'string': v = cp[f[1]]; break;
|
||||
case 'bool': v = cp[f[1]] ? 'true' : 'false'; break;
|
||||
}
|
||||
if(typeof v !== 'undefined') o[o.length] = (W(f[0], v));
|
||||
if(v !== undefined) o[o.length] = (W(f[0], v));
|
||||
});
|
||||
|
||||
/* TODO: HeadingPairs, TitlesOfParts */
|
||||
@ -2029,7 +2053,7 @@ function parse_sst_xml(data, opts) {
|
||||
}
|
||||
|
||||
RELS.SST = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings";
|
||||
|
||||
var straywsregex = /^\s|\s$|[\t\n\r]/;
|
||||
function write_sst_xml(sst, opts) {
|
||||
if(!opts.bookSST) return "";
|
||||
var o = [XML_HEADER];
|
||||
@ -2044,7 +2068,7 @@ function write_sst_xml(sst, opts) {
|
||||
if(s.r) sitag += s.r;
|
||||
else {
|
||||
sitag += "<t";
|
||||
if(s.t.match(/^\s|\s$|[\t\n\r]/)) sitag += ' xml:space="preserve"';
|
||||
if(s.t.match(straywsregex)) sitag += ' xml:space="preserve"';
|
||||
sitag += ">" + escapexml(s.t) + "</t>";
|
||||
}
|
||||
sitag += "</si>";
|
||||
@ -2076,7 +2100,22 @@ function parse_sst_bin(data, opts) {
|
||||
return s;
|
||||
}
|
||||
|
||||
function write_sst_bin(sst, opts) { }
|
||||
function write_BrtBeginSst(sst, o) {
|
||||
if(!o) o = new_buf(8);
|
||||
o.write_shift(4, sst.Count);
|
||||
o.write_shift(4, sst.Unique);
|
||||
return o;
|
||||
}
|
||||
|
||||
var write_BrtSSTItem = write_RichStr;
|
||||
|
||||
function write_sst_bin(sst, opts) {
|
||||
var ba = buf_array();
|
||||
write_record(ba, "BrtBeginSst", write_BrtBeginSst(sst));
|
||||
for(var i = 0; i < sst.length; ++i) write_record(ba, "BrtSSTItem", write_BrtSSTItem(sst[i]));
|
||||
write_record(ba, "BrtEndSst");
|
||||
return ba.end();
|
||||
}
|
||||
function hex2RGB(h) {
|
||||
var o = h.substr(h[0]==="#"?1:0,6);
|
||||
return [parseInt(o.substr(0,2),16),parseInt(o.substr(0,2),16),parseInt(o.substr(0,2),16)];
|
||||
@ -2194,14 +2233,14 @@ function parse_fills(t, opts) {
|
||||
function parse_numFmts(t, opts) {
|
||||
styles.NumberFmt = [];
|
||||
var k = keys(SSF._table);
|
||||
for(var i=0; i != k.length; ++i) styles.NumberFmt[k[i]] = SSF._table[k[i]];
|
||||
for(var i=0; i < k.length; ++i) styles.NumberFmt[k[i]] = SSF._table[k[i]];
|
||||
var m = t[0].match(tagregex);
|
||||
for(i=0; i != m.length; ++i) {
|
||||
for(i=0; i < m.length; ++i) {
|
||||
var y = parsexmltag(m[i]);
|
||||
switch(y[0]) {
|
||||
case '<numFmts': case '</numFmts>': case '<numFmts/>': case '<numFmts>': break;
|
||||
case '<numFmt': {
|
||||
var f=unescapexml(y.formatCode), j=parseInt(y.numFmtId,10);
|
||||
var f=unescapexml(utf8read(y.formatCode)), j=parseInt(y.numFmtId,10);
|
||||
styles.NumberFmt[j] = f; if(j>0) SSF.load(f,j);
|
||||
} break;
|
||||
default: if(opts.WTF) throw 'unrecognized ' + y[0] + ' in numFmts';
|
||||
@ -2214,8 +2253,8 @@ function write_numFmts(NF, opts) {
|
||||
[[5,8],[23,26],[41,44],[63,66],[164,392]].forEach(function(r) {
|
||||
for(var i = r[0]; i <= r[1]; ++i) if(NF[i] !== undefined) o[o.length] = (writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])}));
|
||||
});
|
||||
if(o.length === 1) return "";
|
||||
o[o.length] = ("</numFmts>");
|
||||
if(o.length === 2) return "";
|
||||
o[0] = writextag('numFmts', null, { count:o.length-2 }).replace("/>", ">");
|
||||
return o.join("");
|
||||
}
|
||||
@ -2259,23 +2298,29 @@ function write_cellXfs(cellXfs) {
|
||||
}
|
||||
|
||||
/* 18.8 Styles CT_Stylesheet*/
|
||||
function parse_sty_xml(data, opts) {
|
||||
var parse_sty_xml= (function make_pstyx() {
|
||||
var numFmtRegex = /<numFmts([^>]*)>.*<\/numFmts>/;
|
||||
var cellXfRegex = /<cellXfs([^>]*)>.*<\/cellXfs>/;
|
||||
var fillsRegex = /<fills([^>]*)>.*<\/fills>/;
|
||||
|
||||
return function parse_sty_xml(data, opts) {
|
||||
/* 18.8.39 styleSheet CT_Stylesheet */
|
||||
var t;
|
||||
|
||||
/* numFmts CT_NumFmts ? */
|
||||
if((t=data.match(/<numFmts([^>]*)>.*<\/numFmts>/))) parse_numFmts(t, opts);
|
||||
if((t=data.match(numFmtRegex))) parse_numFmts(t, opts);
|
||||
|
||||
/* fonts CT_Fonts ? */
|
||||
// if((t=data.match(/<fonts([^>]*)>.*<\/fonts>/))) parse_fonts(t, opts);
|
||||
|
||||
/* fills CT_Fills */
|
||||
if((t=data.match(/<fills([^>]*)>.*<\/fills>/))) parse_fills(t, opts);
|
||||
if((t=data.match(fillsRegex))) parse_fills(t, opts);
|
||||
|
||||
/* borders CT_Borders ? */
|
||||
/* cellStyleXfs CT_CellStyleXfs ? */
|
||||
|
||||
/* cellXfs CT_CellXfs ? */
|
||||
if((t=data.match(/<cellXfs([^>]*)>.*<\/cellXfs>/))) parse_cellXfs(t, opts);
|
||||
if((t=data.match(cellXfRegex))) parse_cellXfs(t, opts);
|
||||
|
||||
/* dxfs CT_Dxfs ? */
|
||||
/* tableStyles CT_TableStyles ? */
|
||||
@ -2283,7 +2328,8 @@ function parse_sty_xml(data, opts) {
|
||||
/* extLst CT_ExtensionList ? */
|
||||
|
||||
return styles;
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
var STYLES_XML_ROOT = writextag('styleSheet', null, {
|
||||
'xmlns': XMLNS.main[0],
|
||||
@ -2293,10 +2339,8 @@ var STYLES_XML_ROOT = writextag('styleSheet', null, {
|
||||
RELS.STY = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";
|
||||
|
||||
function write_sty_xml(wb, opts) {
|
||||
var o = [], p = {}, w;
|
||||
o[o.length] = (XML_HEADER);
|
||||
o[o.length] = (STYLES_XML_ROOT);
|
||||
if((w = write_numFmts(wb.SSF))) o[o.length] = (w);
|
||||
var o = [XML_HEADER, STYLES_XML_ROOT], w;
|
||||
if((w = write_numFmts(wb.SSF)) != null) o[o.length] = w;
|
||||
o[o.length] = ('<fonts count="1"><font><sz val="12"/><color theme="1"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font></fonts>');
|
||||
o[o.length] = ('<fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills>');
|
||||
o[o.length] = ('<borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders>');
|
||||
@ -2424,7 +2468,24 @@ function parse_sty_bin(data, opts) {
|
||||
return styles;
|
||||
}
|
||||
|
||||
function write_sty_bin(data, opts) { }
|
||||
/* [MS-XLSB] 2.1.7.50 Styles */
|
||||
function write_sty_bin(data, opts) {
|
||||
var ba = buf_array();
|
||||
write_record(ba, "BrtBeginStyleSheet");
|
||||
/* [FMTS] */
|
||||
/* [FONTS] */
|
||||
/* [FILLS] */
|
||||
/* [BORDERS] */
|
||||
/* CELLSTYLEXFS */
|
||||
/* CELLXFS*/
|
||||
/* STYLES */
|
||||
/* DXFS */
|
||||
/* TABLESTYLES */
|
||||
/* [COLORPALETTE] */
|
||||
/* FRTSTYLESHEET*/
|
||||
write_record(ba, "BrtEndStyleSheet");
|
||||
return ba.end();
|
||||
}
|
||||
RELS.THEME = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme";
|
||||
|
||||
/* 20.1.6.2 clrScheme CT_ColorScheme */
|
||||
@ -2680,14 +2741,14 @@ var _ssfopts = {}; // spreadsheet formatting options
|
||||
RELS.WS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet";
|
||||
|
||||
function get_sst_id(sst, str) {
|
||||
for(var i = 0; i != sst.length; ++i) if(sst[i].t === str) { sst.Count ++; return i; }
|
||||
sst[sst.length] = {t:str}; sst.Count ++; sst.Unique ++; return sst.length-1;
|
||||
for(var i = 0, len = sst.length; i < len; ++i) if(sst[i].t === str) { sst.Count ++; return i; }
|
||||
sst[len] = {t:str}; sst.Count ++; sst.Unique ++; return len;
|
||||
}
|
||||
|
||||
function get_cell_style(styles, cell, opts) {
|
||||
var z = opts.revssf[cell.z != null ? cell.z : "General"];
|
||||
for(var i = 0; i != styles.length; ++i) if(styles[i].numFmtId === z) return i;
|
||||
styles[styles.length] = {
|
||||
for(var i = 0, len = styles.length; i != len; ++i) if(styles[i].numFmtId === z) return i;
|
||||
styles[len] = {
|
||||
numFmtId:z,
|
||||
fontId:0,
|
||||
fillId:0,
|
||||
@ -2695,7 +2756,7 @@ function get_cell_style(styles, cell, opts) {
|
||||
xfId:0,
|
||||
applyNumberFormat:1
|
||||
};
|
||||
return styles.length-1;
|
||||
return len;
|
||||
}
|
||||
|
||||
function safe_format(p, fmtid, fillid, opts) {
|
||||
@ -2725,11 +2786,13 @@ function safe_format(p, fmtid, fillid, opts) {
|
||||
}
|
||||
function parse_ws_xml_dim(ws, s) {
|
||||
var d = safe_decode_range(s);
|
||||
if(d.s.r<=d.e.r && d.s.c<=d.e.c && d.s.r>=0 && d.e.r>=0) ws["!ref"] = encode_range(d);
|
||||
if(d.s.r<=d.e.r && d.s.c<=d.e.c && d.s.r>=0 && d.s.c>=0) ws["!ref"] = encode_range(d);
|
||||
}
|
||||
var mergecregex = /<mergeCell ref="[A-Z0-9:]+"\s*\/>/g;
|
||||
var sheetdataregex = /<(?:\w+:)?sheetData>([^\u2603]*)<\/(?:\w+:)?sheetData>/;
|
||||
var hlinkregex = /<hyperlink[^>]*\/>/g;
|
||||
var dimregex = /"(\w*:\w*)"/;
|
||||
var colregex = /<col[^>]*\/>/g;
|
||||
/* 18.3 Worksheets */
|
||||
function parse_ws_xml(data, opts, rels) {
|
||||
if(!data) return data;
|
||||
@ -2739,7 +2802,7 @@ function parse_ws_xml(data, opts, rels) {
|
||||
/* 18.3.1.35 dimension CT_SheetDimension ? */
|
||||
var ridx = data.indexOf("<dimension");
|
||||
if(ridx > 0) {
|
||||
var ref = data.substr(ridx,50).match(/"(\w*:\w*)"/);
|
||||
var ref = data.substr(ridx,50).match(dimregex);
|
||||
if(ref != null) parse_ws_xml_dim(s, ref[1]);
|
||||
}
|
||||
|
||||
@ -2755,7 +2818,7 @@ function parse_ws_xml(data, opts, rels) {
|
||||
var columns = [];
|
||||
if(opts.cellStyles && data.indexOf("</cols>")!==-1) {
|
||||
/* 18.3.1.13 col CT_Col */
|
||||
var cols = data.match(/<col[^>]*\/>/g);
|
||||
var cols = data.match(colregex);
|
||||
parse_ws_xml_cols(columns, cols);
|
||||
}
|
||||
|
||||
@ -2851,15 +2914,15 @@ function write_ws_xml_cell(cell, ref, ws, opts, idx, wb) {
|
||||
var os = get_cell_style(opts.cellXfs, cell, opts);
|
||||
if(os !== 0) o.s = os;
|
||||
switch(cell.t) {
|
||||
case 's': case 'str':
|
||||
case 'n': break;
|
||||
case 'b': o.t = "b"; break;
|
||||
case 'e': o.t = "e"; break;
|
||||
default:
|
||||
if(opts.bookSST) {
|
||||
v = writetag('v', ''+get_sst_id(opts.Strings, cell.v));
|
||||
o.t = "s"; break;
|
||||
}
|
||||
o.t = "str"; break;
|
||||
case 'n': break;
|
||||
case 'b': o.t = "b"; break;
|
||||
case 'e': o.t = "e"; break;
|
||||
}
|
||||
return writextag('c', v, o);
|
||||
}
|
||||
@ -2874,20 +2937,22 @@ return function parse_ws_xml_data(sdata, s, opts, guess) {
|
||||
var tag;
|
||||
var sstr;
|
||||
var fmtid = 0, fillid = 0, do_format = Array.isArray(styles.CellXf), cf;
|
||||
for(var marr = sdata.split(rowregex), mt = 0; mt != marr.length; ++mt) {
|
||||
for(var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {
|
||||
x = marr[mt].trim();
|
||||
if(x.length === 0) continue;
|
||||
var xlen = x.length;
|
||||
if(xlen === 0) continue;
|
||||
|
||||
/* 18.3.1.73 row CT_Row */
|
||||
for(ri = 0; ri != x.length; ++ri) if(x.charCodeAt(ri) === 62) break; ++ri;
|
||||
for(ri = 0; ri < xlen; ++ri) if(x.charCodeAt(ri) === 62) break; ++ri;
|
||||
tag = parsexmltag(x.substr(0,ri), true);
|
||||
if(opts.sheetRows && opts.sheetRows < +tag.r) continue;
|
||||
if(guess.s.r > tag.r - 1) guess.s.r = tag.r - 1;
|
||||
if(guess.e.r < tag.r - 1) guess.e.r = tag.r - 1;
|
||||
var tagr = parseInt(tag.r, 10);
|
||||
if(opts.sheetRows && opts.sheetRows < tagr) continue;
|
||||
if(guess.s.r > tagr - 1) guess.s.r = tagr - 1;
|
||||
if(guess.e.r < tagr - 1) guess.e.r = tagr - 1;
|
||||
|
||||
/* 18.3.1.4 c CT_Cell */
|
||||
cells = x.substr(ri).split(cellregex);
|
||||
for(ri = 0; ri != cells.length; ++ri) {
|
||||
for(ri = 1, cellen = cells.length; ri != cellen; ++ri) {
|
||||
x = cells[ri].trim();
|
||||
if(x.length === 0) continue;
|
||||
cref = x.match(rregex); idx = ri; i=0; cc=0;
|
||||
@ -2946,7 +3011,7 @@ return function parse_ws_xml_data(sdata, s, opts, guess) {
|
||||
cf = styles.CellXf[tag.s];
|
||||
if(cf != null) {
|
||||
if(cf.numFmtId != null) fmtid = cf.numFmtId;
|
||||
if(opts.cellStyles && cf.fillId != undefined) fillid = cf.fillId;
|
||||
if(opts.cellStyles && cf.fillId != null) fillid = cf.fillId;
|
||||
}
|
||||
}
|
||||
safe_format(p, fmtid, fillid, opts);
|
||||
@ -2956,17 +3021,17 @@ return function parse_ws_xml_data(sdata, s, opts, guess) {
|
||||
}; })();
|
||||
|
||||
function write_ws_xml_data(ws, opts, idx, wb) {
|
||||
var o = [], r = [], range = safe_decode_range(ws['!ref']), cell, ref, rr = "", cols = [];
|
||||
for(var R = range.s.r; R <= range.e.r; ++R) {
|
||||
var o = [], r = [], range = safe_decode_range(ws['!ref']), cell, ref, rr = "", cols = [], R, C;
|
||||
for(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);
|
||||
for(R = range.s.r; R <= range.e.r; ++R) {
|
||||
r = [];
|
||||
rr = encode_row(R);
|
||||
for(var C = range.s.c; C <= range.e.c; ++C) {
|
||||
if(R === range.s.r) cols[C] = encode_col(C);
|
||||
for(C = range.s.c; C <= range.e.c; ++C) {
|
||||
ref = cols[C] + rr;
|
||||
if(!ws[ref]) continue;
|
||||
if((cell = write_ws_xml_cell(ws[ref], ref, ws, opts, idx, wb))) r.push(cell);
|
||||
if(ws[ref] === undefined) continue;
|
||||
if((cell = write_ws_xml_cell(ws[ref], ref, ws, opts, idx, wb)) != null) r.push(cell);
|
||||
}
|
||||
if(r.length) o[o.length] = (writextag('row', r.join(""), {r:rr}));
|
||||
if(r.length > 0) o[o.length] = (writextag('row', r.join(""), {r:rr}));
|
||||
}
|
||||
return o.join("");
|
||||
}
|
||||
@ -2978,13 +3043,18 @@ var WS_XML_ROOT = writextag('worksheet', null, {
|
||||
|
||||
function write_ws_xml(idx, opts, wb) {
|
||||
var o = [XML_HEADER, WS_XML_ROOT];
|
||||
var s = wb.SheetNames[idx], ws = wb.Sheets[s] || {}, sidx = 0, rdata = "";
|
||||
o[o.length] = (writextag('dimension', null, {'ref': ws['!ref'] || 'A1'}));
|
||||
if((ws['!cols']||[]).length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));
|
||||
sidx = o.length;
|
||||
o[o.length] = (writextag('sheetData', null));
|
||||
if(ws['!ref']) rdata = write_ws_xml_data(ws, opts, idx, wb);
|
||||
if(rdata.length) o[o.length] = (rdata);
|
||||
var s = wb.SheetNames[idx], sidx = 0, rdata = "";
|
||||
var ws = wb.Sheets[s];
|
||||
if(ws === undefined) ws = {};
|
||||
var ref = ws['!ref']; if(ref === undefined) ref = 'A1';
|
||||
o[o.length] = (writextag('dimension', null, {'ref': ref}));
|
||||
|
||||
if(ws['!cols'] !== undefined && ws['!cols'].length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));
|
||||
o[sidx = o.length] = '<sheetData/>';
|
||||
if(ws['!ref'] !== undefined) {
|
||||
rdata = write_ws_xml_data(ws, opts, idx, wb);
|
||||
if(rdata.length > 0) o[o.length] = (rdata);
|
||||
}
|
||||
if(o.length>sidx+1) { o[o.length] = ('</sheetData>'); o[sidx]=o[sidx].replace("/>",">"); }
|
||||
|
||||
if(o.length>2) { o[o.length] = ('</worksheet>'); o[1]=o[1].replace("/>",">"); }
|
||||
@ -3017,6 +3087,11 @@ function parse_BrtCellBlank(data, length) {
|
||||
var cell = parse_Cell(data);
|
||||
return [cell];
|
||||
}
|
||||
function write_BrtCellBlank(cell, val, o) {
|
||||
if(o == null) o = new_buf(8);
|
||||
return write_Cell(val, o);
|
||||
}
|
||||
|
||||
|
||||
/* [MS-XLSB] 2.4.304 BrtCellBool */
|
||||
function parse_BrtCellBool(data, length) {
|
||||
@ -3291,6 +3366,15 @@ function parse_ws_bin(data, opts, rels) {
|
||||
case 'BrtCustomFilter': break;
|
||||
case 'BrtEndCustomFilters': break;
|
||||
|
||||
/* Smart Tags */
|
||||
case 'BrtBeginSmartTags': break;
|
||||
case 'BrtBeginCellSmartTags': break;
|
||||
case 'BrtBeginCellSmartTag': break;
|
||||
case 'BrtCellSmartTagProperty': break;
|
||||
case 'BrtEndCellSmartTag': break;
|
||||
case 'BrtEndCellSmartTags': break;
|
||||
case 'BrtEndSmartTags': break;
|
||||
|
||||
/* Cell Watch */
|
||||
case 'BrtBeginCellWatches': break;
|
||||
case 'BrtCellWatch': break;
|
||||
@ -3324,14 +3408,47 @@ function parse_ws_bin(data, opts, rels) {
|
||||
return s;
|
||||
}
|
||||
|
||||
/* TODO: something useful -- this is a stub */
|
||||
function write_ws_bin_cell(ba, cell, R, C, opts) {
|
||||
if(cell.v === undefined) return "";
|
||||
var vv = "";
|
||||
switch(cell.t) {
|
||||
case 'b': vv = cell.v ? "1" : "0"; break;
|
||||
case 'n': case 'e': vv = ''+cell.v; break;
|
||||
default: vv = cell.v; break;
|
||||
}
|
||||
var o = {r:R, c:C};
|
||||
/* TODO: cell style */
|
||||
o.s = get_cell_style(opts.cellXfs, cell, opts);
|
||||
switch(cell.t) {
|
||||
case 's': case 'str':
|
||||
if(opts.bookSST) {
|
||||
vv = get_sst_id(opts.Strings, cell.v);
|
||||
o.t = "s"; break;
|
||||
}
|
||||
o.t = "str"; break;
|
||||
case 'n': break;
|
||||
case 'b': o.t = "b"; break;
|
||||
case 'e': o.t = "e"; break;
|
||||
}
|
||||
write_record(ba, "BrtCellBlank", write_BrtCellBlank(cell, o));
|
||||
}
|
||||
|
||||
function write_CELLTABLE(ba, ws, idx, opts, wb) {
|
||||
var r = safe_decode_range(ws['!ref'] || "A1");
|
||||
var range = safe_decode_range(ws['!ref'] || "A1"), ref, rr = "", cols = [];
|
||||
write_record(ba, 'BrtBeginSheetData');
|
||||
for(var i = r.s.r; i <= r.e.r; ++i) {
|
||||
for(var R = range.s.r; R <= range.e.r; ++R) {
|
||||
rr = encode_row(R);
|
||||
/* [ACCELLTABLE] */
|
||||
/* BrtRowHdr */
|
||||
|
||||
/* *16384CELL */
|
||||
for(var C = range.s.c; C <= range.e.c; ++C) {
|
||||
/* *16384CELL */
|
||||
if(R === range.s.r) cols[C] = encode_col(C);
|
||||
ref = cols[C] + rr;
|
||||
if(!ws[ref]) continue;
|
||||
/* write cell */
|
||||
write_ws_bin_cell(ba, ws[ref], R, C, opts);
|
||||
}
|
||||
}
|
||||
write_record(ba, 'BrtEndSheetData');
|
||||
}
|
||||
@ -3483,6 +3600,7 @@ function parse_wb_defaults(wb) {
|
||||
_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904, 'date1904');
|
||||
}
|
||||
/* 18.2 Workbook */
|
||||
var wbnsregex = /<\w+:workbook/;
|
||||
function parse_wb_xml(data, opts) {
|
||||
var wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: "" };
|
||||
var pass = false, xmlns = "xmlns";
|
||||
@ -3493,7 +3611,7 @@ function parse_wb_xml(data, opts) {
|
||||
|
||||
/* 18.2.27 workbook CT_Workbook 1 */
|
||||
case '<workbook':
|
||||
if(x.match(/<\w+:workbook/)) xmlns = "xmlns" + x.match(/<(\w+):/)[1];
|
||||
if(x.match(wbnsregex)) xmlns = "xmlns" + x.match(/<(\w+):/)[1];
|
||||
wb.xmlns = y[xmlns];
|
||||
break;
|
||||
case '</workbook>': break;
|
||||
@ -3675,6 +3793,7 @@ function parse_wb_bin(data, opts) {
|
||||
case 'BrtACBegin': break;
|
||||
case 'BrtAbsPath15': break;
|
||||
case 'BrtACEnd': break;
|
||||
case 'BrtWbFactoid': break;
|
||||
/*case 'BrtBookProtectionIso': break;*/
|
||||
case 'BrtBookProtection': break;
|
||||
case 'BrtBeginBookViews': break;
|
||||
@ -3703,11 +3822,18 @@ function parse_wb_bin(data, opts) {
|
||||
case 'BrtBeginWebPubItem': break;
|
||||
case 'BrtEndWebPubItem': break;
|
||||
case 'BrtEndWebPubItems': break;*/
|
||||
|
||||
/* Smart Tags */
|
||||
case 'BrtBeginSmartTagTypes': break;
|
||||
case 'BrtSmartTagType': break;
|
||||
case 'BrtEndSmartTagTypes': break;
|
||||
|
||||
case 'BrtFRTBegin': pass = true; break;
|
||||
case 'BrtFRTArchID$': break;
|
||||
case 'BrtWorkBookPr15': break;
|
||||
case 'BrtFRTEnd': pass = false; break;
|
||||
case 'BrtEndBook': break;
|
||||
default: if(!pass) throw new Error("Unexpected record " + R.n);
|
||||
default: if(!pass || opts.WTF) throw new Error("Unexpected record " + R.n);
|
||||
}
|
||||
});
|
||||
|
||||
@ -4674,7 +4800,7 @@ function fix_opts_func(defaults) {
|
||||
return function fix_opts(opts) {
|
||||
for(var i = 0; i != defaults.length; ++i) {
|
||||
var d = defaults[i];
|
||||
if(typeof opts[d[0]] === 'undefined') opts[d[0]] = d[1];
|
||||
if(opts[d[0]] === undefined) opts[d[0]] = d[1];
|
||||
if(d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);
|
||||
}
|
||||
};
|
||||
@ -4935,7 +5061,7 @@ function write_zip(wb, opts) {
|
||||
function readSync(data, opts) {
|
||||
var zip, d = data;
|
||||
var o = opts||{};
|
||||
if(!o.type) o.type = (typeof Buffer !== 'undefined' && data instanceof Buffer) ? "buffer" : "base64";
|
||||
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": zip = new jszip(d, { base64:false }); break;
|
||||
@ -4998,27 +5124,28 @@ function encode_range(cs,ce) {
|
||||
function safe_decode_range(range) {
|
||||
var o = {s:{c:0,r:0},e:{c:0,r:0}};
|
||||
var idx = 0, i = 0, cc = 0;
|
||||
for(idx = 0; i != range.length; ++i) {
|
||||
var len = range.length;
|
||||
for(idx = 0; i < len; ++i) {
|
||||
if((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;
|
||||
idx = 26*idx + cc;
|
||||
}
|
||||
o.s.c = --idx;
|
||||
|
||||
for(idx = 0; i != range.length; ++i) {
|
||||
for(idx = 0; i < len; ++i) {
|
||||
if((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;
|
||||
idx = 10*idx + cc;
|
||||
}
|
||||
o.s.r = --idx;
|
||||
|
||||
if(i === range.length || range.charCodeAt(++i) === 58) { o.e.c=o.s.c; o.e.r=o.s.r; return o; }
|
||||
if(i === len || range.charCodeAt(++i) === 58) { o.e.c=o.s.c; o.e.r=o.s.r; return o; }
|
||||
|
||||
for(idx = 0; i != range.length; ++i) {
|
||||
for(idx = 0; i != len; ++i) {
|
||||
if((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;
|
||||
idx = 26*idx + cc;
|
||||
}
|
||||
o.e.c = --idx;
|
||||
|
||||
for(idx = 0; i != range.length; ++i) {
|
||||
for(idx = 0; i != len; ++i) {
|
||||
if((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;
|
||||
idx = 10*idx + cc;
|
||||
}
|
||||
@ -5041,9 +5168,9 @@ function format_cell(cell, v) {
|
||||
|
||||
function sheet_to_json(sheet, opts){
|
||||
var val, row, range, header = 0, offset = 1, r, hdr = [], isempty, R, C, v;
|
||||
var out = [];
|
||||
var o = opts != null ? opts : {};
|
||||
if(!sheet || !sheet["!ref"]) return out;
|
||||
var raw = o.raw;
|
||||
if(sheet == null || sheet["!ref"] == null) return [];
|
||||
range = o.range !== undefined ? o.range : sheet["!ref"];
|
||||
if(o.header === 1) header = 1;
|
||||
else if(o.header === "A") header = 2;
|
||||
@ -5055,7 +5182,9 @@ function sheet_to_json(sheet, opts){
|
||||
}
|
||||
if(header > 0) offset = 0;
|
||||
var rr = encode_row(r.s.r);
|
||||
var cols = [];
|
||||
var cols = new Array(r.e.c-r.s.c+1);
|
||||
var out = new Array(r.e.r-r.s.r-offset+1);
|
||||
var outi = 0;
|
||||
for(C = r.s.c; C <= r.e.c; ++C) {
|
||||
cols[C] = encode_col(C);
|
||||
val = sheet[cols[C] + rr];
|
||||
@ -5064,7 +5193,7 @@ function sheet_to_json(sheet, opts){
|
||||
case 2: hdr[C] = cols[C]; break;
|
||||
case 3: hdr[C] = o.header[C - r.s.c]; break;
|
||||
default:
|
||||
if(!val) continue;
|
||||
if(val === undefined) continue;
|
||||
hdr[C] = format_cell(val);
|
||||
}
|
||||
}
|
||||
@ -5075,7 +5204,7 @@ function sheet_to_json(sheet, opts){
|
||||
row = header === 1 ? [] : Object.create({ __rowNum__ : R });
|
||||
for (C = r.s.c; C <= r.e.c; ++C) {
|
||||
val = sheet[cols[C] + rr];
|
||||
if(!val || !val.t) continue;
|
||||
if(val === undefined || val.t === undefined) continue;
|
||||
v = val.v;
|
||||
switch(val.t){
|
||||
case 'e': continue;
|
||||
@ -5084,16 +5213,17 @@ function sheet_to_json(sheet, opts){
|
||||
default: throw 'unrecognized type ' + val.t;
|
||||
}
|
||||
if(v !== undefined) {
|
||||
row[hdr[C]] = o.raw ? v : format_cell(val,v);
|
||||
row[hdr[C]] = raw ? v : format_cell(val,v);
|
||||
isempty = false;
|
||||
}
|
||||
}
|
||||
if(!isempty) out.push(row);
|
||||
if(isempty === false) out[outi++] = row;
|
||||
}
|
||||
out.length = outi;
|
||||
return out;
|
||||
}
|
||||
|
||||
function sheet_to_row_object_array(sheet, opts) { return sheet_to_json(sheet, opts == null ? opts : {}); }
|
||||
function sheet_to_row_object_array(sheet, opts) { return sheet_to_json(sheet, opts != null ? opts : {}); }
|
||||
|
||||
function sheet_to_csv(sheet, opts) {
|
||||
var out = "", txt = "", qreg = /"/g;
|
||||
@ -5105,11 +5235,11 @@ function sheet_to_csv(sheet, opts) {
|
||||
var row = "", rr = "", cols = [];
|
||||
var i = 0, cc = 0, val;
|
||||
var R = 0, C = 0;
|
||||
for(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);
|
||||
for(R = r.s.r; R <= r.e.r; ++R) {
|
||||
row = "";
|
||||
rr = encode_row(R);
|
||||
for(C = r.s.c; C <= r.e.c; ++C) {
|
||||
if(R === r.s.r) cols[C] = encode_col(C);
|
||||
val = sheet[cols[C] + rr];
|
||||
txt = val !== undefined ? ''+format_cell(val) : "";
|
||||
for(i = 0, cc = 0; i !== txt.length; ++i) if((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34) {
|
||||
@ -5125,13 +5255,13 @@ var make_csv = sheet_to_csv;
|
||||
function sheet_to_formulae(sheet) {
|
||||
var cmds, y = "", x, val="";
|
||||
if(sheet == null || sheet["!ref"] == null) return "";
|
||||
var r = safe_decode_range(sheet['!ref']), rr = "", cols = [];
|
||||
var r = safe_decode_range(sheet['!ref']), rr = "", cols = [], C;
|
||||
cmds = new Array((r.e.r-r.s.r+1)*(r.e.c-r.s.c+1));
|
||||
var i = 0;
|
||||
for(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);
|
||||
for(var R = r.s.r; R <= r.e.r; ++R) {
|
||||
rr = encode_row(R);
|
||||
for(var C = r.s.c; C <= r.e.c; ++C) {
|
||||
if(R === r.s.r) cols[C] = encode_col(C);
|
||||
for(C = r.s.c; C <= r.e.c; ++C) {
|
||||
y = cols[C] + rr;
|
||||
x = sheet[y];
|
||||
val = "";
|
||||
|
Loading…
Reference in New Issue
Block a user