forked from sheetjs/sheetjs
		
	version bump 0.12.2: BIFF2-4 features
- correct BIFF-dependent cell reference wrapping - record layout fixes from sample files - use BIFF version 2.4.338 for BOF (fixes #995 h/t @benjaminleetmaa) - fixed potentially vulnerable regexes (h/t @davisjam) - removed insecure deep dependency (fixes #996 h/t @dcatoday)
This commit is contained in:
		
							parent
							
								
									88e9e31ebf
								
							
						
					
					
						commit
						8508ad4e94
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -12,7 +12,7 @@ tmp
 | 
			
		||||
*.[pP][rR][nN]
 | 
			
		||||
*.[sS][lL][kK]
 | 
			
		||||
*.socialcalc
 | 
			
		||||
*.[xX][lL][sSwWcCaAtT]
 | 
			
		||||
*.[xX][lL][sSwWcCaAtTmM]
 | 
			
		||||
*.[xX][lL][sSaAtT][xXmMbB]
 | 
			
		||||
*.[oO][dD][sS]
 | 
			
		||||
*.[fF][oO][dD][sS]
 | 
			
		||||
 | 
			
		||||
@ -14,7 +14,7 @@ tmp
 | 
			
		||||
*.[pP][rR][nN]
 | 
			
		||||
*.[sS][lL][kK]
 | 
			
		||||
*.socialcalc
 | 
			
		||||
*.[xX][lL][sSwWcCaAtT]
 | 
			
		||||
*.[xX][lL][sSwWcCaAtTmM]
 | 
			
		||||
*.[xX][lL][sSaAtT][xXmMbB]
 | 
			
		||||
*.[oO][dD][sS]
 | 
			
		||||
*.[fF][oO][dD][sS]
 | 
			
		||||
 | 
			
		||||
@ -1 +1 @@
 | 
			
		||||
XLSX.version = '0.12.1';
 | 
			
		||||
XLSX.version = '0.12.2';
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@
 | 
			
		||||
/*jshint -W041 */
 | 
			
		||||
var SSF/*:SSFModule*/ = ({}/*:any*/);
 | 
			
		||||
var make_ssf = function make_ssf(SSF/*:SSFModule*/){
 | 
			
		||||
SSF.version = '0.10.0';
 | 
			
		||||
SSF.version = '0.10.2';
 | 
			
		||||
function _strrev(x/*:string*/)/*:string*/ { var o = "", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }
 | 
			
		||||
function fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = ""; while(o.length < l) o+=c; return o; }
 | 
			
		||||
function pad0(v/*:any*/,d/*:number*/)/*:string*/{var t=""+v; return t.length>=d?t:fill('0',d-t.length)+t;}
 | 
			
		||||
@ -791,7 +791,7 @@ function eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number*/) {
 | 
			
		||||
}
 | 
			
		||||
SSF._eval = eval_fmt;
 | 
			
		||||
var cfregex = /\[[=<>]/;
 | 
			
		||||
var cfregex2 = /\[([=<>]*)(-?\d+\.?\d*)\]/;
 | 
			
		||||
var cfregex2 = /\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;
 | 
			
		||||
function chkcond(v, rr) {
 | 
			
		||||
	if(rr == null) return false;
 | 
			
		||||
	var thresh = parseFloat(rr[2]);
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
var XML_HEADER = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r\n';
 | 
			
		||||
var attregexg=/([^"\s?>\/]+)\s*=\s*((?:")([^"]*)(?:")|(?:')([^']*)(?:')|([^'">\s]+))/g;
 | 
			
		||||
var tagregex=/<[\/\?]?[a-zA-Z0-9:]+(?:\s+[^"\s?>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s]+))*\s?[\/\?]?>/g;
 | 
			
		||||
var tagregex=/<[\/\?]?[a-zA-Z0-9:]+(?:\s+[^"\s?>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s=]+))*\s?[\/\?]?>/g;
 | 
			
		||||
if(!(XML_HEADER.match(tagregex))) tagregex = /<[^>]*>/g;
 | 
			
		||||
var nsregex=/<\w*:/, nsregex2 = /<(\/?)\w+:/;
 | 
			
		||||
function parsexmltag(tag/*:string*/, skip_root/*:?boolean*/)/*:any*/ {
 | 
			
		||||
 | 
			
		||||
@ -25,7 +25,7 @@ function write_double_le(b/*:RawBytes|CFBlob*/, v/*:number*/, idx/*:number*/) {
 | 
			
		||||
	b[idx + 7] = (e >> 4) | bs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var __toBuffer = function(bufs/*:Array<any>*/) { var x=[],w=10240; for(var i=0;i<bufs[0].length;++i) for(var j=0,L=bufs[0][i].length;j<L;j+=w) x.push.apply(x, bufs[0][i].slice(j,j+w)); return x; };
 | 
			
		||||
var __toBuffer = function(bufs/*:Array<Array<RawBytes> >*/)/*:RawBytes*/ { var x=[],w=10240; for(var i=0;i<bufs[0].length;++i) if(bufs[0][i]) for(var j=0,L=bufs[0][i].length;j<L;j+=w) x.push.apply(x, bufs[0][i].slice(j,j+w)); return x; };
 | 
			
		||||
var ___toBuffer = __toBuffer;
 | 
			
		||||
var __utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/)/*:string*/ { var ss/*:Array<string>*/=[]; for(var i=s; i<e; i+=2) ss.push(String.fromCharCode(__readUInt16LE(b,i))); return ss.join("").replace(chr0,''); };
 | 
			
		||||
var ___utf16le = __utf16le;
 | 
			
		||||
 | 
			
		||||
@ -22,7 +22,9 @@ function shift_range_xls(cell, range, opts) {
 | 
			
		||||
	return out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function encode_cell_xls(c/*:CellAddress*/)/*:string*/ {
 | 
			
		||||
function encode_cell_xls(c/*:CellAddress*/, biff/*:number*/)/*:string*/ {
 | 
			
		||||
	if(c.cRel && c.c < 0) { c = dup(c); c.c += (biff > 8) ? 0x4000 : 0x100; }
 | 
			
		||||
	if(c.rRel && c.r < 0) { c = dup(c); c.r += (biff > 8) ? 0x100000 : ((biff > 5) ? 0x10000 : 0x4000); }
 | 
			
		||||
	var s = encode_cell(c);
 | 
			
		||||
	if(c.cRel === 0) s = fix_col(s);
 | 
			
		||||
	if(c.rRel === 0) s = fix_row(s);
 | 
			
		||||
@ -31,7 +33,7 @@ function encode_cell_xls(c/*:CellAddress*/)/*:string*/ {
 | 
			
		||||
 | 
			
		||||
function encode_range_xls(r, opts)/*:string*/ {
 | 
			
		||||
	if(r.s.r == 0 && !r.s.rRel) {
 | 
			
		||||
		if(r.e.r == (opts.biff >= 12 ? 0xFFFFF : 0xFFFF) && !r.e.rRel) {
 | 
			
		||||
		if(r.e.r == (opts.biff >= 12 ? 0xFFFFF : (opts.biff >= 8 ? 0x10000 : 0x4000)) && !r.e.rRel) {
 | 
			
		||||
			return (r.s.cRel ? "" : "$") + encode_col(r.s.c) + ":" + (r.e.cRel ? "" : "$") + encode_col(r.e.c);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@ -40,5 +42,5 @@ function encode_range_xls(r, opts)/*:string*/ {
 | 
			
		||||
			return (r.s.rRel ? "" : "$") + encode_row(r.s.r) + ":" + (r.e.rRel ? "" : "$") + encode_row(r.e.r);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return encode_cell_xls(r.s) + ":" + encode_cell_xls(r.e);
 | 
			
		||||
	return encode_cell_xls(r.s, opts.biff) + ":" + encode_cell_xls(r.e, opts.biff);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -23,7 +23,7 @@ var VT_UI4      = 0x0013;
 | 
			
		||||
var VT_LPSTR    = 0x001E;
 | 
			
		||||
//var VT_LPWSTR   = 0x001F;
 | 
			
		||||
var VT_FILETIME = 0x0040;
 | 
			
		||||
//var VT_BLOB     = 0x0041;
 | 
			
		||||
var VT_BLOB     = 0x0041;
 | 
			
		||||
//var VT_STREAM   = 0x0042;
 | 
			
		||||
//var VT_STORAGE  = 0x0043;
 | 
			
		||||
//var VT_STREAMED_Object  = 0x0044;
 | 
			
		||||
@ -61,6 +61,7 @@ var DocSummaryPIDDSI = {
 | 
			
		||||
	/*::[*/0x13/*::]*/: { n: 'SharedDoc', t: VT_BOOL },
 | 
			
		||||
	/*::[*/0x16/*::]*/: { n: 'HLinksChanged', t: VT_BOOL },
 | 
			
		||||
	/*::[*/0x17/*::]*/: { n: 'AppVersion', t: VT_I4, p: 'version' },
 | 
			
		||||
	/*::[*/0x18/*::]*/: { n: 'DigSig', t: VT_BLOB },
 | 
			
		||||
	/*::[*/0x1A/*::]*/: { n: 'ContentType', t: VT_STRING },
 | 
			
		||||
	/*::[*/0x1B/*::]*/: { n: 'ContentStatus', t: VT_STRING },
 | 
			
		||||
	/*::[*/0x1C/*::]*/: { n: 'Language', t: VT_STRING },
 | 
			
		||||
 | 
			
		||||
@ -83,6 +83,7 @@ function parse_dictionary(blob,CodePage) {
 | 
			
		||||
function parse_BLOB(blob) {
 | 
			
		||||
	var size = blob.read_shift(4);
 | 
			
		||||
	var bytes = blob.slice(blob.l,blob.l+size);
 | 
			
		||||
	blob.l += size;
 | 
			
		||||
	if((size & 3) > 0) blob.l += (4 - (size & 3)) & 3;
 | 
			
		||||
	return bytes;
 | 
			
		||||
}
 | 
			
		||||
@ -93,7 +94,7 @@ function parse_ClipboardData(blob) {
 | 
			
		||||
	var o = {};
 | 
			
		||||
	o.Size = blob.read_shift(4);
 | 
			
		||||
	//o.Format = blob.read_shift(4);
 | 
			
		||||
	blob.l += o.Size;
 | 
			
		||||
	blob.l += o.Size + 3 - (o.Size - 1) % 4;
 | 
			
		||||
	return o;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -239,6 +240,7 @@ function parse_PropertySetStream(file, PIDSI, clsid) {
 | 
			
		||||
	rval.FMTID = FMTID0;
 | 
			
		||||
	//rval.PSet0 = PSet0;
 | 
			
		||||
	if(NumSets === 1) return rval;
 | 
			
		||||
	if(Offset1 - blob.l == 2) blob.l += 2;
 | 
			
		||||
	if(blob.l !== Offset1) throw new Error("Length mismatch 2: " + blob.l + " !== " + Offset1);
 | 
			
		||||
	var PSet1;
 | 
			
		||||
	try { PSet1 = parse_PropertySet(blob, null); } catch(e) {/* empty */}
 | 
			
		||||
 | 
			
		||||
@ -155,6 +155,9 @@ function parse_BOF(blob, length) {
 | 
			
		||||
	switch(o.BIFFVer) {
 | 
			
		||||
		case 0x0600: /* BIFF8 */
 | 
			
		||||
		case 0x0500: /* BIFF5 */
 | 
			
		||||
		case 0x0400: /* BIFF4 */
 | 
			
		||||
		case 0x0300: /* BIFF3 */
 | 
			
		||||
		case 0x0200: /* BIFF2 */
 | 
			
		||||
		case 0x0002: case 0x0007: /* BIFF2 */
 | 
			
		||||
			break;
 | 
			
		||||
		default: if(length > 6) throw new Error("Unexpected BIFF Ver " + o.BIFFVer);
 | 
			
		||||
 | 
			
		||||
@ -309,7 +309,7 @@ function parse_FilePassHeader(blob, length/*:number*/, oo) {
 | 
			
		||||
function parse_FilePass(blob, length/*:number*/, opts) {
 | 
			
		||||
	var o = ({ Type: opts.biff >= 8 ? blob.read_shift(2) : 0 }/*:any*/); /* wEncryptionType */
 | 
			
		||||
	if(o.Type) parse_FilePassHeader(blob, length-2, o);
 | 
			
		||||
	else parse_XORObfuscation(blob, length-2, opts, o);
 | 
			
		||||
	else parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);
 | 
			
		||||
	return o;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -27,8 +27,9 @@ function parse_RgceArea_BIFF2(blob/*::, length, opts*/) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */
 | 
			
		||||
function parse_RgceAreaRel(blob, length/*::, opts*/) {
 | 
			
		||||
	var r=blob.read_shift(length == 12 ? 4 : 2), R=blob.read_shift(length == 12 ? 4 : 2);
 | 
			
		||||
function parse_RgceAreaRel(blob, length, opts) {
 | 
			
		||||
	if(opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);
 | 
			
		||||
	var r=blob.read_shift(opts.biff == 12 ? 4 : 2), R=blob.read_shift(opts.biff == 12 ? 4 : 2);
 | 
			
		||||
	var c=parse_ColRelU(blob, 2);
 | 
			
		||||
	var C=parse_ColRelU(blob, 2);
 | 
			
		||||
	return { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };
 | 
			
		||||
@ -118,7 +119,7 @@ function parse_PtgAreaErr3d(blob, length, opts) {
 | 
			
		||||
/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */
 | 
			
		||||
function parse_PtgAreaN(blob, length, opts) {
 | 
			
		||||
	var type = (blob[blob.l++] & 0x60) >> 5;
 | 
			
		||||
	var area = parse_RgceAreaRel(blob, opts && opts.biff > 8 ? 12 : 8, opts);
 | 
			
		||||
	var area = parse_RgceAreaRel(blob, length - 1, opts);
 | 
			
		||||
	return [type, area];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -372,6 +373,7 @@ function parse_PtgMemFunc(blob, length, opts) {
 | 
			
		||||
function parse_PtgRefErr(blob, length, opts) {
 | 
			
		||||
	var type = (blob.read_shift(1) >>> 5) & 0x03;
 | 
			
		||||
	blob.l += 4;
 | 
			
		||||
	if(opts.biff < 8) blob.l--;
 | 
			
		||||
	if(opts.biff == 12) blob.l += 2;
 | 
			
		||||
	return [type];
 | 
			
		||||
}
 | 
			
		||||
@ -675,6 +677,7 @@ function get_ixti(supbooks, ixti/*:number*/, opts)/*:string*/ {
 | 
			
		||||
	return formula_quote_sheet_name(get_ixti_raw(supbooks, ixti, opts), opts);
 | 
			
		||||
}
 | 
			
		||||
function stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, supbooks, opts)/*:string*/ {
 | 
			
		||||
	var biff = (opts && opts.biff) || 8;
 | 
			
		||||
	var _range = /*range != null ? range :*/ {s:{c:0, r:0},e:{c:0, r:0}};
 | 
			
		||||
	var stack/*:Array<string>*/ = [], e1, e2, /*::type,*/ c/*:CellAddress*/, ixti=0, nameidx=0, r, sname="";
 | 
			
		||||
	if(!formula[0] || !formula[0][0]) return "";
 | 
			
		||||
@ -746,17 +749,17 @@ function stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, supbooks,
 | 
			
		||||
 | 
			
		||||
			case 'PtgRef': /* [MS-XLS] 2.5.198.84 */
 | 
			
		||||
				/*::type = f[1][0]; */c = shift_cell_xls((f[1][1]/*:any*/), _range, opts);
 | 
			
		||||
				stack.push(encode_cell_xls(c));
 | 
			
		||||
				stack.push(encode_cell_xls(c, biff));
 | 
			
		||||
				break;
 | 
			
		||||
			case 'PtgRefN': /* [MS-XLS] 2.5.198.88 */
 | 
			
		||||
				/*::type = f[1][0]; */c = cell ? shift_cell_xls((f[1][1]/*:any*/), cell, opts) : (f[1][1]/*:any*/);
 | 
			
		||||
				stack.push(encode_cell_xls(c));
 | 
			
		||||
				stack.push(encode_cell_xls(c, biff));
 | 
			
		||||
				break;
 | 
			
		||||
			case 'PtgRef3d': /* [MS-XLS] 2.5.198.85 */
 | 
			
		||||
				/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; c = shift_cell_xls((f[1][2]/*:any*/), _range, opts);
 | 
			
		||||
				sname = get_ixti(supbooks, ixti, opts);
 | 
			
		||||
				var w = sname; /* IE9 fails on defined names */ // eslint-disable-line no-unused-vars
 | 
			
		||||
				stack.push(sname + "!" + encode_cell_xls(c));
 | 
			
		||||
				stack.push(sname + "!" + encode_cell_xls(c, biff));
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			case 'PtgFunc': /* [MS-XLS] 2.5.198.62 */
 | 
			
		||||
@ -764,6 +767,7 @@ function stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, supbooks,
 | 
			
		||||
				/* f[1] = [argc, func, type] */
 | 
			
		||||
				var argc/*:number*/ = (f[1][0]/*:any*/), func/*:string*/ = (f[1][1]/*:any*/);
 | 
			
		||||
				if(!argc) argc = 0;
 | 
			
		||||
				argc &= 0x7F;
 | 
			
		||||
				var args = argc == 0 ? [] : stack.slice(-argc);
 | 
			
		||||
				stack.length -= argc;
 | 
			
		||||
				if(func === 'User') func = args.shift();
 | 
			
		||||
@ -798,6 +802,7 @@ function stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, supbooks,
 | 
			
		||||
				stack.push("SUM(" + stack.pop() + ")");
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			case 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 */
 | 
			
		||||
			case 'PtgAttrSemi': /* [MS-XLS] 2.5.198.37 */
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
@ -931,8 +936,6 @@ function stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, supbooks,
 | 
			
		||||
			case 'PtgElfRwV': /* [MS-XLS] 2.5.198.55 */
 | 
			
		||||
				throw new Error("Unsupported ELFs");
 | 
			
		||||
 | 
			
		||||
			case 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 TODO -- find a test case*/
 | 
			
		||||
				throw new Error('Unrecognized Formula Token: ' + String(f));
 | 
			
		||||
			case 'PtgSxName': /* [MS-XLS] 2.5.198.91 TODO -- find a test case */
 | 
			
		||||
				throw new Error('Unrecognized Formula Token: ' + String(f));
 | 
			
		||||
			case 'PtgList': /* [MS-XLSB] 2.5.97.52 TODO -- find a test case */
 | 
			
		||||
 | 
			
		||||
@ -3,7 +3,7 @@ function parse_numCache(data/*:string*/)/*:[Array<number>, string]*/ {
 | 
			
		||||
 | 
			
		||||
	/* 21.2.2.150 pt CT_NumVal */
 | 
			
		||||
	(data.match(/<c:pt idx="(\d*)">(.*?)<\/c:pt>/mg)||[]).forEach(function(pt) {
 | 
			
		||||
		var q = pt.match(/<c:pt idx="(.*?)"><c:v>(.*)<\/c:v><\/c:pt>/);
 | 
			
		||||
		var q = pt.match(/<c:pt idx="(\d*?)"><c:v>(.*)<\/c:v><\/c:pt>/);
 | 
			
		||||
		if(!q) return;
 | 
			
		||||
		col[+q[1]] = +q[2];
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
@ -168,7 +168,7 @@ function xlml_normalize(d)/*:string*/ {
 | 
			
		||||
 | 
			
		||||
/* TODO: Everything */
 | 
			
		||||
/* UOS uses CJK in tags */
 | 
			
		||||
var xlmlregex = /<(\/?)([^\s?>!\/:]*:|)([^\s?>]*[^\s?>\/])[^>]*>/mg;
 | 
			
		||||
var xlmlregex = /<(\/?)([^\s?>!\/:]*:|)([^\s?>:\/]+)[^>]*>/mg;
 | 
			
		||||
//var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
 | 
			
		||||
function parse_xlml_xml(d, _opts)/*:Workbook*/ {
 | 
			
		||||
	var opts = _opts || {};
 | 
			
		||||
 | 
			
		||||
@ -213,7 +213,7 @@ function parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {
 | 
			
		||||
			last_Rn = R.n;
 | 
			
		||||
			if(R.r === 2 || R.r == 12) {
 | 
			
		||||
				var rt = blob.read_shift(2); length -= 2;
 | 
			
		||||
				if(!opts.enc && rt !== RecordType) throw new Error("rt mismatch: " + rt + "!=" + RecordType);
 | 
			
		||||
				if(!opts.enc && rt !== RecordType && (((rt&0xFF)<<8)|(rt>>8)) !== RecordType) throw new Error("rt mismatch: " + rt + "!=" + RecordType);
 | 
			
		||||
				if(R.r == 12){ blob.l += 10; length -= 10; } // skip FRT
 | 
			
		||||
			}
 | 
			
		||||
			//console.error(R,blob.l,length,blob.length);
 | 
			
		||||
@ -232,7 +232,6 @@ function parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {
 | 
			
		||||
				case 'FilePass':
 | 
			
		||||
					if(!opts.enc) blob.l = 0;
 | 
			
		||||
					opts.enc = val;
 | 
			
		||||
					if(opts.WTF) console.error(val);
 | 
			
		||||
					if(!options.password) throw new Error("File is password-protected");
 | 
			
		||||
					if(val.valid == null) throw new Error("Encryption scheme unsupported");
 | 
			
		||||
					if(!val.valid) throw new Error("Password is incorrect");
 | 
			
		||||
@ -337,6 +336,9 @@ function parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {
 | 
			
		||||
						/*::[*/0x0209/*::]*/:3,
 | 
			
		||||
						/*::[*/0x0409/*::]*/:4
 | 
			
		||||
					}[RecordType] || {
 | 
			
		||||
						/*::[*/0x0200/*::]*/:2,
 | 
			
		||||
						/*::[*/0x0300/*::]*/:3,
 | 
			
		||||
						/*::[*/0x0400/*::]*/:4,
 | 
			
		||||
						/*::[*/0x0500/*::]*/:5,
 | 
			
		||||
						/*::[*/0x0600/*::]*/:8,
 | 
			
		||||
						/*::[*/0x0002/*::]*/:2,
 | 
			
		||||
@ -517,7 +519,7 @@ function parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {
 | 
			
		||||
					for(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)
 | 
			
		||||
						for(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {
 | 
			
		||||
							cc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];
 | 
			
		||||
							if(cc) cc.l.Tooltip = val[1];
 | 
			
		||||
							if(cc && cc.l) cc.l.Tooltip = val[1];
 | 
			
		||||
							}
 | 
			
		||||
				} break;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,23 +1,9 @@
 | 
			
		||||
.PHONY: angular
 | 
			
		||||
angular:
 | 
			
		||||
	# Test Angular2 build
 | 
			
		||||
	cp package.json-angular2 package.json
 | 
			
		||||
	rm -rf node_modules
 | 
			
		||||
	npm install
 | 
			
		||||
	if [ ! -e node_modules ]; then mkdir node_modules; fi
 | 
			
		||||
	if [ ! -e node_modules/xlsx ]; then cd node_modules; ln -s ../../../ xlsx; cd -; fi
 | 
			
		||||
	npm run build
 | 
			
		||||
.PHONY: all
 | 
			
		||||
all: angular5
 | 
			
		||||
 | 
			
		||||
	# Test Angular4 build
 | 
			
		||||
	cp package.json-angular4 package.json
 | 
			
		||||
	rm -rf node_modules
 | 
			
		||||
	npm install
 | 
			
		||||
	if [ ! -e node_modules ]; then mkdir node_modules; fi
 | 
			
		||||
	if [ ! -e node_modules/xlsx ]; then cd node_modules; ln -s ../../../ xlsx; cd -; fi
 | 
			
		||||
	npm run build
 | 
			
		||||
 | 
			
		||||
	# Test Angular5 build
 | 
			
		||||
	cp package.json-angular5 package.json
 | 
			
		||||
.PHONY: angular2 angular4 angular5
 | 
			
		||||
angular2 angular4 angular5:
 | 
			
		||||
	cp package.json-$@ package.json
 | 
			
		||||
	rm -rf node_modules
 | 
			
		||||
	npm install
 | 
			
		||||
	if [ ! -e node_modules ]; then mkdir node_modules; fi
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@ var basePath = thisFile.path;
 | 
			
		||||
var filename = "/sheetjs.xlsx";
 | 
			
		||||
 | 
			
		||||
/* Read file from disk */
 | 
			
		||||
var workbook = XLSX.readFile(basePath + filename);
 | 
			
		||||
var workbook = XLSX.readFile(basePath + filename, {cellDates:true});
 | 
			
		||||
 | 
			
		||||
/* Display first worksheet */
 | 
			
		||||
var first_sheet_name = workbook.SheetNames[0], first_worksheet = workbook.Sheets[first_sheet_name];
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@ var basePath = thisFile.path;
 | 
			
		||||
var filename = "/sheetjs.xlsx";
 | 
			
		||||
 | 
			
		||||
/* Read file from disk */
 | 
			
		||||
var workbook = XLSX.readFile(basePath + filename);
 | 
			
		||||
var workbook = XLSX.readFile(basePath + filename, {cellDates:true});
 | 
			
		||||
 | 
			
		||||
/* Display first worksheet */
 | 
			
		||||
var first_sheet_name = workbook.SheetNames[0], first_worksheet = workbook.Sheets[first_sheet_name];
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@ var basePath = thisFile.path;
 | 
			
		||||
var filename = "/sheetjs.xlsx";
 | 
			
		||||
 | 
			
		||||
/* Read file from disk */
 | 
			
		||||
var workbook = XLSX.readFile(basePath + filename);
 | 
			
		||||
var workbook = XLSX.readFile(basePath + filename, {cellDates:true});
 | 
			
		||||
 | 
			
		||||
/* Display first worksheet */
 | 
			
		||||
var first_sheet_name = workbook.SheetNames[0], first_worksheet = workbook.Sheets[first_sheet_name];
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@ var basePath = thisFile.path;
 | 
			
		||||
var filename = "/sheetjs.xlsx";
 | 
			
		||||
 | 
			
		||||
/* Read file from disk */
 | 
			
		||||
var workbook = XLSX.readFile(basePath + filename);
 | 
			
		||||
var workbook = XLSX.readFile(basePath + filename, {cellDates:true});
 | 
			
		||||
 | 
			
		||||
/* Display first worksheet */
 | 
			
		||||
var first_sheet_name = workbook.SheetNames[0], first_worksheet = workbook.Sheets[first_sheet_name];
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,7 @@ var basePath = thisFile.path;
 | 
			
		||||
var filename = "/sheetjs.xlsx";
 | 
			
		||||
 | 
			
		||||
/* Read file from disk */
 | 
			
		||||
var workbook = XLSX.readFile(basePath + filename);
 | 
			
		||||
var workbook = XLSX.readFile(basePath + filename, {cellDates:true});
 | 
			
		||||
 | 
			
		||||
/* Display first worksheet */
 | 
			
		||||
var first_sheet_name = workbook.SheetNames[0], first_worksheet = workbook.Sheets[first_sheet_name];
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@ var basePath = thisFile.path;
 | 
			
		||||
var filename = "/sheetjs.xlsx";
 | 
			
		||||
 | 
			
		||||
/* Read file from disk */
 | 
			
		||||
var workbook = XLSX.readFile(basePath + filename);
 | 
			
		||||
var workbook = XLSX.readFile(basePath + filename, {cellDates:true});
 | 
			
		||||
 | 
			
		||||
/* Display first worksheet */
 | 
			
		||||
var first_sheet_name = workbook.SheetNames[0], first_worksheet = workbook.Sheets[first_sheet_name];
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										26
									
								
								dist/xlsx.core.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										26
									
								
								dist/xlsx.core.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/xlsx.core.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/xlsx.core.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										64
									
								
								dist/xlsx.extendscript.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										64
									
								
								dist/xlsx.extendscript.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -9380,7 +9380,7 @@ module.exports = ZStream;
 | 
			
		||||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false */
 | 
			
		||||
var XLSX = {};
 | 
			
		||||
(function make_xlsx(XLSX){
 | 
			
		||||
XLSX.version = '0.12.1';
 | 
			
		||||
XLSX.version = '0.12.2';
 | 
			
		||||
var current_codepage = 1200, current_ansi = 1252;
 | 
			
		||||
/*global cptable:true */
 | 
			
		||||
if(typeof module !== "undefined" && typeof require !== 'undefined') {
 | 
			
		||||
@ -9541,7 +9541,7 @@ var chr0 = /\u0000/g, chr1 = /[\u0001-\u0006]/g;
 | 
			
		||||
/*jshint -W041 */
 | 
			
		||||
var SSF = ({});
 | 
			
		||||
var make_ssf = function make_ssf(SSF){
 | 
			
		||||
SSF.version = '0.10.0';
 | 
			
		||||
SSF.version = '0.10.2';
 | 
			
		||||
function _strrev(x) { var o = "", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }
 | 
			
		||||
function fill(c,l) { var o = ""; while(o.length < l) o+=c; return o; }
 | 
			
		||||
function pad0(v,d){var t=""+v; return t.length>=d?t:fill('0',d-t.length)+t;}
 | 
			
		||||
@ -10321,7 +10321,7 @@ out[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);
 | 
			
		||||
}
 | 
			
		||||
SSF._eval = eval_fmt;
 | 
			
		||||
var cfregex = /\[[=<>]/;
 | 
			
		||||
var cfregex2 = /\[([=<>]*)(-?\d+\.?\d*)\]/;
 | 
			
		||||
var cfregex2 = /\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;
 | 
			
		||||
function chkcond(v, rr) {
 | 
			
		||||
	if(rr == null) return false;
 | 
			
		||||
	var thresh = parseFloat(rr[2]);
 | 
			
		||||
@ -11468,7 +11468,7 @@ function resolve_path(path, base) {
 | 
			
		||||
}
 | 
			
		||||
var XML_HEADER = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r\n';
 | 
			
		||||
var attregexg=/([^"\s?>\/]+)\s*=\s*((?:")([^"]*)(?:")|(?:')([^']*)(?:')|([^'">\s]+))/g;
 | 
			
		||||
var tagregex=/<[\/\?]?[a-zA-Z0-9:]+(?:\s+[^"\s?>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s]+))*\s?[\/\?]?>/g;
 | 
			
		||||
var tagregex=/<[\/\?]?[a-zA-Z0-9:]+(?:\s+[^"\s?>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s=]+))*\s?[\/\?]?>/g;
 | 
			
		||||
if(!(XML_HEADER.match(tagregex))) tagregex = /<[^>]*>/g;
 | 
			
		||||
var nsregex=/<\w*:/, nsregex2 = /<(\/?)\w+:/;
 | 
			
		||||
function parsexmltag(tag, skip_root) {
 | 
			
		||||
@ -11744,13 +11744,14 @@ function write_double_le(b, v, idx) {
 | 
			
		||||
	b[idx + 7] = (e >> 4) | bs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var __toBuffer = function(bufs) { var x=[],w=10240; for(var i=0;i<bufs[0].length;++i) for(var j=0,L=bufs[0][i].length;j<L;j+=w) x.push.apply(x, bufs[0][i].slice(j,j+w)); return x; };
 | 
			
		||||
var __toBuffer = function(bufs) { var x=[],w=10240; for(var i=0;i<bufs[0].length;++i) if(bufs[0][i]) for(var j=0,L=bufs[0][i].length;j<L;j+=w) x.push.apply(x, bufs[0][i].slice(j,j+w)); return x; };
 | 
			
		||||
var ___toBuffer = __toBuffer;
 | 
			
		||||
var __utf16le = function(b,s,e) { var ss=[]; for(var i=s; i<e; i+=2) ss.push(String.fromCharCode(__readUInt16LE(b,i))); return ss.join("").replace(chr0,''); };
 | 
			
		||||
var ___utf16le = __utf16le;
 | 
			
		||||
var __hexlify = function(b,s,l) { var ss=[]; for(var i=s; i<s+l; ++i) ss.push(("0" + b[i].toString(16)).slice(-2)); return ss.join(""); };
 | 
			
		||||
var ___hexlify = __hexlify;
 | 
			
		||||
var __utf8 = function(b,s,e) { var ss=[]; for(var i=s; i<e; i++) ss.push(String.fromCharCode(__readUInt8(b,i))); return ss.join(""); };
 | 
			
		||||
var ___utf8 = __utf8;
 | 
			
		||||
var __lpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";};
 | 
			
		||||
var ___lpstr = __lpstr;
 | 
			
		||||
var __cpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";};
 | 
			
		||||
@ -11773,7 +11774,7 @@ if(has_buf) {
 | 
			
		||||
	__lpwstr = function lpwstr_b(b, i) { if(!Buffer.isBuffer(b)) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);};
 | 
			
		||||
	__lpp4 = function lpp4_b(b, i) { if(!Buffer.isBuffer(b)) return ___lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len);};
 | 
			
		||||
	__8lpp4 = function lpp4_8b(b, i) { if(!Buffer.isBuffer(b)) return ___8lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf8',i+4,i+4+len);};
 | 
			
		||||
	__utf8 = function utf8_b(b, s, e) { return (Buffer.isBuffer(b)) ? b.toString('utf8',s,e) : __utf8(b,s,e); };
 | 
			
		||||
	__utf8 = function utf8_b(b, s, e) { return (Buffer.isBuffer(b)) ? b.toString('utf8',s,e) : ___utf8(b,s,e); };
 | 
			
		||||
	__toBuffer = function(bufs) { return (bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0]) : ___toBuffer(bufs);};
 | 
			
		||||
	bconcat = function(bufs) { return Buffer.isBuffer(bufs[0]) ? Buffer.concat(bufs) : [].concat.apply([], bufs); };
 | 
			
		||||
	__double = function double_(b, i) { if(Buffer.isBuffer(b)) return b.readDoubleLE(i); return ___double(b,i); };
 | 
			
		||||
@ -12040,7 +12041,9 @@ function shift_range_xls(cell, range, opts) {
 | 
			
		||||
	return out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function encode_cell_xls(c) {
 | 
			
		||||
function encode_cell_xls(c, biff) {
 | 
			
		||||
	if(c.cRel && c.c < 0) { c = dup(c); c.c += (biff > 8) ? 0x4000 : 0x100; }
 | 
			
		||||
	if(c.rRel && c.r < 0) { c = dup(c); c.r += (biff > 8) ? 0x100000 : ((biff > 5) ? 0x10000 : 0x4000); }
 | 
			
		||||
	var s = encode_cell(c);
 | 
			
		||||
	if(c.cRel === 0) s = fix_col(s);
 | 
			
		||||
	if(c.rRel === 0) s = fix_row(s);
 | 
			
		||||
@ -12049,7 +12052,7 @@ function encode_cell_xls(c) {
 | 
			
		||||
 | 
			
		||||
function encode_range_xls(r, opts) {
 | 
			
		||||
	if(r.s.r == 0 && !r.s.rRel) {
 | 
			
		||||
		if(r.e.r == (opts.biff >= 12 ? 0xFFFFF : 0xFFFF) && !r.e.rRel) {
 | 
			
		||||
		if(r.e.r == (opts.biff >= 12 ? 0xFFFFF : (opts.biff >= 8 ? 0x10000 : 0x4000)) && !r.e.rRel) {
 | 
			
		||||
			return (r.s.cRel ? "" : "$") + encode_col(r.s.c) + ":" + (r.e.cRel ? "" : "$") + encode_col(r.e.c);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@ -12058,7 +12061,7 @@ function encode_range_xls(r, opts) {
 | 
			
		||||
			return (r.s.rRel ? "" : "$") + encode_row(r.s.r) + ":" + (r.e.rRel ? "" : "$") + encode_row(r.e.r);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return encode_cell_xls(r.s) + ":" + encode_cell_xls(r.e);
 | 
			
		||||
	return encode_cell_xls(r.s, opts.biff) + ":" + encode_cell_xls(r.e, opts.biff);
 | 
			
		||||
}
 | 
			
		||||
var OFFCRYPTO = {};
 | 
			
		||||
 | 
			
		||||
@ -12532,7 +12535,7 @@ var VT_UI4      = 0x0013;
 | 
			
		||||
var VT_LPSTR    = 0x001E;
 | 
			
		||||
//var VT_LPWSTR   = 0x001F;
 | 
			
		||||
var VT_FILETIME = 0x0040;
 | 
			
		||||
//var VT_BLOB     = 0x0041;
 | 
			
		||||
var VT_BLOB     = 0x0041;
 | 
			
		||||
//var VT_STREAM   = 0x0042;
 | 
			
		||||
//var VT_STORAGE  = 0x0043;
 | 
			
		||||
//var VT_STREAMED_Object  = 0x0044;
 | 
			
		||||
@ -12570,6 +12573,7 @@ var DocSummaryPIDDSI = {
 | 
			
		||||
0x13: { n: 'SharedDoc', t: VT_BOOL },
 | 
			
		||||
0x16: { n: 'HLinksChanged', t: VT_BOOL },
 | 
			
		||||
0x17: { n: 'AppVersion', t: VT_I4, p: 'version' },
 | 
			
		||||
0x18: { n: 'DigSig', t: VT_BLOB },
 | 
			
		||||
0x1A: { n: 'ContentType', t: VT_STRING },
 | 
			
		||||
0x1B: { n: 'ContentStatus', t: VT_STRING },
 | 
			
		||||
0x1C: { n: 'Language', t: VT_STRING },
 | 
			
		||||
@ -13641,6 +13645,7 @@ function parse_dictionary(blob,CodePage) {
 | 
			
		||||
function parse_BLOB(blob) {
 | 
			
		||||
	var size = blob.read_shift(4);
 | 
			
		||||
	var bytes = blob.slice(blob.l,blob.l+size);
 | 
			
		||||
	blob.l += size;
 | 
			
		||||
	if((size & 3) > 0) blob.l += (4 - (size & 3)) & 3;
 | 
			
		||||
	return bytes;
 | 
			
		||||
}
 | 
			
		||||
@ -13651,7 +13656,7 @@ function parse_ClipboardData(blob) {
 | 
			
		||||
	var o = {};
 | 
			
		||||
	o.Size = blob.read_shift(4);
 | 
			
		||||
	//o.Format = blob.read_shift(4);
 | 
			
		||||
	blob.l += o.Size;
 | 
			
		||||
	blob.l += o.Size + 3 - (o.Size - 1) % 4;
 | 
			
		||||
	return o;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -13797,6 +13802,7 @@ function parse_PropertySetStream(file, PIDSI, clsid) {
 | 
			
		||||
	rval.FMTID = FMTID0;
 | 
			
		||||
	//rval.PSet0 = PSet0;
 | 
			
		||||
	if(NumSets === 1) return rval;
 | 
			
		||||
	if(Offset1 - blob.l == 2) blob.l += 2;
 | 
			
		||||
	if(blob.l !== Offset1) throw new Error("Length mismatch 2: " + blob.l + " !== " + Offset1);
 | 
			
		||||
	var PSet1;
 | 
			
		||||
	try { PSet1 = parse_PropertySet(blob, null); } catch(e) {/* empty */}
 | 
			
		||||
@ -14189,6 +14195,9 @@ function parse_BOF(blob, length) {
 | 
			
		||||
	switch(o.BIFFVer) {
 | 
			
		||||
		case 0x0600: /* BIFF8 */
 | 
			
		||||
		case 0x0500: /* BIFF5 */
 | 
			
		||||
		case 0x0400: /* BIFF4 */
 | 
			
		||||
		case 0x0300: /* BIFF3 */
 | 
			
		||||
		case 0x0200: /* BIFF2 */
 | 
			
		||||
		case 0x0002: case 0x0007: /* BIFF2 */
 | 
			
		||||
			break;
 | 
			
		||||
		default: if(length > 6) throw new Error("Unexpected BIFF Ver " + o.BIFFVer);
 | 
			
		||||
@ -16862,7 +16871,7 @@ function parse_FilePassHeader(blob, length, oo) {
 | 
			
		||||
function parse_FilePass(blob, length, opts) {
 | 
			
		||||
	var o = ({ Type: opts.biff >= 8 ? blob.read_shift(2) : 0 }); /* wEncryptionType */
 | 
			
		||||
	if(o.Type) parse_FilePassHeader(blob, length-2, o);
 | 
			
		||||
	else parse_XORObfuscation(blob, length-2, opts, o);
 | 
			
		||||
	else parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);
 | 
			
		||||
	return o;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -18668,8 +18677,9 @@ function parse_RgceArea_BIFF2(blob) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */
 | 
			
		||||
function parse_RgceAreaRel(blob, length) {
 | 
			
		||||
	var r=blob.read_shift(length == 12 ? 4 : 2), R=blob.read_shift(length == 12 ? 4 : 2);
 | 
			
		||||
function parse_RgceAreaRel(blob, length, opts) {
 | 
			
		||||
	if(opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);
 | 
			
		||||
	var r=blob.read_shift(opts.biff == 12 ? 4 : 2), R=blob.read_shift(opts.biff == 12 ? 4 : 2);
 | 
			
		||||
	var c=parse_ColRelU(blob, 2);
 | 
			
		||||
	var C=parse_ColRelU(blob, 2);
 | 
			
		||||
	return { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };
 | 
			
		||||
@ -18759,7 +18769,7 @@ function parse_PtgAreaErr3d(blob, length, opts) {
 | 
			
		||||
/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */
 | 
			
		||||
function parse_PtgAreaN(blob, length, opts) {
 | 
			
		||||
	var type = (blob[blob.l++] & 0x60) >> 5;
 | 
			
		||||
	var area = parse_RgceAreaRel(blob, opts && opts.biff > 8 ? 12 : 8, opts);
 | 
			
		||||
	var area = parse_RgceAreaRel(blob, length - 1, opts);
 | 
			
		||||
	return [type, area];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -19013,6 +19023,7 @@ function parse_PtgMemFunc(blob, length, opts) {
 | 
			
		||||
function parse_PtgRefErr(blob, length, opts) {
 | 
			
		||||
	var type = (blob.read_shift(1) >>> 5) & 0x03;
 | 
			
		||||
	blob.l += 4;
 | 
			
		||||
	if(opts.biff < 8) blob.l--;
 | 
			
		||||
	if(opts.biff == 12) blob.l += 2;
 | 
			
		||||
	return [type];
 | 
			
		||||
}
 | 
			
		||||
@ -19315,6 +19326,7 @@ function get_ixti(supbooks, ixti, opts) {
 | 
			
		||||
	return formula_quote_sheet_name(get_ixti_raw(supbooks, ixti, opts), opts);
 | 
			
		||||
}
 | 
			
		||||
function stringify_formula(formula/*Array<any>*/, range, cell, supbooks, opts) {
 | 
			
		||||
	var biff = (opts && opts.biff) || 8;
 | 
			
		||||
	var _range = /*range != null ? range :*/ {s:{c:0, r:0},e:{c:0, r:0}};
 | 
			
		||||
	var stack = [], e1, e2,  c, ixti=0, nameidx=0, r, sname="";
 | 
			
		||||
	if(!formula[0] || !formula[0][0]) return "";
 | 
			
		||||
@ -19386,17 +19398,17 @@ function stringify_formula(formula/*Array<any>*/, range, cell, supbooks, opts) {
 | 
			
		||||
 | 
			
		||||
			case 'PtgRef': /* [MS-XLS] 2.5.198.84 */
 | 
			
		||||
c = shift_cell_xls((f[1][1]), _range, opts);
 | 
			
		||||
				stack.push(encode_cell_xls(c));
 | 
			
		||||
				stack.push(encode_cell_xls(c, biff));
 | 
			
		||||
				break;
 | 
			
		||||
			case 'PtgRefN': /* [MS-XLS] 2.5.198.88 */
 | 
			
		||||
c = cell ? shift_cell_xls((f[1][1]), cell, opts) : (f[1][1]);
 | 
			
		||||
				stack.push(encode_cell_xls(c));
 | 
			
		||||
				stack.push(encode_cell_xls(c, biff));
 | 
			
		||||
				break;
 | 
			
		||||
			case 'PtgRef3d': /* [MS-XLS] 2.5.198.85 */
 | 
			
		||||
ixti = f[1][1]; c = shift_cell_xls((f[1][2]), _range, opts);
 | 
			
		||||
				sname = get_ixti(supbooks, ixti, opts);
 | 
			
		||||
				var w = sname; /* IE9 fails on defined names */ // eslint-disable-line no-unused-vars
 | 
			
		||||
				stack.push(sname + "!" + encode_cell_xls(c));
 | 
			
		||||
				stack.push(sname + "!" + encode_cell_xls(c, biff));
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			case 'PtgFunc': /* [MS-XLS] 2.5.198.62 */
 | 
			
		||||
@ -19404,6 +19416,7 @@ ixti = f[1][1]; c = shift_cell_xls((f[1][2]), _range, opts);
 | 
			
		||||
				/* f[1] = [argc, func, type] */
 | 
			
		||||
				var argc = (f[1][0]), func = (f[1][1]);
 | 
			
		||||
				if(!argc) argc = 0;
 | 
			
		||||
				argc &= 0x7F;
 | 
			
		||||
				var args = argc == 0 ? [] : stack.slice(-argc);
 | 
			
		||||
				stack.length -= argc;
 | 
			
		||||
				if(func === 'User') func = args.shift();
 | 
			
		||||
@ -19438,6 +19451,7 @@ ixti = f[1][1]; r = f[1][2];
 | 
			
		||||
				stack.push("SUM(" + stack.pop() + ")");
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			case 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 */
 | 
			
		||||
			case 'PtgAttrSemi': /* [MS-XLS] 2.5.198.37 */
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
@ -19571,8 +19585,6 @@ ixti = f[1][1]; r = f[1][2];
 | 
			
		||||
			case 'PtgElfRwV': /* [MS-XLS] 2.5.198.55 */
 | 
			
		||||
				throw new Error("Unsupported ELFs");
 | 
			
		||||
 | 
			
		||||
			case 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 TODO -- find a test case*/
 | 
			
		||||
				throw new Error('Unrecognized Formula Token: ' + String(f));
 | 
			
		||||
			case 'PtgSxName': /* [MS-XLS] 2.5.198.91 TODO -- find a test case */
 | 
			
		||||
				throw new Error('Unrecognized Formula Token: ' + String(f));
 | 
			
		||||
			case 'PtgList': /* [MS-XLSB] 2.5.97.52 TODO -- find a test case */
 | 
			
		||||
@ -22529,7 +22541,7 @@ function parse_numCache(data) {
 | 
			
		||||
 | 
			
		||||
	/* 21.2.2.150 pt CT_NumVal */
 | 
			
		||||
	(data.match(/<c:pt idx="(\d*)">(.*?)<\/c:pt>/mg)||[]).forEach(function(pt) {
 | 
			
		||||
		var q = pt.match(/<c:pt idx="(.*?)"><c:v>(.*)<\/c:v><\/c:pt>/);
 | 
			
		||||
		var q = pt.match(/<c:pt idx="(\d*?)"><c:v>(.*)<\/c:v><\/c:pt>/);
 | 
			
		||||
		if(!q) return;
 | 
			
		||||
		col[+q[1]] = +q[2];
 | 
			
		||||
	});
 | 
			
		||||
@ -23583,7 +23595,7 @@ function xlml_normalize(d) {
 | 
			
		||||
 | 
			
		||||
/* TODO: Everything */
 | 
			
		||||
/* UOS uses CJK in tags */
 | 
			
		||||
var xlmlregex = /<(\/?)([^\s?>!\/:]*:|)([^\s?>]*[^\s?>\/])[^>]*>/mg;
 | 
			
		||||
var xlmlregex = /<(\/?)([^\s?>!\/:]*:|)([^\s?>:\/]+)[^>]*>/mg;
 | 
			
		||||
//var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
 | 
			
		||||
function parse_xlml_xml(d, _opts) {
 | 
			
		||||
	var opts = _opts || {};
 | 
			
		||||
@ -24772,7 +24784,7 @@ function parse_workbook(blob, options) {
 | 
			
		||||
			last_Rn = R.n;
 | 
			
		||||
			if(R.r === 2 || R.r == 12) {
 | 
			
		||||
				var rt = blob.read_shift(2); length -= 2;
 | 
			
		||||
				if(!opts.enc && rt !== RecordType) throw new Error("rt mismatch: " + rt + "!=" + RecordType);
 | 
			
		||||
				if(!opts.enc && rt !== RecordType && (((rt&0xFF)<<8)|(rt>>8)) !== RecordType) throw new Error("rt mismatch: " + rt + "!=" + RecordType);
 | 
			
		||||
				if(R.r == 12){ blob.l += 10; length -= 10; } // skip FRT
 | 
			
		||||
			}
 | 
			
		||||
			//console.error(R,blob.l,length,blob.length);
 | 
			
		||||
@ -24790,7 +24802,6 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;
 | 
			
		||||
				case 'FilePass':
 | 
			
		||||
					if(!opts.enc) blob.l = 0;
 | 
			
		||||
					opts.enc = val;
 | 
			
		||||
					if(opts.WTF) console.error(val);
 | 
			
		||||
					if(!options.password) throw new Error("File is password-protected");
 | 
			
		||||
					if(val.valid == null) throw new Error("Encryption scheme unsupported");
 | 
			
		||||
					if(!val.valid) throw new Error("Password is incorrect");
 | 
			
		||||
@ -24895,6 +24906,9 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;
 | 
			
		||||
0x0209:3,
 | 
			
		||||
0x0409:4
 | 
			
		||||
					}[RecordType] || {
 | 
			
		||||
0x0200:2,
 | 
			
		||||
0x0300:3,
 | 
			
		||||
0x0400:4,
 | 
			
		||||
0x0500:5,
 | 
			
		||||
0x0600:8,
 | 
			
		||||
0x0002:2,
 | 
			
		||||
@ -25075,7 +25089,7 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;
 | 
			
		||||
					for(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)
 | 
			
		||||
						for(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {
 | 
			
		||||
							cc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];
 | 
			
		||||
							if(cc) cc.l.Tooltip = val[1];
 | 
			
		||||
							if(cc && cc.l) cc.l.Tooltip = val[1];
 | 
			
		||||
							}
 | 
			
		||||
				} break;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										30
									
								
								dist/xlsx.full.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										30
									
								
								dist/xlsx.full.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/xlsx.full.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/xlsx.full.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										64
									
								
								dist/xlsx.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										64
									
								
								dist/xlsx.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -4,7 +4,7 @@
 | 
			
		||||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false */
 | 
			
		||||
var XLSX = {};
 | 
			
		||||
(function make_xlsx(XLSX){
 | 
			
		||||
XLSX.version = '0.12.1';
 | 
			
		||||
XLSX.version = '0.12.2';
 | 
			
		||||
var current_codepage = 1200, current_ansi = 1252;
 | 
			
		||||
/*global cptable:true */
 | 
			
		||||
if(typeof module !== "undefined" && typeof require !== 'undefined') {
 | 
			
		||||
@ -165,7 +165,7 @@ var chr0 = /\u0000/g, chr1 = /[\u0001-\u0006]/g;
 | 
			
		||||
/*jshint -W041 */
 | 
			
		||||
var SSF = ({});
 | 
			
		||||
var make_ssf = function make_ssf(SSF){
 | 
			
		||||
SSF.version = '0.10.0';
 | 
			
		||||
SSF.version = '0.10.2';
 | 
			
		||||
function _strrev(x) { var o = "", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }
 | 
			
		||||
function fill(c,l) { var o = ""; while(o.length < l) o+=c; return o; }
 | 
			
		||||
function pad0(v,d){var t=""+v; return t.length>=d?t:fill('0',d-t.length)+t;}
 | 
			
		||||
@ -945,7 +945,7 @@ out[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);
 | 
			
		||||
}
 | 
			
		||||
SSF._eval = eval_fmt;
 | 
			
		||||
var cfregex = /\[[=<>]/;
 | 
			
		||||
var cfregex2 = /\[([=<>]*)(-?\d+\.?\d*)\]/;
 | 
			
		||||
var cfregex2 = /\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;
 | 
			
		||||
function chkcond(v, rr) {
 | 
			
		||||
	if(rr == null) return false;
 | 
			
		||||
	var thresh = parseFloat(rr[2]);
 | 
			
		||||
@ -2092,7 +2092,7 @@ function resolve_path(path, base) {
 | 
			
		||||
}
 | 
			
		||||
var XML_HEADER = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r\n';
 | 
			
		||||
var attregexg=/([^"\s?>\/]+)\s*=\s*((?:")([^"]*)(?:")|(?:')([^']*)(?:')|([^'">\s]+))/g;
 | 
			
		||||
var tagregex=/<[\/\?]?[a-zA-Z0-9:]+(?:\s+[^"\s?>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s]+))*\s?[\/\?]?>/g;
 | 
			
		||||
var tagregex=/<[\/\?]?[a-zA-Z0-9:]+(?:\s+[^"\s?>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s=]+))*\s?[\/\?]?>/g;
 | 
			
		||||
if(!(XML_HEADER.match(tagregex))) tagregex = /<[^>]*>/g;
 | 
			
		||||
var nsregex=/<\w*:/, nsregex2 = /<(\/?)\w+:/;
 | 
			
		||||
function parsexmltag(tag, skip_root) {
 | 
			
		||||
@ -2368,13 +2368,14 @@ function write_double_le(b, v, idx) {
 | 
			
		||||
	b[idx + 7] = (e >> 4) | bs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var __toBuffer = function(bufs) { var x=[],w=10240; for(var i=0;i<bufs[0].length;++i) for(var j=0,L=bufs[0][i].length;j<L;j+=w) x.push.apply(x, bufs[0][i].slice(j,j+w)); return x; };
 | 
			
		||||
var __toBuffer = function(bufs) { var x=[],w=10240; for(var i=0;i<bufs[0].length;++i) if(bufs[0][i]) for(var j=0,L=bufs[0][i].length;j<L;j+=w) x.push.apply(x, bufs[0][i].slice(j,j+w)); return x; };
 | 
			
		||||
var ___toBuffer = __toBuffer;
 | 
			
		||||
var __utf16le = function(b,s,e) { var ss=[]; for(var i=s; i<e; i+=2) ss.push(String.fromCharCode(__readUInt16LE(b,i))); return ss.join("").replace(chr0,''); };
 | 
			
		||||
var ___utf16le = __utf16le;
 | 
			
		||||
var __hexlify = function(b,s,l) { var ss=[]; for(var i=s; i<s+l; ++i) ss.push(("0" + b[i].toString(16)).slice(-2)); return ss.join(""); };
 | 
			
		||||
var ___hexlify = __hexlify;
 | 
			
		||||
var __utf8 = function(b,s,e) { var ss=[]; for(var i=s; i<e; i++) ss.push(String.fromCharCode(__readUInt8(b,i))); return ss.join(""); };
 | 
			
		||||
var ___utf8 = __utf8;
 | 
			
		||||
var __lpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";};
 | 
			
		||||
var ___lpstr = __lpstr;
 | 
			
		||||
var __cpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";};
 | 
			
		||||
@ -2397,7 +2398,7 @@ if(has_buf) {
 | 
			
		||||
	__lpwstr = function lpwstr_b(b, i) { if(!Buffer.isBuffer(b)) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);};
 | 
			
		||||
	__lpp4 = function lpp4_b(b, i) { if(!Buffer.isBuffer(b)) return ___lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len);};
 | 
			
		||||
	__8lpp4 = function lpp4_8b(b, i) { if(!Buffer.isBuffer(b)) return ___8lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf8',i+4,i+4+len);};
 | 
			
		||||
	__utf8 = function utf8_b(b, s, e) { return (Buffer.isBuffer(b)) ? b.toString('utf8',s,e) : __utf8(b,s,e); };
 | 
			
		||||
	__utf8 = function utf8_b(b, s, e) { return (Buffer.isBuffer(b)) ? b.toString('utf8',s,e) : ___utf8(b,s,e); };
 | 
			
		||||
	__toBuffer = function(bufs) { return (bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0]) : ___toBuffer(bufs);};
 | 
			
		||||
	bconcat = function(bufs) { return Buffer.isBuffer(bufs[0]) ? Buffer.concat(bufs) : [].concat.apply([], bufs); };
 | 
			
		||||
	__double = function double_(b, i) { if(Buffer.isBuffer(b)) return b.readDoubleLE(i); return ___double(b,i); };
 | 
			
		||||
@ -2664,7 +2665,9 @@ function shift_range_xls(cell, range, opts) {
 | 
			
		||||
	return out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function encode_cell_xls(c) {
 | 
			
		||||
function encode_cell_xls(c, biff) {
 | 
			
		||||
	if(c.cRel && c.c < 0) { c = dup(c); c.c += (biff > 8) ? 0x4000 : 0x100; }
 | 
			
		||||
	if(c.rRel && c.r < 0) { c = dup(c); c.r += (biff > 8) ? 0x100000 : ((biff > 5) ? 0x10000 : 0x4000); }
 | 
			
		||||
	var s = encode_cell(c);
 | 
			
		||||
	if(c.cRel === 0) s = fix_col(s);
 | 
			
		||||
	if(c.rRel === 0) s = fix_row(s);
 | 
			
		||||
@ -2673,7 +2676,7 @@ function encode_cell_xls(c) {
 | 
			
		||||
 | 
			
		||||
function encode_range_xls(r, opts) {
 | 
			
		||||
	if(r.s.r == 0 && !r.s.rRel) {
 | 
			
		||||
		if(r.e.r == (opts.biff >= 12 ? 0xFFFFF : 0xFFFF) && !r.e.rRel) {
 | 
			
		||||
		if(r.e.r == (opts.biff >= 12 ? 0xFFFFF : (opts.biff >= 8 ? 0x10000 : 0x4000)) && !r.e.rRel) {
 | 
			
		||||
			return (r.s.cRel ? "" : "$") + encode_col(r.s.c) + ":" + (r.e.cRel ? "" : "$") + encode_col(r.e.c);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@ -2682,7 +2685,7 @@ function encode_range_xls(r, opts) {
 | 
			
		||||
			return (r.s.rRel ? "" : "$") + encode_row(r.s.r) + ":" + (r.e.rRel ? "" : "$") + encode_row(r.e.r);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return encode_cell_xls(r.s) + ":" + encode_cell_xls(r.e);
 | 
			
		||||
	return encode_cell_xls(r.s, opts.biff) + ":" + encode_cell_xls(r.e, opts.biff);
 | 
			
		||||
}
 | 
			
		||||
var OFFCRYPTO = {};
 | 
			
		||||
 | 
			
		||||
@ -3156,7 +3159,7 @@ var VT_UI4      = 0x0013;
 | 
			
		||||
var VT_LPSTR    = 0x001E;
 | 
			
		||||
//var VT_LPWSTR   = 0x001F;
 | 
			
		||||
var VT_FILETIME = 0x0040;
 | 
			
		||||
//var VT_BLOB     = 0x0041;
 | 
			
		||||
var VT_BLOB     = 0x0041;
 | 
			
		||||
//var VT_STREAM   = 0x0042;
 | 
			
		||||
//var VT_STORAGE  = 0x0043;
 | 
			
		||||
//var VT_STREAMED_Object  = 0x0044;
 | 
			
		||||
@ -3194,6 +3197,7 @@ var DocSummaryPIDDSI = {
 | 
			
		||||
0x13: { n: 'SharedDoc', t: VT_BOOL },
 | 
			
		||||
0x16: { n: 'HLinksChanged', t: VT_BOOL },
 | 
			
		||||
0x17: { n: 'AppVersion', t: VT_I4, p: 'version' },
 | 
			
		||||
0x18: { n: 'DigSig', t: VT_BLOB },
 | 
			
		||||
0x1A: { n: 'ContentType', t: VT_STRING },
 | 
			
		||||
0x1B: { n: 'ContentStatus', t: VT_STRING },
 | 
			
		||||
0x1C: { n: 'Language', t: VT_STRING },
 | 
			
		||||
@ -4265,6 +4269,7 @@ function parse_dictionary(blob,CodePage) {
 | 
			
		||||
function parse_BLOB(blob) {
 | 
			
		||||
	var size = blob.read_shift(4);
 | 
			
		||||
	var bytes = blob.slice(blob.l,blob.l+size);
 | 
			
		||||
	blob.l += size;
 | 
			
		||||
	if((size & 3) > 0) blob.l += (4 - (size & 3)) & 3;
 | 
			
		||||
	return bytes;
 | 
			
		||||
}
 | 
			
		||||
@ -4275,7 +4280,7 @@ function parse_ClipboardData(blob) {
 | 
			
		||||
	var o = {};
 | 
			
		||||
	o.Size = blob.read_shift(4);
 | 
			
		||||
	//o.Format = blob.read_shift(4);
 | 
			
		||||
	blob.l += o.Size;
 | 
			
		||||
	blob.l += o.Size + 3 - (o.Size - 1) % 4;
 | 
			
		||||
	return o;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -4421,6 +4426,7 @@ function parse_PropertySetStream(file, PIDSI, clsid) {
 | 
			
		||||
	rval.FMTID = FMTID0;
 | 
			
		||||
	//rval.PSet0 = PSet0;
 | 
			
		||||
	if(NumSets === 1) return rval;
 | 
			
		||||
	if(Offset1 - blob.l == 2) blob.l += 2;
 | 
			
		||||
	if(blob.l !== Offset1) throw new Error("Length mismatch 2: " + blob.l + " !== " + Offset1);
 | 
			
		||||
	var PSet1;
 | 
			
		||||
	try { PSet1 = parse_PropertySet(blob, null); } catch(e) {/* empty */}
 | 
			
		||||
@ -4813,6 +4819,9 @@ function parse_BOF(blob, length) {
 | 
			
		||||
	switch(o.BIFFVer) {
 | 
			
		||||
		case 0x0600: /* BIFF8 */
 | 
			
		||||
		case 0x0500: /* BIFF5 */
 | 
			
		||||
		case 0x0400: /* BIFF4 */
 | 
			
		||||
		case 0x0300: /* BIFF3 */
 | 
			
		||||
		case 0x0200: /* BIFF2 */
 | 
			
		||||
		case 0x0002: case 0x0007: /* BIFF2 */
 | 
			
		||||
			break;
 | 
			
		||||
		default: if(length > 6) throw new Error("Unexpected BIFF Ver " + o.BIFFVer);
 | 
			
		||||
@ -7486,7 +7495,7 @@ function parse_FilePassHeader(blob, length, oo) {
 | 
			
		||||
function parse_FilePass(blob, length, opts) {
 | 
			
		||||
	var o = ({ Type: opts.biff >= 8 ? blob.read_shift(2) : 0 }); /* wEncryptionType */
 | 
			
		||||
	if(o.Type) parse_FilePassHeader(blob, length-2, o);
 | 
			
		||||
	else parse_XORObfuscation(blob, length-2, opts, o);
 | 
			
		||||
	else parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);
 | 
			
		||||
	return o;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -9292,8 +9301,9 @@ function parse_RgceArea_BIFF2(blob) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */
 | 
			
		||||
function parse_RgceAreaRel(blob, length) {
 | 
			
		||||
	var r=blob.read_shift(length == 12 ? 4 : 2), R=blob.read_shift(length == 12 ? 4 : 2);
 | 
			
		||||
function parse_RgceAreaRel(blob, length, opts) {
 | 
			
		||||
	if(opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);
 | 
			
		||||
	var r=blob.read_shift(opts.biff == 12 ? 4 : 2), R=blob.read_shift(opts.biff == 12 ? 4 : 2);
 | 
			
		||||
	var c=parse_ColRelU(blob, 2);
 | 
			
		||||
	var C=parse_ColRelU(blob, 2);
 | 
			
		||||
	return { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };
 | 
			
		||||
@ -9383,7 +9393,7 @@ function parse_PtgAreaErr3d(blob, length, opts) {
 | 
			
		||||
/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */
 | 
			
		||||
function parse_PtgAreaN(blob, length, opts) {
 | 
			
		||||
	var type = (blob[blob.l++] & 0x60) >> 5;
 | 
			
		||||
	var area = parse_RgceAreaRel(blob, opts && opts.biff > 8 ? 12 : 8, opts);
 | 
			
		||||
	var area = parse_RgceAreaRel(blob, length - 1, opts);
 | 
			
		||||
	return [type, area];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -9637,6 +9647,7 @@ function parse_PtgMemFunc(blob, length, opts) {
 | 
			
		||||
function parse_PtgRefErr(blob, length, opts) {
 | 
			
		||||
	var type = (blob.read_shift(1) >>> 5) & 0x03;
 | 
			
		||||
	blob.l += 4;
 | 
			
		||||
	if(opts.biff < 8) blob.l--;
 | 
			
		||||
	if(opts.biff == 12) blob.l += 2;
 | 
			
		||||
	return [type];
 | 
			
		||||
}
 | 
			
		||||
@ -9939,6 +9950,7 @@ function get_ixti(supbooks, ixti, opts) {
 | 
			
		||||
	return formula_quote_sheet_name(get_ixti_raw(supbooks, ixti, opts), opts);
 | 
			
		||||
}
 | 
			
		||||
function stringify_formula(formula/*Array<any>*/, range, cell, supbooks, opts) {
 | 
			
		||||
	var biff = (opts && opts.biff) || 8;
 | 
			
		||||
	var _range = /*range != null ? range :*/ {s:{c:0, r:0},e:{c:0, r:0}};
 | 
			
		||||
	var stack = [], e1, e2,  c, ixti=0, nameidx=0, r, sname="";
 | 
			
		||||
	if(!formula[0] || !formula[0][0]) return "";
 | 
			
		||||
@ -10010,17 +10022,17 @@ function stringify_formula(formula/*Array<any>*/, range, cell, supbooks, opts) {
 | 
			
		||||
 | 
			
		||||
			case 'PtgRef': /* [MS-XLS] 2.5.198.84 */
 | 
			
		||||
c = shift_cell_xls((f[1][1]), _range, opts);
 | 
			
		||||
				stack.push(encode_cell_xls(c));
 | 
			
		||||
				stack.push(encode_cell_xls(c, biff));
 | 
			
		||||
				break;
 | 
			
		||||
			case 'PtgRefN': /* [MS-XLS] 2.5.198.88 */
 | 
			
		||||
c = cell ? shift_cell_xls((f[1][1]), cell, opts) : (f[1][1]);
 | 
			
		||||
				stack.push(encode_cell_xls(c));
 | 
			
		||||
				stack.push(encode_cell_xls(c, biff));
 | 
			
		||||
				break;
 | 
			
		||||
			case 'PtgRef3d': /* [MS-XLS] 2.5.198.85 */
 | 
			
		||||
ixti = f[1][1]; c = shift_cell_xls((f[1][2]), _range, opts);
 | 
			
		||||
				sname = get_ixti(supbooks, ixti, opts);
 | 
			
		||||
				var w = sname; /* IE9 fails on defined names */ // eslint-disable-line no-unused-vars
 | 
			
		||||
				stack.push(sname + "!" + encode_cell_xls(c));
 | 
			
		||||
				stack.push(sname + "!" + encode_cell_xls(c, biff));
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			case 'PtgFunc': /* [MS-XLS] 2.5.198.62 */
 | 
			
		||||
@ -10028,6 +10040,7 @@ ixti = f[1][1]; c = shift_cell_xls((f[1][2]), _range, opts);
 | 
			
		||||
				/* f[1] = [argc, func, type] */
 | 
			
		||||
				var argc = (f[1][0]), func = (f[1][1]);
 | 
			
		||||
				if(!argc) argc = 0;
 | 
			
		||||
				argc &= 0x7F;
 | 
			
		||||
				var args = argc == 0 ? [] : stack.slice(-argc);
 | 
			
		||||
				stack.length -= argc;
 | 
			
		||||
				if(func === 'User') func = args.shift();
 | 
			
		||||
@ -10062,6 +10075,7 @@ ixti = f[1][1]; r = f[1][2];
 | 
			
		||||
				stack.push("SUM(" + stack.pop() + ")");
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			case 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 */
 | 
			
		||||
			case 'PtgAttrSemi': /* [MS-XLS] 2.5.198.37 */
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
@ -10195,8 +10209,6 @@ ixti = f[1][1]; r = f[1][2];
 | 
			
		||||
			case 'PtgElfRwV': /* [MS-XLS] 2.5.198.55 */
 | 
			
		||||
				throw new Error("Unsupported ELFs");
 | 
			
		||||
 | 
			
		||||
			case 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 TODO -- find a test case*/
 | 
			
		||||
				throw new Error('Unrecognized Formula Token: ' + String(f));
 | 
			
		||||
			case 'PtgSxName': /* [MS-XLS] 2.5.198.91 TODO -- find a test case */
 | 
			
		||||
				throw new Error('Unrecognized Formula Token: ' + String(f));
 | 
			
		||||
			case 'PtgList': /* [MS-XLSB] 2.5.97.52 TODO -- find a test case */
 | 
			
		||||
@ -13153,7 +13165,7 @@ function parse_numCache(data) {
 | 
			
		||||
 | 
			
		||||
	/* 21.2.2.150 pt CT_NumVal */
 | 
			
		||||
	(data.match(/<c:pt idx="(\d*)">(.*?)<\/c:pt>/mg)||[]).forEach(function(pt) {
 | 
			
		||||
		var q = pt.match(/<c:pt idx="(.*?)"><c:v>(.*)<\/c:v><\/c:pt>/);
 | 
			
		||||
		var q = pt.match(/<c:pt idx="(\d*?)"><c:v>(.*)<\/c:v><\/c:pt>/);
 | 
			
		||||
		if(!q) return;
 | 
			
		||||
		col[+q[1]] = +q[2];
 | 
			
		||||
	});
 | 
			
		||||
@ -14207,7 +14219,7 @@ function xlml_normalize(d) {
 | 
			
		||||
 | 
			
		||||
/* TODO: Everything */
 | 
			
		||||
/* UOS uses CJK in tags */
 | 
			
		||||
var xlmlregex = /<(\/?)([^\s?>!\/:]*:|)([^\s?>]*[^\s?>\/])[^>]*>/mg;
 | 
			
		||||
var xlmlregex = /<(\/?)([^\s?>!\/:]*:|)([^\s?>:\/]+)[^>]*>/mg;
 | 
			
		||||
//var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
 | 
			
		||||
function parse_xlml_xml(d, _opts) {
 | 
			
		||||
	var opts = _opts || {};
 | 
			
		||||
@ -15396,7 +15408,7 @@ function parse_workbook(blob, options) {
 | 
			
		||||
			last_Rn = R.n;
 | 
			
		||||
			if(R.r === 2 || R.r == 12) {
 | 
			
		||||
				var rt = blob.read_shift(2); length -= 2;
 | 
			
		||||
				if(!opts.enc && rt !== RecordType) throw new Error("rt mismatch: " + rt + "!=" + RecordType);
 | 
			
		||||
				if(!opts.enc && rt !== RecordType && (((rt&0xFF)<<8)|(rt>>8)) !== RecordType) throw new Error("rt mismatch: " + rt + "!=" + RecordType);
 | 
			
		||||
				if(R.r == 12){ blob.l += 10; length -= 10; } // skip FRT
 | 
			
		||||
			}
 | 
			
		||||
			//console.error(R,blob.l,length,blob.length);
 | 
			
		||||
@ -15414,7 +15426,6 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;
 | 
			
		||||
				case 'FilePass':
 | 
			
		||||
					if(!opts.enc) blob.l = 0;
 | 
			
		||||
					opts.enc = val;
 | 
			
		||||
					if(opts.WTF) console.error(val);
 | 
			
		||||
					if(!options.password) throw new Error("File is password-protected");
 | 
			
		||||
					if(val.valid == null) throw new Error("Encryption scheme unsupported");
 | 
			
		||||
					if(!val.valid) throw new Error("Password is incorrect");
 | 
			
		||||
@ -15519,6 +15530,9 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;
 | 
			
		||||
0x0209:3,
 | 
			
		||||
0x0409:4
 | 
			
		||||
					}[RecordType] || {
 | 
			
		||||
0x0200:2,
 | 
			
		||||
0x0300:3,
 | 
			
		||||
0x0400:4,
 | 
			
		||||
0x0500:5,
 | 
			
		||||
0x0600:8,
 | 
			
		||||
0x0002:2,
 | 
			
		||||
@ -15699,7 +15713,7 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;
 | 
			
		||||
					for(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)
 | 
			
		||||
						for(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {
 | 
			
		||||
							cc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];
 | 
			
		||||
							if(cc) cc.l.Tooltip = val[1];
 | 
			
		||||
							if(cc && cc.l) cc.l.Tooltip = val[1];
 | 
			
		||||
							}
 | 
			
		||||
				} break;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										24
									
								
								dist/xlsx.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										24
									
								
								dist/xlsx.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/xlsx.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/xlsx.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										10
									
								
								package.json
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										10
									
								
								package.json
									
									
									
									
									
								
							@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
	"name": "xlsx",
 | 
			
		||||
	"version": "0.12.1",
 | 
			
		||||
	"version": "0.12.2",
 | 
			
		||||
	"author": "sheetjs",
 | 
			
		||||
	"description": "SheetJS Spreadsheet data parser and writer",
 | 
			
		||||
	"keywords": [
 | 
			
		||||
@ -31,12 +31,12 @@
 | 
			
		||||
	},
 | 
			
		||||
	"dependencies": {
 | 
			
		||||
		"adler-32": "~1.2.0",
 | 
			
		||||
		"cfb": "~1.0.3",
 | 
			
		||||
		"codepage": "~1.12.0",
 | 
			
		||||
		"commander": "~2.13.0",
 | 
			
		||||
		"cfb": "~1.0.4",
 | 
			
		||||
		"codepage": "~1.12.1",
 | 
			
		||||
		"commander": "~2.14.1",
 | 
			
		||||
		"crc-32": "~1.2.0",
 | 
			
		||||
		"exit-on-epipe": "~1.0.1",
 | 
			
		||||
		"ssf": "~0.10.1"
 | 
			
		||||
		"ssf": "~0.10.2"
 | 
			
		||||
	},
 | 
			
		||||
	"devDependencies": {
 | 
			
		||||
		"@sheetjs/uglify-js": "~2.7.3",
 | 
			
		||||
 | 
			
		||||
@ -14,6 +14,7 @@ var data = [
 | 
			
		||||
	["hidden"],
 | 
			
		||||
	["visible"]
 | 
			
		||||
];
 | 
			
		||||
if(isNaN(data[2][2].getYear())) data[2][2] = new Date(Date.UTC(2014, 1, 19, 14, 30, 0));
 | 
			
		||||
 | 
			
		||||
var ws_name = "SheetJS";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										3
									
								
								types/index.d.ts
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										3
									
								
								types/index.d.ts
									
									
									
									
										vendored
									
									
								
							@ -1,12 +1,13 @@
 | 
			
		||||
/* index.d.ts (C) 2015-present SheetJS and contributors */
 | 
			
		||||
// TypeScript Version: 2.2
 | 
			
		||||
import * as CFB from "cfb";
 | 
			
		||||
import * as SSF from "ssf";
 | 
			
		||||
 | 
			
		||||
/** Version string */
 | 
			
		||||
export const version: string;
 | 
			
		||||
 | 
			
		||||
/** SSF Formatter Library */
 | 
			
		||||
export const SSF: any;
 | 
			
		||||
export { SSF };
 | 
			
		||||
 | 
			
		||||
/** CFB Library */
 | 
			
		||||
export { CFB };
 | 
			
		||||
 | 
			
		||||
@ -42,7 +42,8 @@ const WBSheets = WBProps.Sheets;
 | 
			
		||||
const WBSheet0 = WBSheets[0];
 | 
			
		||||
console.log(WBSheet0.Hidden);
 | 
			
		||||
 | 
			
		||||
const fmt14 = XLSX.SSF._table[14];
 | 
			
		||||
const fmt14 = XLSX.SSF.get_table()[14];
 | 
			
		||||
XLSX.SSF.load('"This is a custom format "0.000');
 | 
			
		||||
 | 
			
		||||
const newwb = XLSX.utils.book_new();
 | 
			
		||||
XLSX.utils.book_append_sheet(newwb, aoa2, "AOA");
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										64
									
								
								xlsx.flow.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										64
									
								
								xlsx.flow.js
									
									
									
									
									
								
							@ -4,7 +4,7 @@
 | 
			
		||||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false */
 | 
			
		||||
var XLSX = {};
 | 
			
		||||
(function make_xlsx(XLSX){
 | 
			
		||||
XLSX.version = '0.12.1';
 | 
			
		||||
XLSX.version = '0.12.2';
 | 
			
		||||
var current_codepage = 1200, current_ansi = 1252;
 | 
			
		||||
/*:: declare var cptable:any; */
 | 
			
		||||
/*global cptable:true */
 | 
			
		||||
@ -186,7 +186,7 @@ type WriteObjStrFactory = {from_sheet(ws:Worksheet, o:any, wb:?Workbook):string}
 | 
			
		||||
/*jshint -W041 */
 | 
			
		||||
var SSF/*:SSFModule*/ = ({}/*:any*/);
 | 
			
		||||
var make_ssf = function make_ssf(SSF/*:SSFModule*/){
 | 
			
		||||
SSF.version = '0.10.0';
 | 
			
		||||
SSF.version = '0.10.2';
 | 
			
		||||
function _strrev(x/*:string*/)/*:string*/ { var o = "", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }
 | 
			
		||||
function fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = ""; while(o.length < l) o+=c; return o; }
 | 
			
		||||
function pad0(v/*:any*/,d/*:number*/)/*:string*/{var t=""+v; return t.length>=d?t:fill('0',d-t.length)+t;}
 | 
			
		||||
@ -975,7 +975,7 @@ function eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number*/) {
 | 
			
		||||
}
 | 
			
		||||
SSF._eval = eval_fmt;
 | 
			
		||||
var cfregex = /\[[=<>]/;
 | 
			
		||||
var cfregex2 = /\[([=<>]*)(-?\d+\.?\d*)\]/;
 | 
			
		||||
var cfregex2 = /\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;
 | 
			
		||||
function chkcond(v, rr) {
 | 
			
		||||
	if(rr == null) return false;
 | 
			
		||||
	var thresh = parseFloat(rr[2]);
 | 
			
		||||
@ -2169,7 +2169,7 @@ function resolve_path(path/*:string*/, base/*:string*/)/*:string*/ {
 | 
			
		||||
}
 | 
			
		||||
var XML_HEADER = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r\n';
 | 
			
		||||
var attregexg=/([^"\s?>\/]+)\s*=\s*((?:")([^"]*)(?:")|(?:')([^']*)(?:')|([^'">\s]+))/g;
 | 
			
		||||
var tagregex=/<[\/\?]?[a-zA-Z0-9:]+(?:\s+[^"\s?>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s]+))*\s?[\/\?]?>/g;
 | 
			
		||||
var tagregex=/<[\/\?]?[a-zA-Z0-9:]+(?:\s+[^"\s?>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s=]+))*\s?[\/\?]?>/g;
 | 
			
		||||
if(!(XML_HEADER.match(tagregex))) tagregex = /<[^>]*>/g;
 | 
			
		||||
var nsregex=/<\w*:/, nsregex2 = /<(\/?)\w+:/;
 | 
			
		||||
function parsexmltag(tag/*:string*/, skip_root/*:?boolean*/)/*:any*/ {
 | 
			
		||||
@ -2445,13 +2445,14 @@ function write_double_le(b/*:RawBytes|CFBlob*/, v/*:number*/, idx/*:number*/) {
 | 
			
		||||
	b[idx + 7] = (e >> 4) | bs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var __toBuffer = function(bufs/*:Array<any>*/) { var x=[],w=10240; for(var i=0;i<bufs[0].length;++i) for(var j=0,L=bufs[0][i].length;j<L;j+=w) x.push.apply(x, bufs[0][i].slice(j,j+w)); return x; };
 | 
			
		||||
var __toBuffer = function(bufs/*:Array<Array<RawBytes> >*/)/*:RawBytes*/ { var x=[],w=10240; for(var i=0;i<bufs[0].length;++i) if(bufs[0][i]) for(var j=0,L=bufs[0][i].length;j<L;j+=w) x.push.apply(x, bufs[0][i].slice(j,j+w)); return x; };
 | 
			
		||||
var ___toBuffer = __toBuffer;
 | 
			
		||||
var __utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/)/*:string*/ { var ss/*:Array<string>*/=[]; for(var i=s; i<e; i+=2) ss.push(String.fromCharCode(__readUInt16LE(b,i))); return ss.join("").replace(chr0,''); };
 | 
			
		||||
var ___utf16le = __utf16le;
 | 
			
		||||
var __hexlify = function(b/*:RawBytes|CFBlob*/,s/*:number*/,l/*:number*/)/*:string*/ { var ss/*:Array<string>*/=[]; for(var i=s; i<s+l; ++i) ss.push(("0" + b[i].toString(16)).slice(-2)); return ss.join(""); };
 | 
			
		||||
var ___hexlify = __hexlify;
 | 
			
		||||
var __utf8 = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { var ss=[]; for(var i=s; i<e; i++) ss.push(String.fromCharCode(__readUInt8(b,i))); return ss.join(""); };
 | 
			
		||||
var ___utf8 = __utf8;
 | 
			
		||||
var __lpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";};
 | 
			
		||||
var ___lpstr = __lpstr;
 | 
			
		||||
var __cpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";};
 | 
			
		||||
@ -2474,7 +2475,7 @@ if(has_buf/*:: && typeof Buffer !== 'undefined'*/) {
 | 
			
		||||
	__lpwstr = function lpwstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);};
 | 
			
		||||
	__lpp4 = function lpp4_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len);};
 | 
			
		||||
	__8lpp4 = function lpp4_8b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___8lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf8',i+4,i+4+len);};
 | 
			
		||||
	__utf8 = function utf8_b(b/*:RawBytes|CFBlob*/, s/*:number*/, e/*:number*/) { return (Buffer.isBuffer(b)/*:: && (b instanceof Buffer)*/) ? b.toString('utf8',s,e) : __utf8(b,s,e); };
 | 
			
		||||
	__utf8 = function utf8_b(b/*:RawBytes|CFBlob*/, s/*:number*/, e/*:number*/) { return (Buffer.isBuffer(b)/*:: && (b instanceof Buffer)*/) ? b.toString('utf8',s,e) : ___utf8(b,s,e); };
 | 
			
		||||
	__toBuffer = function(bufs) { return (bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0]) : ___toBuffer(bufs);};
 | 
			
		||||
	bconcat = function(bufs) { return Buffer.isBuffer(bufs[0]) ? Buffer.concat(bufs) : [].concat.apply([], bufs); };
 | 
			
		||||
	__double = function double_(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(Buffer.isBuffer(b)/*::&& b instanceof Buffer*/) return b.readDoubleLE(i); return ___double(b,i); };
 | 
			
		||||
@ -2746,7 +2747,9 @@ function shift_range_xls(cell, range, opts) {
 | 
			
		||||
	return out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function encode_cell_xls(c/*:CellAddress*/)/*:string*/ {
 | 
			
		||||
function encode_cell_xls(c/*:CellAddress*/, biff/*:number*/)/*:string*/ {
 | 
			
		||||
	if(c.cRel && c.c < 0) { c = dup(c); c.c += (biff > 8) ? 0x4000 : 0x100; }
 | 
			
		||||
	if(c.rRel && c.r < 0) { c = dup(c); c.r += (biff > 8) ? 0x100000 : ((biff > 5) ? 0x10000 : 0x4000); }
 | 
			
		||||
	var s = encode_cell(c);
 | 
			
		||||
	if(c.cRel === 0) s = fix_col(s);
 | 
			
		||||
	if(c.rRel === 0) s = fix_row(s);
 | 
			
		||||
@ -2755,7 +2758,7 @@ function encode_cell_xls(c/*:CellAddress*/)/*:string*/ {
 | 
			
		||||
 | 
			
		||||
function encode_range_xls(r, opts)/*:string*/ {
 | 
			
		||||
	if(r.s.r == 0 && !r.s.rRel) {
 | 
			
		||||
		if(r.e.r == (opts.biff >= 12 ? 0xFFFFF : 0xFFFF) && !r.e.rRel) {
 | 
			
		||||
		if(r.e.r == (opts.biff >= 12 ? 0xFFFFF : (opts.biff >= 8 ? 0x10000 : 0x4000)) && !r.e.rRel) {
 | 
			
		||||
			return (r.s.cRel ? "" : "$") + encode_col(r.s.c) + ":" + (r.e.cRel ? "" : "$") + encode_col(r.e.c);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@ -2764,7 +2767,7 @@ function encode_range_xls(r, opts)/*:string*/ {
 | 
			
		||||
			return (r.s.rRel ? "" : "$") + encode_row(r.s.r) + ":" + (r.e.rRel ? "" : "$") + encode_row(r.e.r);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return encode_cell_xls(r.s) + ":" + encode_cell_xls(r.e);
 | 
			
		||||
	return encode_cell_xls(r.s, opts.biff) + ":" + encode_cell_xls(r.e, opts.biff);
 | 
			
		||||
}
 | 
			
		||||
var OFFCRYPTO = {};
 | 
			
		||||
 | 
			
		||||
@ -3244,7 +3247,7 @@ var VT_UI4      = 0x0013;
 | 
			
		||||
var VT_LPSTR    = 0x001E;
 | 
			
		||||
//var VT_LPWSTR   = 0x001F;
 | 
			
		||||
var VT_FILETIME = 0x0040;
 | 
			
		||||
//var VT_BLOB     = 0x0041;
 | 
			
		||||
var VT_BLOB     = 0x0041;
 | 
			
		||||
//var VT_STREAM   = 0x0042;
 | 
			
		||||
//var VT_STORAGE  = 0x0043;
 | 
			
		||||
//var VT_STREAMED_Object  = 0x0044;
 | 
			
		||||
@ -3282,6 +3285,7 @@ var DocSummaryPIDDSI = {
 | 
			
		||||
	/*::[*/0x13/*::]*/: { n: 'SharedDoc', t: VT_BOOL },
 | 
			
		||||
	/*::[*/0x16/*::]*/: { n: 'HLinksChanged', t: VT_BOOL },
 | 
			
		||||
	/*::[*/0x17/*::]*/: { n: 'AppVersion', t: VT_I4, p: 'version' },
 | 
			
		||||
	/*::[*/0x18/*::]*/: { n: 'DigSig', t: VT_BLOB },
 | 
			
		||||
	/*::[*/0x1A/*::]*/: { n: 'ContentType', t: VT_STRING },
 | 
			
		||||
	/*::[*/0x1B/*::]*/: { n: 'ContentStatus', t: VT_STRING },
 | 
			
		||||
	/*::[*/0x1C/*::]*/: { n: 'Language', t: VT_STRING },
 | 
			
		||||
@ -4355,6 +4359,7 @@ function parse_dictionary(blob,CodePage) {
 | 
			
		||||
function parse_BLOB(blob) {
 | 
			
		||||
	var size = blob.read_shift(4);
 | 
			
		||||
	var bytes = blob.slice(blob.l,blob.l+size);
 | 
			
		||||
	blob.l += size;
 | 
			
		||||
	if((size & 3) > 0) blob.l += (4 - (size & 3)) & 3;
 | 
			
		||||
	return bytes;
 | 
			
		||||
}
 | 
			
		||||
@ -4365,7 +4370,7 @@ function parse_ClipboardData(blob) {
 | 
			
		||||
	var o = {};
 | 
			
		||||
	o.Size = blob.read_shift(4);
 | 
			
		||||
	//o.Format = blob.read_shift(4);
 | 
			
		||||
	blob.l += o.Size;
 | 
			
		||||
	blob.l += o.Size + 3 - (o.Size - 1) % 4;
 | 
			
		||||
	return o;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -4511,6 +4516,7 @@ function parse_PropertySetStream(file, PIDSI, clsid) {
 | 
			
		||||
	rval.FMTID = FMTID0;
 | 
			
		||||
	//rval.PSet0 = PSet0;
 | 
			
		||||
	if(NumSets === 1) return rval;
 | 
			
		||||
	if(Offset1 - blob.l == 2) blob.l += 2;
 | 
			
		||||
	if(blob.l !== Offset1) throw new Error("Length mismatch 2: " + blob.l + " !== " + Offset1);
 | 
			
		||||
	var PSet1;
 | 
			
		||||
	try { PSet1 = parse_PropertySet(blob, null); } catch(e) {/* empty */}
 | 
			
		||||
@ -4903,6 +4909,9 @@ function parse_BOF(blob, length) {
 | 
			
		||||
	switch(o.BIFFVer) {
 | 
			
		||||
		case 0x0600: /* BIFF8 */
 | 
			
		||||
		case 0x0500: /* BIFF5 */
 | 
			
		||||
		case 0x0400: /* BIFF4 */
 | 
			
		||||
		case 0x0300: /* BIFF3 */
 | 
			
		||||
		case 0x0200: /* BIFF2 */
 | 
			
		||||
		case 0x0002: case 0x0007: /* BIFF2 */
 | 
			
		||||
			break;
 | 
			
		||||
		default: if(length > 6) throw new Error("Unexpected BIFF Ver " + o.BIFFVer);
 | 
			
		||||
@ -7578,7 +7587,7 @@ function parse_FilePassHeader(blob, length/*:number*/, oo) {
 | 
			
		||||
function parse_FilePass(blob, length/*:number*/, opts) {
 | 
			
		||||
	var o = ({ Type: opts.biff >= 8 ? blob.read_shift(2) : 0 }/*:any*/); /* wEncryptionType */
 | 
			
		||||
	if(o.Type) parse_FilePassHeader(blob, length-2, o);
 | 
			
		||||
	else parse_XORObfuscation(blob, length-2, opts, o);
 | 
			
		||||
	else parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);
 | 
			
		||||
	return o;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -9386,8 +9395,9 @@ function parse_RgceArea_BIFF2(blob/*::, length, opts*/) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */
 | 
			
		||||
function parse_RgceAreaRel(blob, length/*::, opts*/) {
 | 
			
		||||
	var r=blob.read_shift(length == 12 ? 4 : 2), R=blob.read_shift(length == 12 ? 4 : 2);
 | 
			
		||||
function parse_RgceAreaRel(blob, length, opts) {
 | 
			
		||||
	if(opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);
 | 
			
		||||
	var r=blob.read_shift(opts.biff == 12 ? 4 : 2), R=blob.read_shift(opts.biff == 12 ? 4 : 2);
 | 
			
		||||
	var c=parse_ColRelU(blob, 2);
 | 
			
		||||
	var C=parse_ColRelU(blob, 2);
 | 
			
		||||
	return { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };
 | 
			
		||||
@ -9477,7 +9487,7 @@ function parse_PtgAreaErr3d(blob, length, opts) {
 | 
			
		||||
/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */
 | 
			
		||||
function parse_PtgAreaN(blob, length, opts) {
 | 
			
		||||
	var type = (blob[blob.l++] & 0x60) >> 5;
 | 
			
		||||
	var area = parse_RgceAreaRel(blob, opts && opts.biff > 8 ? 12 : 8, opts);
 | 
			
		||||
	var area = parse_RgceAreaRel(blob, length - 1, opts);
 | 
			
		||||
	return [type, area];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -9731,6 +9741,7 @@ function parse_PtgMemFunc(blob, length, opts) {
 | 
			
		||||
function parse_PtgRefErr(blob, length, opts) {
 | 
			
		||||
	var type = (blob.read_shift(1) >>> 5) & 0x03;
 | 
			
		||||
	blob.l += 4;
 | 
			
		||||
	if(opts.biff < 8) blob.l--;
 | 
			
		||||
	if(opts.biff == 12) blob.l += 2;
 | 
			
		||||
	return [type];
 | 
			
		||||
}
 | 
			
		||||
@ -10034,6 +10045,7 @@ function get_ixti(supbooks, ixti/*:number*/, opts)/*:string*/ {
 | 
			
		||||
	return formula_quote_sheet_name(get_ixti_raw(supbooks, ixti, opts), opts);
 | 
			
		||||
}
 | 
			
		||||
function stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, supbooks, opts)/*:string*/ {
 | 
			
		||||
	var biff = (opts && opts.biff) || 8;
 | 
			
		||||
	var _range = /*range != null ? range :*/ {s:{c:0, r:0},e:{c:0, r:0}};
 | 
			
		||||
	var stack/*:Array<string>*/ = [], e1, e2, /*::type,*/ c/*:CellAddress*/, ixti=0, nameidx=0, r, sname="";
 | 
			
		||||
	if(!formula[0] || !formula[0][0]) return "";
 | 
			
		||||
@ -10105,17 +10117,17 @@ function stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, supbooks,
 | 
			
		||||
 | 
			
		||||
			case 'PtgRef': /* [MS-XLS] 2.5.198.84 */
 | 
			
		||||
				/*::type = f[1][0]; */c = shift_cell_xls((f[1][1]/*:any*/), _range, opts);
 | 
			
		||||
				stack.push(encode_cell_xls(c));
 | 
			
		||||
				stack.push(encode_cell_xls(c, biff));
 | 
			
		||||
				break;
 | 
			
		||||
			case 'PtgRefN': /* [MS-XLS] 2.5.198.88 */
 | 
			
		||||
				/*::type = f[1][0]; */c = cell ? shift_cell_xls((f[1][1]/*:any*/), cell, opts) : (f[1][1]/*:any*/);
 | 
			
		||||
				stack.push(encode_cell_xls(c));
 | 
			
		||||
				stack.push(encode_cell_xls(c, biff));
 | 
			
		||||
				break;
 | 
			
		||||
			case 'PtgRef3d': /* [MS-XLS] 2.5.198.85 */
 | 
			
		||||
				/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; c = shift_cell_xls((f[1][2]/*:any*/), _range, opts);
 | 
			
		||||
				sname = get_ixti(supbooks, ixti, opts);
 | 
			
		||||
				var w = sname; /* IE9 fails on defined names */ // eslint-disable-line no-unused-vars
 | 
			
		||||
				stack.push(sname + "!" + encode_cell_xls(c));
 | 
			
		||||
				stack.push(sname + "!" + encode_cell_xls(c, biff));
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			case 'PtgFunc': /* [MS-XLS] 2.5.198.62 */
 | 
			
		||||
@ -10123,6 +10135,7 @@ function stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, supbooks,
 | 
			
		||||
				/* f[1] = [argc, func, type] */
 | 
			
		||||
				var argc/*:number*/ = (f[1][0]/*:any*/), func/*:string*/ = (f[1][1]/*:any*/);
 | 
			
		||||
				if(!argc) argc = 0;
 | 
			
		||||
				argc &= 0x7F;
 | 
			
		||||
				var args = argc == 0 ? [] : stack.slice(-argc);
 | 
			
		||||
				stack.length -= argc;
 | 
			
		||||
				if(func === 'User') func = args.shift();
 | 
			
		||||
@ -10157,6 +10170,7 @@ function stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, supbooks,
 | 
			
		||||
				stack.push("SUM(" + stack.pop() + ")");
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			case 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 */
 | 
			
		||||
			case 'PtgAttrSemi': /* [MS-XLS] 2.5.198.37 */
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
@ -10290,8 +10304,6 @@ function stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, supbooks,
 | 
			
		||||
			case 'PtgElfRwV': /* [MS-XLS] 2.5.198.55 */
 | 
			
		||||
				throw new Error("Unsupported ELFs");
 | 
			
		||||
 | 
			
		||||
			case 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 TODO -- find a test case*/
 | 
			
		||||
				throw new Error('Unrecognized Formula Token: ' + String(f));
 | 
			
		||||
			case 'PtgSxName': /* [MS-XLS] 2.5.198.91 TODO -- find a test case */
 | 
			
		||||
				throw new Error('Unrecognized Formula Token: ' + String(f));
 | 
			
		||||
			case 'PtgList': /* [MS-XLSB] 2.5.97.52 TODO -- find a test case */
 | 
			
		||||
@ -13249,7 +13261,7 @@ function parse_numCache(data/*:string*/)/*:[Array<number>, string]*/ {
 | 
			
		||||
 | 
			
		||||
	/* 21.2.2.150 pt CT_NumVal */
 | 
			
		||||
	(data.match(/<c:pt idx="(\d*)">(.*?)<\/c:pt>/mg)||[]).forEach(function(pt) {
 | 
			
		||||
		var q = pt.match(/<c:pt idx="(.*?)"><c:v>(.*)<\/c:v><\/c:pt>/);
 | 
			
		||||
		var q = pt.match(/<c:pt idx="(\d*?)"><c:v>(.*)<\/c:v><\/c:pt>/);
 | 
			
		||||
		if(!q) return;
 | 
			
		||||
		col[+q[1]] = +q[2];
 | 
			
		||||
	});
 | 
			
		||||
@ -14307,7 +14319,7 @@ function xlml_normalize(d)/*:string*/ {
 | 
			
		||||
 | 
			
		||||
/* TODO: Everything */
 | 
			
		||||
/* UOS uses CJK in tags */
 | 
			
		||||
var xlmlregex = /<(\/?)([^\s?>!\/:]*:|)([^\s?>]*[^\s?>\/])[^>]*>/mg;
 | 
			
		||||
var xlmlregex = /<(\/?)([^\s?>!\/:]*:|)([^\s?>:\/]+)[^>]*>/mg;
 | 
			
		||||
//var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
 | 
			
		||||
function parse_xlml_xml(d, _opts)/*:Workbook*/ {
 | 
			
		||||
	var opts = _opts || {};
 | 
			
		||||
@ -15503,7 +15515,7 @@ function parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {
 | 
			
		||||
			last_Rn = R.n;
 | 
			
		||||
			if(R.r === 2 || R.r == 12) {
 | 
			
		||||
				var rt = blob.read_shift(2); length -= 2;
 | 
			
		||||
				if(!opts.enc && rt !== RecordType) throw new Error("rt mismatch: " + rt + "!=" + RecordType);
 | 
			
		||||
				if(!opts.enc && rt !== RecordType && (((rt&0xFF)<<8)|(rt>>8)) !== RecordType) throw new Error("rt mismatch: " + rt + "!=" + RecordType);
 | 
			
		||||
				if(R.r == 12){ blob.l += 10; length -= 10; } // skip FRT
 | 
			
		||||
			}
 | 
			
		||||
			//console.error(R,blob.l,length,blob.length);
 | 
			
		||||
@ -15522,7 +15534,6 @@ function parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {
 | 
			
		||||
				case 'FilePass':
 | 
			
		||||
					if(!opts.enc) blob.l = 0;
 | 
			
		||||
					opts.enc = val;
 | 
			
		||||
					if(opts.WTF) console.error(val);
 | 
			
		||||
					if(!options.password) throw new Error("File is password-protected");
 | 
			
		||||
					if(val.valid == null) throw new Error("Encryption scheme unsupported");
 | 
			
		||||
					if(!val.valid) throw new Error("Password is incorrect");
 | 
			
		||||
@ -15627,6 +15638,9 @@ function parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {
 | 
			
		||||
						/*::[*/0x0209/*::]*/:3,
 | 
			
		||||
						/*::[*/0x0409/*::]*/:4
 | 
			
		||||
					}[RecordType] || {
 | 
			
		||||
						/*::[*/0x0200/*::]*/:2,
 | 
			
		||||
						/*::[*/0x0300/*::]*/:3,
 | 
			
		||||
						/*::[*/0x0400/*::]*/:4,
 | 
			
		||||
						/*::[*/0x0500/*::]*/:5,
 | 
			
		||||
						/*::[*/0x0600/*::]*/:8,
 | 
			
		||||
						/*::[*/0x0002/*::]*/:2,
 | 
			
		||||
@ -15807,7 +15821,7 @@ function parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {
 | 
			
		||||
					for(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)
 | 
			
		||||
						for(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {
 | 
			
		||||
							cc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];
 | 
			
		||||
							if(cc) cc.l.Tooltip = val[1];
 | 
			
		||||
							if(cc && cc.l) cc.l.Tooltip = val[1];
 | 
			
		||||
							}
 | 
			
		||||
				} break;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										64
									
								
								xlsx.js
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										64
									
								
								xlsx.js
									
									
									
										generated
									
									
									
								
							@ -4,7 +4,7 @@
 | 
			
		||||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false */
 | 
			
		||||
var XLSX = {};
 | 
			
		||||
(function make_xlsx(XLSX){
 | 
			
		||||
XLSX.version = '0.12.1';
 | 
			
		||||
XLSX.version = '0.12.2';
 | 
			
		||||
var current_codepage = 1200, current_ansi = 1252;
 | 
			
		||||
/*global cptable:true */
 | 
			
		||||
if(typeof module !== "undefined" && typeof require !== 'undefined') {
 | 
			
		||||
@ -165,7 +165,7 @@ var chr0 = /\u0000/g, chr1 = /[\u0001-\u0006]/g;
 | 
			
		||||
/*jshint -W041 */
 | 
			
		||||
var SSF = ({});
 | 
			
		||||
var make_ssf = function make_ssf(SSF){
 | 
			
		||||
SSF.version = '0.10.0';
 | 
			
		||||
SSF.version = '0.10.2';
 | 
			
		||||
function _strrev(x) { var o = "", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }
 | 
			
		||||
function fill(c,l) { var o = ""; while(o.length < l) o+=c; return o; }
 | 
			
		||||
function pad0(v,d){var t=""+v; return t.length>=d?t:fill('0',d-t.length)+t;}
 | 
			
		||||
@ -945,7 +945,7 @@ out[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);
 | 
			
		||||
}
 | 
			
		||||
SSF._eval = eval_fmt;
 | 
			
		||||
var cfregex = /\[[=<>]/;
 | 
			
		||||
var cfregex2 = /\[([=<>]*)(-?\d+\.?\d*)\]/;
 | 
			
		||||
var cfregex2 = /\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;
 | 
			
		||||
function chkcond(v, rr) {
 | 
			
		||||
	if(rr == null) return false;
 | 
			
		||||
	var thresh = parseFloat(rr[2]);
 | 
			
		||||
@ -2092,7 +2092,7 @@ function resolve_path(path, base) {
 | 
			
		||||
}
 | 
			
		||||
var XML_HEADER = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r\n';
 | 
			
		||||
var attregexg=/([^"\s?>\/]+)\s*=\s*((?:")([^"]*)(?:")|(?:')([^']*)(?:')|([^'">\s]+))/g;
 | 
			
		||||
var tagregex=/<[\/\?]?[a-zA-Z0-9:]+(?:\s+[^"\s?>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s]+))*\s?[\/\?]?>/g;
 | 
			
		||||
var tagregex=/<[\/\?]?[a-zA-Z0-9:]+(?:\s+[^"\s?>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s=]+))*\s?[\/\?]?>/g;
 | 
			
		||||
if(!(XML_HEADER.match(tagregex))) tagregex = /<[^>]*>/g;
 | 
			
		||||
var nsregex=/<\w*:/, nsregex2 = /<(\/?)\w+:/;
 | 
			
		||||
function parsexmltag(tag, skip_root) {
 | 
			
		||||
@ -2368,13 +2368,14 @@ function write_double_le(b, v, idx) {
 | 
			
		||||
	b[idx + 7] = (e >> 4) | bs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var __toBuffer = function(bufs) { var x=[],w=10240; for(var i=0;i<bufs[0].length;++i) for(var j=0,L=bufs[0][i].length;j<L;j+=w) x.push.apply(x, bufs[0][i].slice(j,j+w)); return x; };
 | 
			
		||||
var __toBuffer = function(bufs) { var x=[],w=10240; for(var i=0;i<bufs[0].length;++i) if(bufs[0][i]) for(var j=0,L=bufs[0][i].length;j<L;j+=w) x.push.apply(x, bufs[0][i].slice(j,j+w)); return x; };
 | 
			
		||||
var ___toBuffer = __toBuffer;
 | 
			
		||||
var __utf16le = function(b,s,e) { var ss=[]; for(var i=s; i<e; i+=2) ss.push(String.fromCharCode(__readUInt16LE(b,i))); return ss.join("").replace(chr0,''); };
 | 
			
		||||
var ___utf16le = __utf16le;
 | 
			
		||||
var __hexlify = function(b,s,l) { var ss=[]; for(var i=s; i<s+l; ++i) ss.push(("0" + b[i].toString(16)).slice(-2)); return ss.join(""); };
 | 
			
		||||
var ___hexlify = __hexlify;
 | 
			
		||||
var __utf8 = function(b,s,e) { var ss=[]; for(var i=s; i<e; i++) ss.push(String.fromCharCode(__readUInt8(b,i))); return ss.join(""); };
 | 
			
		||||
var ___utf8 = __utf8;
 | 
			
		||||
var __lpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";};
 | 
			
		||||
var ___lpstr = __lpstr;
 | 
			
		||||
var __cpstr = function(b,i) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : "";};
 | 
			
		||||
@ -2397,7 +2398,7 @@ if(has_buf) {
 | 
			
		||||
	__lpwstr = function lpwstr_b(b, i) { if(!Buffer.isBuffer(b)) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);};
 | 
			
		||||
	__lpp4 = function lpp4_b(b, i) { if(!Buffer.isBuffer(b)) return ___lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len);};
 | 
			
		||||
	__8lpp4 = function lpp4_8b(b, i) { if(!Buffer.isBuffer(b)) return ___8lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf8',i+4,i+4+len);};
 | 
			
		||||
	__utf8 = function utf8_b(b, s, e) { return (Buffer.isBuffer(b)) ? b.toString('utf8',s,e) : __utf8(b,s,e); };
 | 
			
		||||
	__utf8 = function utf8_b(b, s, e) { return (Buffer.isBuffer(b)) ? b.toString('utf8',s,e) : ___utf8(b,s,e); };
 | 
			
		||||
	__toBuffer = function(bufs) { return (bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0]) : ___toBuffer(bufs);};
 | 
			
		||||
	bconcat = function(bufs) { return Buffer.isBuffer(bufs[0]) ? Buffer.concat(bufs) : [].concat.apply([], bufs); };
 | 
			
		||||
	__double = function double_(b, i) { if(Buffer.isBuffer(b)) return b.readDoubleLE(i); return ___double(b,i); };
 | 
			
		||||
@ -2664,7 +2665,9 @@ function shift_range_xls(cell, range, opts) {
 | 
			
		||||
	return out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function encode_cell_xls(c) {
 | 
			
		||||
function encode_cell_xls(c, biff) {
 | 
			
		||||
	if(c.cRel && c.c < 0) { c = dup(c); c.c += (biff > 8) ? 0x4000 : 0x100; }
 | 
			
		||||
	if(c.rRel && c.r < 0) { c = dup(c); c.r += (biff > 8) ? 0x100000 : ((biff > 5) ? 0x10000 : 0x4000); }
 | 
			
		||||
	var s = encode_cell(c);
 | 
			
		||||
	if(c.cRel === 0) s = fix_col(s);
 | 
			
		||||
	if(c.rRel === 0) s = fix_row(s);
 | 
			
		||||
@ -2673,7 +2676,7 @@ function encode_cell_xls(c) {
 | 
			
		||||
 | 
			
		||||
function encode_range_xls(r, opts) {
 | 
			
		||||
	if(r.s.r == 0 && !r.s.rRel) {
 | 
			
		||||
		if(r.e.r == (opts.biff >= 12 ? 0xFFFFF : 0xFFFF) && !r.e.rRel) {
 | 
			
		||||
		if(r.e.r == (opts.biff >= 12 ? 0xFFFFF : (opts.biff >= 8 ? 0x10000 : 0x4000)) && !r.e.rRel) {
 | 
			
		||||
			return (r.s.cRel ? "" : "$") + encode_col(r.s.c) + ":" + (r.e.cRel ? "" : "$") + encode_col(r.e.c);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@ -2682,7 +2685,7 @@ function encode_range_xls(r, opts) {
 | 
			
		||||
			return (r.s.rRel ? "" : "$") + encode_row(r.s.r) + ":" + (r.e.rRel ? "" : "$") + encode_row(r.e.r);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return encode_cell_xls(r.s) + ":" + encode_cell_xls(r.e);
 | 
			
		||||
	return encode_cell_xls(r.s, opts.biff) + ":" + encode_cell_xls(r.e, opts.biff);
 | 
			
		||||
}
 | 
			
		||||
var OFFCRYPTO = {};
 | 
			
		||||
 | 
			
		||||
@ -3156,7 +3159,7 @@ var VT_UI4      = 0x0013;
 | 
			
		||||
var VT_LPSTR    = 0x001E;
 | 
			
		||||
//var VT_LPWSTR   = 0x001F;
 | 
			
		||||
var VT_FILETIME = 0x0040;
 | 
			
		||||
//var VT_BLOB     = 0x0041;
 | 
			
		||||
var VT_BLOB     = 0x0041;
 | 
			
		||||
//var VT_STREAM   = 0x0042;
 | 
			
		||||
//var VT_STORAGE  = 0x0043;
 | 
			
		||||
//var VT_STREAMED_Object  = 0x0044;
 | 
			
		||||
@ -3194,6 +3197,7 @@ var DocSummaryPIDDSI = {
 | 
			
		||||
0x13: { n: 'SharedDoc', t: VT_BOOL },
 | 
			
		||||
0x16: { n: 'HLinksChanged', t: VT_BOOL },
 | 
			
		||||
0x17: { n: 'AppVersion', t: VT_I4, p: 'version' },
 | 
			
		||||
0x18: { n: 'DigSig', t: VT_BLOB },
 | 
			
		||||
0x1A: { n: 'ContentType', t: VT_STRING },
 | 
			
		||||
0x1B: { n: 'ContentStatus', t: VT_STRING },
 | 
			
		||||
0x1C: { n: 'Language', t: VT_STRING },
 | 
			
		||||
@ -4265,6 +4269,7 @@ function parse_dictionary(blob,CodePage) {
 | 
			
		||||
function parse_BLOB(blob) {
 | 
			
		||||
	var size = blob.read_shift(4);
 | 
			
		||||
	var bytes = blob.slice(blob.l,blob.l+size);
 | 
			
		||||
	blob.l += size;
 | 
			
		||||
	if((size & 3) > 0) blob.l += (4 - (size & 3)) & 3;
 | 
			
		||||
	return bytes;
 | 
			
		||||
}
 | 
			
		||||
@ -4275,7 +4280,7 @@ function parse_ClipboardData(blob) {
 | 
			
		||||
	var o = {};
 | 
			
		||||
	o.Size = blob.read_shift(4);
 | 
			
		||||
	//o.Format = blob.read_shift(4);
 | 
			
		||||
	blob.l += o.Size;
 | 
			
		||||
	blob.l += o.Size + 3 - (o.Size - 1) % 4;
 | 
			
		||||
	return o;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -4421,6 +4426,7 @@ function parse_PropertySetStream(file, PIDSI, clsid) {
 | 
			
		||||
	rval.FMTID = FMTID0;
 | 
			
		||||
	//rval.PSet0 = PSet0;
 | 
			
		||||
	if(NumSets === 1) return rval;
 | 
			
		||||
	if(Offset1 - blob.l == 2) blob.l += 2;
 | 
			
		||||
	if(blob.l !== Offset1) throw new Error("Length mismatch 2: " + blob.l + " !== " + Offset1);
 | 
			
		||||
	var PSet1;
 | 
			
		||||
	try { PSet1 = parse_PropertySet(blob, null); } catch(e) {/* empty */}
 | 
			
		||||
@ -4813,6 +4819,9 @@ function parse_BOF(blob, length) {
 | 
			
		||||
	switch(o.BIFFVer) {
 | 
			
		||||
		case 0x0600: /* BIFF8 */
 | 
			
		||||
		case 0x0500: /* BIFF5 */
 | 
			
		||||
		case 0x0400: /* BIFF4 */
 | 
			
		||||
		case 0x0300: /* BIFF3 */
 | 
			
		||||
		case 0x0200: /* BIFF2 */
 | 
			
		||||
		case 0x0002: case 0x0007: /* BIFF2 */
 | 
			
		||||
			break;
 | 
			
		||||
		default: if(length > 6) throw new Error("Unexpected BIFF Ver " + o.BIFFVer);
 | 
			
		||||
@ -7486,7 +7495,7 @@ function parse_FilePassHeader(blob, length, oo) {
 | 
			
		||||
function parse_FilePass(blob, length, opts) {
 | 
			
		||||
	var o = ({ Type: opts.biff >= 8 ? blob.read_shift(2) : 0 }); /* wEncryptionType */
 | 
			
		||||
	if(o.Type) parse_FilePassHeader(blob, length-2, o);
 | 
			
		||||
	else parse_XORObfuscation(blob, length-2, opts, o);
 | 
			
		||||
	else parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);
 | 
			
		||||
	return o;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -9292,8 +9301,9 @@ function parse_RgceArea_BIFF2(blob) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */
 | 
			
		||||
function parse_RgceAreaRel(blob, length) {
 | 
			
		||||
	var r=blob.read_shift(length == 12 ? 4 : 2), R=blob.read_shift(length == 12 ? 4 : 2);
 | 
			
		||||
function parse_RgceAreaRel(blob, length, opts) {
 | 
			
		||||
	if(opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);
 | 
			
		||||
	var r=blob.read_shift(opts.biff == 12 ? 4 : 2), R=blob.read_shift(opts.biff == 12 ? 4 : 2);
 | 
			
		||||
	var c=parse_ColRelU(blob, 2);
 | 
			
		||||
	var C=parse_ColRelU(blob, 2);
 | 
			
		||||
	return { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };
 | 
			
		||||
@ -9383,7 +9393,7 @@ function parse_PtgAreaErr3d(blob, length, opts) {
 | 
			
		||||
/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */
 | 
			
		||||
function parse_PtgAreaN(blob, length, opts) {
 | 
			
		||||
	var type = (blob[blob.l++] & 0x60) >> 5;
 | 
			
		||||
	var area = parse_RgceAreaRel(blob, opts && opts.biff > 8 ? 12 : 8, opts);
 | 
			
		||||
	var area = parse_RgceAreaRel(blob, length - 1, opts);
 | 
			
		||||
	return [type, area];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -9637,6 +9647,7 @@ function parse_PtgMemFunc(blob, length, opts) {
 | 
			
		||||
function parse_PtgRefErr(blob, length, opts) {
 | 
			
		||||
	var type = (blob.read_shift(1) >>> 5) & 0x03;
 | 
			
		||||
	blob.l += 4;
 | 
			
		||||
	if(opts.biff < 8) blob.l--;
 | 
			
		||||
	if(opts.biff == 12) blob.l += 2;
 | 
			
		||||
	return [type];
 | 
			
		||||
}
 | 
			
		||||
@ -9939,6 +9950,7 @@ function get_ixti(supbooks, ixti, opts) {
 | 
			
		||||
	return formula_quote_sheet_name(get_ixti_raw(supbooks, ixti, opts), opts);
 | 
			
		||||
}
 | 
			
		||||
function stringify_formula(formula/*Array<any>*/, range, cell, supbooks, opts) {
 | 
			
		||||
	var biff = (opts && opts.biff) || 8;
 | 
			
		||||
	var _range = /*range != null ? range :*/ {s:{c:0, r:0},e:{c:0, r:0}};
 | 
			
		||||
	var stack = [], e1, e2,  c, ixti=0, nameidx=0, r, sname="";
 | 
			
		||||
	if(!formula[0] || !formula[0][0]) return "";
 | 
			
		||||
@ -10010,17 +10022,17 @@ function stringify_formula(formula/*Array<any>*/, range, cell, supbooks, opts) {
 | 
			
		||||
 | 
			
		||||
			case 'PtgRef': /* [MS-XLS] 2.5.198.84 */
 | 
			
		||||
c = shift_cell_xls((f[1][1]), _range, opts);
 | 
			
		||||
				stack.push(encode_cell_xls(c));
 | 
			
		||||
				stack.push(encode_cell_xls(c, biff));
 | 
			
		||||
				break;
 | 
			
		||||
			case 'PtgRefN': /* [MS-XLS] 2.5.198.88 */
 | 
			
		||||
c = cell ? shift_cell_xls((f[1][1]), cell, opts) : (f[1][1]);
 | 
			
		||||
				stack.push(encode_cell_xls(c));
 | 
			
		||||
				stack.push(encode_cell_xls(c, biff));
 | 
			
		||||
				break;
 | 
			
		||||
			case 'PtgRef3d': /* [MS-XLS] 2.5.198.85 */
 | 
			
		||||
ixti = f[1][1]; c = shift_cell_xls((f[1][2]), _range, opts);
 | 
			
		||||
				sname = get_ixti(supbooks, ixti, opts);
 | 
			
		||||
				var w = sname; /* IE9 fails on defined names */ // eslint-disable-line no-unused-vars
 | 
			
		||||
				stack.push(sname + "!" + encode_cell_xls(c));
 | 
			
		||||
				stack.push(sname + "!" + encode_cell_xls(c, biff));
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			case 'PtgFunc': /* [MS-XLS] 2.5.198.62 */
 | 
			
		||||
@ -10028,6 +10040,7 @@ ixti = f[1][1]; c = shift_cell_xls((f[1][2]), _range, opts);
 | 
			
		||||
				/* f[1] = [argc, func, type] */
 | 
			
		||||
				var argc = (f[1][0]), func = (f[1][1]);
 | 
			
		||||
				if(!argc) argc = 0;
 | 
			
		||||
				argc &= 0x7F;
 | 
			
		||||
				var args = argc == 0 ? [] : stack.slice(-argc);
 | 
			
		||||
				stack.length -= argc;
 | 
			
		||||
				if(func === 'User') func = args.shift();
 | 
			
		||||
@ -10062,6 +10075,7 @@ ixti = f[1][1]; r = f[1][2];
 | 
			
		||||
				stack.push("SUM(" + stack.pop() + ")");
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
			case 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 */
 | 
			
		||||
			case 'PtgAttrSemi': /* [MS-XLS] 2.5.198.37 */
 | 
			
		||||
				break;
 | 
			
		||||
 | 
			
		||||
@ -10195,8 +10209,6 @@ ixti = f[1][1]; r = f[1][2];
 | 
			
		||||
			case 'PtgElfRwV': /* [MS-XLS] 2.5.198.55 */
 | 
			
		||||
				throw new Error("Unsupported ELFs");
 | 
			
		||||
 | 
			
		||||
			case 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 TODO -- find a test case*/
 | 
			
		||||
				throw new Error('Unrecognized Formula Token: ' + String(f));
 | 
			
		||||
			case 'PtgSxName': /* [MS-XLS] 2.5.198.91 TODO -- find a test case */
 | 
			
		||||
				throw new Error('Unrecognized Formula Token: ' + String(f));
 | 
			
		||||
			case 'PtgList': /* [MS-XLSB] 2.5.97.52 TODO -- find a test case */
 | 
			
		||||
@ -13153,7 +13165,7 @@ function parse_numCache(data) {
 | 
			
		||||
 | 
			
		||||
	/* 21.2.2.150 pt CT_NumVal */
 | 
			
		||||
	(data.match(/<c:pt idx="(\d*)">(.*?)<\/c:pt>/mg)||[]).forEach(function(pt) {
 | 
			
		||||
		var q = pt.match(/<c:pt idx="(.*?)"><c:v>(.*)<\/c:v><\/c:pt>/);
 | 
			
		||||
		var q = pt.match(/<c:pt idx="(\d*?)"><c:v>(.*)<\/c:v><\/c:pt>/);
 | 
			
		||||
		if(!q) return;
 | 
			
		||||
		col[+q[1]] = +q[2];
 | 
			
		||||
	});
 | 
			
		||||
@ -14207,7 +14219,7 @@ function xlml_normalize(d) {
 | 
			
		||||
 | 
			
		||||
/* TODO: Everything */
 | 
			
		||||
/* UOS uses CJK in tags */
 | 
			
		||||
var xlmlregex = /<(\/?)([^\s?>!\/:]*:|)([^\s?>]*[^\s?>\/])[^>]*>/mg;
 | 
			
		||||
var xlmlregex = /<(\/?)([^\s?>!\/:]*:|)([^\s?>:\/]+)[^>]*>/mg;
 | 
			
		||||
//var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
 | 
			
		||||
function parse_xlml_xml(d, _opts) {
 | 
			
		||||
	var opts = _opts || {};
 | 
			
		||||
@ -15396,7 +15408,7 @@ function parse_workbook(blob, options) {
 | 
			
		||||
			last_Rn = R.n;
 | 
			
		||||
			if(R.r === 2 || R.r == 12) {
 | 
			
		||||
				var rt = blob.read_shift(2); length -= 2;
 | 
			
		||||
				if(!opts.enc && rt !== RecordType) throw new Error("rt mismatch: " + rt + "!=" + RecordType);
 | 
			
		||||
				if(!opts.enc && rt !== RecordType && (((rt&0xFF)<<8)|(rt>>8)) !== RecordType) throw new Error("rt mismatch: " + rt + "!=" + RecordType);
 | 
			
		||||
				if(R.r == 12){ blob.l += 10; length -= 10; } // skip FRT
 | 
			
		||||
			}
 | 
			
		||||
			//console.error(R,blob.l,length,blob.length);
 | 
			
		||||
@ -15414,7 +15426,6 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;
 | 
			
		||||
				case 'FilePass':
 | 
			
		||||
					if(!opts.enc) blob.l = 0;
 | 
			
		||||
					opts.enc = val;
 | 
			
		||||
					if(opts.WTF) console.error(val);
 | 
			
		||||
					if(!options.password) throw new Error("File is password-protected");
 | 
			
		||||
					if(val.valid == null) throw new Error("Encryption scheme unsupported");
 | 
			
		||||
					if(!val.valid) throw new Error("Password is incorrect");
 | 
			
		||||
@ -15519,6 +15530,9 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;
 | 
			
		||||
0x0209:3,
 | 
			
		||||
0x0409:4
 | 
			
		||||
					}[RecordType] || {
 | 
			
		||||
0x0200:2,
 | 
			
		||||
0x0300:3,
 | 
			
		||||
0x0400:4,
 | 
			
		||||
0x0500:5,
 | 
			
		||||
0x0600:8,
 | 
			
		||||
0x0002:2,
 | 
			
		||||
@ -15699,7 +15713,7 @@ wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;
 | 
			
		||||
					for(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)
 | 
			
		||||
						for(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {
 | 
			
		||||
							cc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];
 | 
			
		||||
							if(cc) cc.l.Tooltip = val[1];
 | 
			
		||||
							if(cc && cc.l) cc.l.Tooltip = val[1];
 | 
			
		||||
							}
 | 
			
		||||
				} break;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user