diff --git a/Makefile b/Makefile index 642d5d9..a0035ab 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,13 @@ +LIB=xlsx DEPS=$(wildcard bits/*.js) -TARGET=xlsx.js +TARGET=$(LIB).js FMT=xlsx xlsm xlsb $(TARGET): $(DEPS) cat $^ > $@ bits/31_version.js: package.json - echo "XLSX.version = '"`grep version package.json | awk '{gsub(/[^0-9\.]/,"",$$2); print $$2}'`"';" > $@ + echo "XLSX.version = '"`grep version package.json | awk '{gsub(/[^0-9\.]/,"",$$2); print $$2}'`"';" > $@ .PHONY: clean clean: @@ -21,7 +22,7 @@ init: .PHONY: test mocha -test mocha: +test mocha: test.js mocha -R spec TESTFMT=$(patsubst %,test_%,$(FMT)) @@ -40,7 +41,7 @@ lint: $(TARGET) .PHONY: cov cov: misc/coverage.html -misc/coverage.html: xlsx.js test.js +misc/coverage.html: $(TARGET) test.js mocha --require blanket -R html-cov > misc/coverage.html .PHONY: coveralls @@ -48,5 +49,7 @@ coveralls: mocha --require blanket --reporter mocha-lcov-reporter | ./node_modules/coveralls/bin/coveralls.js .PHONY: dist -dist: xlsx.js - uglifyjs xlsx.js -o dist/xlsx.min.js --source-map dist/xlsx.min.map --preamble "$$(head -n 1 bits/00_header.js)" +dist: $(TARGET) + cp $(TARGET) dist/ + cp LICENSE dist/ + uglifyjs $(TARGET) -o dist/$(LIB).min.js --source-map dist/$(LIB).min.map --preamble "$$(head -n 1 bits/00_header.js)" diff --git a/bits/10_ssf.js b/bits/10_ssf.js index 8d48d64..ee20532 100644 --- a/bits/10_ssf.js +++ b/bits/10_ssf.js @@ -6,7 +6,7 @@ var _strrev = function(x) { return String(x).split("").reverse().join("");}; function fill(c,l) { return new Array(l+1).join(c); } function pad(v,d,c){var t=String(v);return t.length>=d?t:(fill(c||0,d-t.length)+t);} function rpad(v,d,c){var t=String(v);return t.length>=d?t:(t+fill(c||0,d-t.length));} -SSF.version = '0.5.7'; +SSF.version = '0.5.8'; /* Options */ var opts_fmt = {}; function fixopts(o){for(var y in opts_fmt) if(o[y]===undefined) o[y]=opts_fmt[y];} @@ -113,7 +113,7 @@ var general_fmt = function(v) { return o.replace("e","E").replace(/\.0*$/,"").replace(/\.([0-9]*[^0])0*$/,".$1").replace(/(E[+-])([0-9])$/,"$1"+"0"+"$2"); } if(typeof v === 'string') return v; - throw "unsupported value in General format: " + v; + throw new Error("unsupported value in General format: " + v); }; SSF._general = general_fmt; var parse_date_code = function parse_date_code(v,opts) { @@ -230,7 +230,7 @@ var write_num = function(type, fmt, val) { return o.replace("e","E"); } if(fmt[0] === "$") return "$"+write_num(type,fmt.substr(fmt[1]==' '?2:1),val); - var r, ff, aval = val < 0 ? -val : val, sign = val < 0 ? "-" : ""; + var r, rr, ff, aval = val < 0 ? -val : val, sign = val < 0 ? "-" : ""; if((r = fmt.match(/# (\?+)([ ]?)\/([ ]?)(\d+)/))) { var den = Number(r[4]), rnd = Math.round(aval * den), base = Math.floor(rnd/den); var myn = (rnd - base*den), myd = den; @@ -243,8 +243,17 @@ var write_num = function(type, fmt, val) { o = Math.round(val * Math.pow(10,r[1].length)); return String(o/Math.pow(10,r[1].length)).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.([0-9]*)$/,function($$, $1) { return "." + $1 + fill("0", r[1].length-$1.length); }); } + if((r = fmt.match(/^(0*)\.(#*)$/))) { + o = Math.round(val*Math.pow(10,r[2].length)); + return String(o * Math.pow(10,-r[2].length)).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^([-]?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":"."); + } + if((r = fmt.match(/^#,##0([.]?)$/))) return sign + commaify(String(Math.round(aval))); + if((r = fmt.match(/^#,##0\.([#0]*0)$/))) { + rr = Math.round((val-Math.floor(val))*Math.pow(10,r[1].length)); + return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(rr,r[1].length,0); + } if((r = fmt.match(/^# ([?]+)([ ]?)\/([ ]?)([?]+)/))) { - var rr = Math.min(Math.max(r[1].length, r[4].length),7); + rr = Math.min(Math.max(r[1].length, r[4].length),7); ff = frac(aval, Math.pow(10,rr)-1, true); return sign + (ff[0]||(ff[1] ? "" : "0")) + " " + (ff[1] ? pad(ff[1],rr," ") + r[2] + "/" + r[3] + rpad(ff[2],rr," "): fill(" ", 2*rr+1 + r[2].length + r[3].length)); } @@ -253,16 +262,6 @@ var write_num = function(type, fmt, val) { case "#.##": o = Math.round(val*100); return String(o/100).replace(/^([^\.]+)$/,"$1.").replace(/^0\.$/,"."); case "#,###": var x = commaify(String(Math.round(aval))); return x !== "0" ? sign + x : ""; - case "#,##0": return sign + commaify(String(Math.round(aval))); - case "#,##0.0": r = Math.round((val-Math.floor(val))*10); return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(r,1,"0"); - case "#,##0.00": r = Math.round((val-Math.floor(val))*100); return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(r,2,"0"); - case "#,##0.000": r = Math.round((val-Math.floor(val))*1000); return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(r,3,0); - case "#,##0.0000": r = Math.round((val-Math.floor(val))*10000); return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(r,4,0); - case "#,##0.00000": r = Math.round((val-Math.floor(val))*Math.pow(10,5)); return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(r,5,0); - case "#,##0.000000": r = Math.round((val-Math.floor(val))*Math.pow(10,6)); return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(r,6,0); - case "#,##0.0000000": r = Math.round((val-Math.floor(val))*Math.pow(10,7)); return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(r,7,0); - case "#,##0.00000000": r = Math.round((val-Math.floor(val))*Math.pow(10,8)); return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(r,8,0); - case "#,##0.000000000": r = Math.round((val-Math.floor(val))*Math.pow(10,9)); return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(r,9,0); default: } throw new Error("unsupported format |" + fmt + "|"); @@ -279,7 +278,7 @@ function split_fmt(fmt) { j = i+1; } out.push(fmt.slice(j)); - if(in_str !=-1) throw "Format |" + fmt + "| unterminated string at " + in_str; + if(in_str !=-1) throw new Error("Format |" + fmt + "| unterminated string at " + in_str); return out; } SSF._split = split_fmt; @@ -292,7 +291,7 @@ function eval_fmt(fmt, v, opts, flen) { switch((c = fmt[i])) { case 'G': /* General */ if(fmt.substr(i, i+6).toLowerCase() !== "general") - throw 'unrecognized character ' + fmt[i] + ' in ' + fmt; + throw new Error('unrecognized character ' + fmt[i] + ' in ' +fmt); out.push({t:'G',v:'General'}); i+=7; break; case '"': /* Literal text */ for(o="";fmt[++i] !== '"' && i < fmt.length;) o += fmt[i]; @@ -335,7 +334,7 @@ function eval_fmt(fmt, v, opts, flen) { } else { o=""; } break; /* Numbers */ - case '0': case '#': + case '0': case '#': case '.': o = c; while("0#?.,E+-%".indexOf(c=fmt[++i]) > -1) o += c; out.push({t:'n', v:o}); break; case '?': diff --git a/bits/31_version.js b/bits/31_version.js index 4eda6dc..3573c69 100644 --- a/bits/31_version.js +++ b/bits/31_version.js @@ -1 +1 @@ -XLSX.version = '0.5.7'; +XLSX.version = '0.5.8'; diff --git a/bits/58_stybin.js b/bits/58_stybin.js index c4b7116..9c16732 100644 --- a/bits/58_stybin.js +++ b/bits/58_stybin.js @@ -16,7 +16,7 @@ function parse_sty_bin(data) { for(var y in SSF._table) styles.NumberFmt[y] = SSF._table[y]; styles.CellXf = []; - var state = ""; + var state = ""; /* TODO: this should be a stack */ var pass = false; recordhopper(data, function(val, R, RT) { switch(R.n) { @@ -35,8 +35,14 @@ function parse_sty_bin(data) { case 'BrtStyle': break; /* TODO */ case 'BrtRowHdr': break; /* TODO */ case 'BrtCellMeta': break; /* ?? */ + case 'BrtDXF': break; /* TODO */ + case 'BrtMRUColor': break; /* TODO */ + case 'BrtIndexedColor': break; /* TODO */ case 'BrtBeginStyleSheet': break; case 'BrtEndStyleSheet': break; + case 'BrtBeginTableStyle': break; + case 'BrtTableStyleElement': break; + case 'BrtEndTableStyle': break; case 'BrtBeginFmts': state = "FMTS"; break; case 'BrtEndFmts': state = ""; break; case 'BrtBeginFonts': state = "FONTS"; break; @@ -57,6 +63,12 @@ function parse_sty_bin(data) { case 'BrtEndDXFs': state = ""; break; case 'BrtBeginTableStyles': state = "TABLESTYLES"; break; case 'BrtEndTableStyles': state = ""; break; + case 'BrtBeginColorPalette': state = "COLORPALETTE"; break; + case 'BrtBeginIndexedColors': state = "INDEXEDCOLORS"; break; + case 'BrtEndIndexedColors': state = ""; break; + case 'BrtBeginMRUColors': state = "MRUCOLORS"; break; + case 'BrtEndMRUColors': state = ""; break; + case 'BrtEndColorPalette': state = ""; break; case 'BrtFRTBegin': pass = true; break; case 'BrtFRTEnd': pass = false; break; //default: if(!pass) throw new Error("Unexpected record " + RT + " " + R.n); diff --git a/bits/78_wbbin.js b/bits/78_wbbin.js index caf7ddb..0fcfe8f 100644 --- a/bits/78_wbbin.js +++ b/bits/78_wbbin.js @@ -20,6 +20,11 @@ var parse_wb_bin = function(data) { case 'BrtBeginBook': break; case 'BrtFileVersion': break; case 'BrtWbProp': break; + case 'BrtACBegin': break; + case 'BrtAbsPath15': break; + case 'BrtACEnd': break; + /*case 'BrtBookProtectionIso': break;*/ + case 'BrtBookProtection': break; case 'BrtBeginBookViews': break; case 'BrtBookView': break; case 'BrtEndBookViews': break; @@ -29,15 +34,22 @@ var parse_wb_bin = function(data) { case 'BrtEndFnGroup': break; case 'BrtBeginExternals': break; case 'BrtSupSelf': break; + case 'BrtSupBookSrc': break; case 'BrtExternSheet': break; case 'BrtEndExternals': break; case 'BrtName': break; case 'BrtCalcProp': break; + case 'BrtUserBookView': break; case 'BrtBeginPivotCacheIDs': break; case 'BrtBeginPivotCacheID': break; case 'BrtEndPivotCacheID': break; case 'BrtEndPivotCacheIDs': break; + case 'BrtWebOpt': break; case 'BrtFileRecover': break; + /*case 'BrtBeginWebPubItems': break; + case 'BrtBeginWebPubItem': break; + case 'BrtEndWebPubItem': break; + case 'BrtEndWebPubItems': break;*/ case 'BrtFRTBegin': pass = true; break; case 'BrtFRTEnd': pass = false; break; case 'BrtEndBook': break; diff --git a/bits/84_defaults.js b/bits/84_defaults.js index 66945f4..762f681 100644 --- a/bits/84_defaults.js +++ b/bits/84_defaults.js @@ -9,6 +9,7 @@ function fixopts(opts) { ['bookDeps', false], /* parse calculation chains */ ['bookSheets', false], /* only try to get sheet names (no Sheets) */ ['bookProps', false], /* only try to get properties (no Sheets) */ + ['bookFiles', false], /* include raw file structure (keys, files) */ ['WTF', false] /* WTF mode (throws errors) */ ]; diff --git a/bits/85_parsezip.js b/bits/85_parsezip.js index fe5e16f..ea9bbe8 100644 --- a/bits/85_parsezip.js +++ b/bits/85_parsezip.js @@ -85,7 +85,7 @@ function parseZip(zip, opts) { if(dir.comments) parse_comments(zip, dir.comments, sheets, sheetRels, opts); - return { + out = { Directory: dir, Workbook: wb, Props: props, @@ -95,7 +95,10 @@ function parseZip(zip, opts) { SheetNames: props.SheetNames, Strings: strs, Styles: styles, - keys: keys, - files: zip.files }; + if(opts.bookFiles) { + out.keys = keys, + out.files = zip.files + } + return out; } diff --git a/bits/90_utils.js b/bits/90_utils.js index a20a188..ce166e1 100644 --- a/bits/90_utils.js +++ b/bits/90_utils.js @@ -37,7 +37,7 @@ function sheet_to_row_object_array(sheet, opts){ if(typeof val.w !== 'undefined' && !opts.raw) { row[hdr[C]] = val.w; isempty = false; } else switch(val.t){ case 's': case 'str': case 'b': case 'n': - if(val.v !== undefined) { + if(typeof val.v !== 'undefined') { row[hdr[C]] = val.v; isempty = false; } @@ -68,6 +68,7 @@ function sheet_to_csv(sheet, opts) { if(!sheet || !sheet["!ref"]) return out; var r = XLSX.utils.decode_range(sheet["!ref"]); var fs = opts.FS||",", rs = opts.RS||"\n"; + for(var R = r.s.r; R <= r.e.r; ++R) { var row = []; for(var C = r.s.c; C <= r.e.c; ++C) { @@ -90,8 +91,8 @@ function get_formulae(ws) { var x = ws[y]; var val = ""; if(x.f) val = x.f; + else if(typeof x.w !== 'undefined') val = "'" + x.w; else if(typeof x.v === 'undefined') continue; - else if(typeof x.v === 'number') val = x.v; else val = x.v; cmds.push(y + "=" + val); } diff --git a/dist/LICENSE b/dist/LICENSE new file mode 100644 index 0000000..10e5a19 --- /dev/null +++ b/dist/LICENSE @@ -0,0 +1,17 @@ +Copyright (C) 2012-2014 SheetJS + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +Except where noted, this license applies to any and all software programs and associated documentation files created by the Original Author and distributed with the Software: + +'jszip.js' is a modified version of JSZip, Copyright (c) Stuart Knightley, David Duponchel, Franz Buchinger, Ant'onio Afonso. JSZip is dual licensed and is used according to the terms of the MIT License. diff --git a/dist/xlsx.js b/dist/xlsx.js new file mode 100644 index 0000000..d1ebfe5 --- /dev/null +++ b/dist/xlsx.js @@ -0,0 +1,2963 @@ +/* xlsx.js (C) 2013-2014 SheetJS -- http://sheetjs.com */ +/* vim: set ts=2: */ +/*jshint eqnull:true */ +/* Spreadsheet Format -- jump to XLSX for the XLSX code */ +/* ssf.js (C) 2013-2014 SheetJS -- http://sheetjs.com */ +var SSF = {}; +var make_ssf = function(SSF){ +var _strrev = function(x) { return String(x).split("").reverse().join("");}; +function fill(c,l) { return new Array(l+1).join(c); } +function pad(v,d,c){var t=String(v);return t.length>=d?t:(fill(c||0,d-t.length)+t);} +function rpad(v,d,c){var t=String(v);return t.length>=d?t:(t+fill(c||0,d-t.length));} +SSF.version = '0.5.8'; +/* Options */ +var opts_fmt = {}; +function fixopts(o){for(var y in opts_fmt) if(o[y]===undefined) o[y]=opts_fmt[y];} +SSF.opts = opts_fmt; +opts_fmt.date1904 = 0; +opts_fmt.output = ""; +opts_fmt.mode = ""; +var table_fmt = { + 0: 'General', + 1: '0', + 2: '0.00', + 3: '#,##0', + 4: '#,##0.00', + 9: '0%', + 10: '0.00%', + 11: '0.00E+00', + 12: '# ?/?', + 13: '# ??/??', + 14: 'm/d/yy', + 15: 'd-mmm-yy', + 16: 'd-mmm', + 17: 'mmm-yy', + 18: 'h:mm AM/PM', + 19: 'h:mm:ss AM/PM', + 20: 'h:mm', + 21: 'h:mm:ss', + 22: 'm/d/yy h:mm', + 37: '#,##0 ;(#,##0)', + 38: '#,##0 ;[Red](#,##0)', + 39: '#,##0.00;(#,##0.00)', + 40: '#,##0.00;[Red](#,##0.00)', + 45: 'mm:ss', + 46: '[h]:mm:ss', + 47: 'mmss.0', + 48: '##0.0E+0', + 49: '@', + 56: '"上午/下午 "hh"時"mm"分"ss"秒 "', + 65535: 'General' +}; +var days = [ + ['Sun', 'Sunday'], + ['Mon', 'Monday'], + ['Tue', 'Tuesday'], + ['Wed', 'Wednesday'], + ['Thu', 'Thursday'], + ['Fri', 'Friday'], + ['Sat', 'Saturday'] +]; +var months = [ + ['J', 'Jan', 'January'], + ['F', 'Feb', 'February'], + ['M', 'Mar', 'March'], + ['A', 'Apr', 'April'], + ['M', 'May', 'May'], + ['J', 'Jun', 'June'], + ['J', 'Jul', 'July'], + ['A', 'Aug', 'August'], + ['S', 'Sep', 'September'], + ['O', 'Oct', 'October'], + ['N', 'Nov', 'November'], + ['D', 'Dec', 'December'] +]; +var frac = function frac(x, D, mixed) { + var sgn = x < 0 ? -1 : 1; + var B = x * sgn; + var P_2 = 0, P_1 = 1, P = 0; + var Q_2 = 1, Q_1 = 0, Q = 0; + var A = Math.floor(B); + while(Q_1 < D) { + A = Math.floor(B); + P = A * P_1 + P_2; + Q = A * Q_1 + Q_2; + if((B - A) < 0.0000000005) break; + B = 1 / (B - A); + P_2 = P_1; P_1 = P; + Q_2 = Q_1; Q_1 = Q; + } + if(Q > D) { Q = Q_1; P = P_1; } + if(Q > D) { Q = Q_2; P = P_2; } + if(!mixed) return [0, sgn * P, Q]; + if(Q===0) throw "Unexpected state: "+P+" "+P_1+" "+P_2+" "+Q+" "+Q_1+" "+Q_2; + var q = Math.floor(sgn * P/Q); + return [q, sgn*P - q*Q, Q]; +}; +var general_fmt = function(v) { + if(typeof v === 'boolean') return v ? "TRUE" : "FALSE"; + if(typeof v === 'number') { + var o, V = v < 0 ? -v : v; + if(V >= 0.1 && V < 1) o = v.toPrecision(9); + else if(V >= 0.01 && V < 0.1) o = v.toPrecision(8); + else if(V >= 0.001 && V < 0.01) o = v.toPrecision(7); + else if(V >= 0.0001 && V < 0.001) o = v.toPrecision(6); + else if(V >= Math.pow(10,10) && V < Math.pow(10,11)) o = v.toFixed(10).substr(0,12); + else if(V > Math.pow(10,-9) && V < Math.pow(10,11)) { + o = v.toFixed(12).replace(/(\.[0-9]*[1-9])0*$/,"$1").replace(/\.$/,""); + if(o.length > 11+(v<0?1:0)) o = v.toPrecision(10); + if(o.length > 11+(v<0?1:0)) o = v.toExponential(5); + } + else { + o = v.toFixed(11).replace(/(\.[0-9]*[1-9])0*$/,"$1"); + if(o.length > 11 + (v<0?1:0)) o = v.toPrecision(6); + } + o = o.replace(/(\.[0-9]*[1-9])0+e/,"$1e").replace(/\.0*e/,"e"); + return o.replace("e","E").replace(/\.0*$/,"").replace(/\.([0-9]*[^0])0*$/,".$1").replace(/(E[+-])([0-9])$/,"$1"+"0"+"$2"); + } + if(typeof v === 'string') return v; + throw new Error("unsupported value in General format: " + v); +}; +SSF._general = general_fmt; +var parse_date_code = function parse_date_code(v,opts) { + var date = Math.floor(v), time = Math.floor(86400 * (v - date)+1e-6), dow=0; + var dout=[], out={D:date, T:time, u:86400*(v-date)-time}; fixopts(opts = (opts||{})); + if(opts.date1904) date += 1462; + if(date > 2958465) return null; + if(date === 60) {dout = [1900,2,29]; dow=3;} + else if(date === 0) {dout = [1900,1,0]; dow=6;} + else { + if(date > 60) --date; + /* 1 = Jan 1 1900 */ + var d = new Date(1900,0,1); + d.setDate(d.getDate() + date - 1); + dout = [d.getFullYear(), d.getMonth()+1,d.getDate()]; + dow = d.getDay(); + if(/* opts.mode === 'excel' && */ date < 60) dow = (dow + 6) % 7; + } + out.y = dout[0]; out.m = dout[1]; out.d = dout[2]; + out.S = time % 60; time = Math.floor(time / 60); + out.M = time % 60; time = Math.floor(time / 60); + out.H = time; + out.q = dow; + return out; +}; +SSF.parse_date_code = parse_date_code; +/*jshint -W086 */ +var write_date = function(type, fmt, val) { + if(val < 0) return ""; + var o; + switch(type) { + case 'y': switch(fmt) { /* year */ + case 'y': case 'yy': return pad(val.y % 100,2); + default: return pad(val.y % 10000,4); + } + case 'm': switch(fmt) { /* month */ + case 'm': return val.m; + case 'mm': return pad(val.m,2); + case 'mmm': return months[val.m-1][1]; + case 'mmmmm': return months[val.m-1][0]; + default: return months[val.m-1][2]; + } + case 'd': switch(fmt) { /* day */ + case 'd': return val.d; + case 'dd': return pad(val.d,2); + case 'ddd': return days[val.q][0]; + default: return days[val.q][1]; + } + case 'h': switch(fmt) { /* 12-hour */ + case 'h': return 1+(val.H+11)%12; + case 'hh': return pad(1+(val.H+11)%12, 2); + default: throw 'bad hour format: ' + fmt; + } + case 'H': switch(fmt) { /* 24-hour */ + case 'h': return val.H; + case 'hh': return pad(val.H, 2); + default: throw 'bad hour format: ' + fmt; + } + case 'M': switch(fmt) { /* minutes */ + case 'm': return val.M; + case 'mm': return pad(val.M, 2); + default: throw 'bad minute format: ' + fmt; + } + case 's': switch(fmt) { /* seconds */ + case 's': return Math.round(val.S+val.u); + case 'ss': return pad(Math.round(val.S+val.u), 2); + case 'ss.0': o = pad(Math.round(10*(val.S+val.u)),3); return o.substr(0,2)+"." + o.substr(2); + case 'ss.00': o = pad(Math.round(100*(val.S+val.u)),4); return o.substr(0,2)+"." + o.substr(2); + case 'ss.000': o = pad(Math.round(1000*(val.S+val.u)),5); return o.substr(0,2)+"." + o.substr(2); + default: throw 'bad second format: ' + fmt; + } + case 'Z': switch(fmt) { + case '[h]': case '[hh]': o = val.D*24+val.H; break; + case '[m]': case '[mm]': o = (val.D*24+val.H)*60+val.M; break; + case '[s]': case '[ss]': o = ((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u); break; + default: throw 'bad abstime format: ' + fmt; + } return fmt.length === 3 ? o : pad(o, 2); + /* TODO: handle the ECMA spec format ee -> yy */ + case 'e': { return val.y; } break; + } +}; +/*jshint +W086 */ +var commaify = function(s) { return _strrev(_strrev(s).replace(/.../g,"$&,")).replace(/^,/,""); }; +var write_num = function(type, fmt, val) { + if(type === '(') { + var ffmt = fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,""); + if(val >= 0) return write_num('n', ffmt, val); + return '(' + write_num('n', ffmt, -val) + ')'; + } + var mul = 0, o; + fmt = fmt.replace(/%/g,function(x) { mul++; return ""; }); + if(mul !== 0) return write_num(type, fmt, val * Math.pow(10,2*mul)) + fill("%",mul); + if(fmt.indexOf("E") > -1) { + var idx = fmt.indexOf("E") - fmt.indexOf(".") - 1; + if(fmt.match(/^#+0.0E\+0$/)) { + var period = fmt.indexOf("."); if(period === -1) period=fmt.indexOf('E'); + var ee = (Number(val.toExponential(0).substr(2+(val<0))))%period; + if(ee < 0) ee += period; + o = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period); + if(!o.match(/[Ee]/)) { + var fakee = (Number(val.toExponential(0).substr(2+(val<0)))); + if(o.indexOf(".") === -1) o = o[0] + "." + o.substr(1) + "E+" + (fakee - o.length+ee); + else o += "E+" + (fakee - ee); + while(o.substr(0,2) === "0.") { + o = o[0] + o.substr(2,period) + "." + o.substr(2+period); + o = o.replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0."); + } + o = o.replace(/\+-/,"-"); + } + o = o.replace(/^([+-]?)([0-9]*)\.([0-9]*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + "." + $3.substr(ee) + "E"; }); + } else o = val.toExponential(idx); + if(fmt.match(/E\+00$/) && o.match(/e[+-][0-9]$/)) o = o.substr(0,o.length-1) + "0" + o[o.length-1]; + if(fmt.match(/E\-/) && o.match(/e\+/)) o = o.replace(/e\+/,"e"); + return o.replace("e","E"); + } + if(fmt[0] === "$") return "$"+write_num(type,fmt.substr(fmt[1]==' '?2:1),val); + var r, rr, ff, aval = val < 0 ? -val : val, sign = val < 0 ? "-" : ""; + if((r = fmt.match(/# (\?+)([ ]?)\/([ ]?)(\d+)/))) { + var den = Number(r[4]), rnd = Math.round(aval * den), base = Math.floor(rnd/den); + var myn = (rnd - base*den), myd = den; + return sign + (base?base:"") + " " + (myn === 0 ? fill(" ", r[1].length + 1 + r[4].length) : pad(myn,r[1].length," ") + r[2] + "/" + r[3] + pad(myd,r[4].length)); + } + if(fmt.match(/^#+0+$/)) fmt = fmt.replace(/#/g,""); + if(fmt.match(/^00+$/)) return (val<0?"-":"")+pad(Math.round(aval),fmt.length); + if(fmt.match(/^[#?]+$/)) return String(Math.round(val)).replace(/^0$/,""); + if((r = fmt.match(/^#*0+\.(0+)/))) { + o = Math.round(val * Math.pow(10,r[1].length)); + return String(o/Math.pow(10,r[1].length)).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.([0-9]*)$/,function($$, $1) { return "." + $1 + fill("0", r[1].length-$1.length); }); + } + if((r = fmt.match(/^(0*)\.(#*)$/))) { + o = Math.round(val*Math.pow(10,r[2].length)); + return String(o * Math.pow(10,-r[2].length)).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^([-]?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":"."); + } + if((r = fmt.match(/^#,##0([.]?)$/))) return sign + commaify(String(Math.round(aval))); + if((r = fmt.match(/^#,##0\.([#0]*0)$/))) { + rr = Math.round((val-Math.floor(val))*Math.pow(10,r[1].length)); + return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(rr,r[1].length,0); + } + if((r = fmt.match(/^# ([?]+)([ ]?)\/([ ]?)([?]+)/))) { + rr = Math.min(Math.max(r[1].length, r[4].length),7); + ff = frac(aval, Math.pow(10,rr)-1, true); + return sign + (ff[0]||(ff[1] ? "" : "0")) + " " + (ff[1] ? pad(ff[1],rr," ") + r[2] + "/" + r[3] + rpad(ff[2],rr," "): fill(" ", 2*rr+1 + r[2].length + r[3].length)); + } + switch(fmt) { + case "0": case "#0": return Math.round(val); + case "#.##": o = Math.round(val*100); + return String(o/100).replace(/^([^\.]+)$/,"$1.").replace(/^0\.$/,"."); + case "#,###": var x = commaify(String(Math.round(aval))); return x !== "0" ? sign + x : ""; + default: + } + throw new Error("unsupported format |" + fmt + "|"); +}; +function split_fmt(fmt) { + var out = []; + var in_str = -1; + for(var i = 0, j = 0; i < fmt.length; ++i) { + if(in_str != -1) { if(fmt[i] == '"') in_str = -1; continue; } + if(fmt[i] == "_" || fmt[i] == "*" || fmt[i] == "\\") { ++i; continue; } + if(fmt[i] == '"') { in_str = i; continue; } + if(fmt[i] != ";") continue; + out.push(fmt.slice(j,i)); + j = i+1; + } + out.push(fmt.slice(j)); + if(in_str !=-1) throw new Error("Format |" + fmt + "| unterminated string at " + in_str); + return out; +} +SSF._split = split_fmt; +function eval_fmt(fmt, v, opts, flen) { + var out = [], o = "", i = 0, c = "", lst='t', q = {}, dt; + fixopts(opts = (opts || {})); + var hr='H'; + /* Tokenize */ + while(i < fmt.length) { + switch((c = fmt[i])) { + case 'G': /* General */ + if(fmt.substr(i, i+6).toLowerCase() !== "general") + throw new Error('unrecognized character ' + fmt[i] + ' in ' +fmt); + out.push({t:'G',v:'General'}); i+=7; break; + case '"': /* Literal text */ + for(o="";fmt[++i] !== '"' && i < fmt.length;) o += fmt[i]; + out.push({t:'t', v:o}); ++i; break; + case '\\': var w = fmt[++i], t = "()".indexOf(w) === -1 ? 't' : w; + out.push({t:t, v:w}); ++i; break; + case '_': out.push({t:'t', v:" "}); i+=2; break; + case '@': /* Text Placeholder */ + out.push({t:'T', v:v}); ++i; break; + /* Dates */ + case 'M': case 'D': case 'Y': case 'H': case 'S': case 'E': + c = c.toLowerCase(); + /* falls through */ + case 'm': case 'd': case 'y': case 'h': case 's': case 'e': + if(v < 0) return ""; + if(!dt) dt = parse_date_code(v, opts); + if(!dt) return ""; + o = fmt[i]; while((fmt[++i]||"").toLowerCase() === c) o+=c; + if(c === 's' && fmt[i] === '.' && fmt[i+1] === '0') { o+='.'; while(fmt[++i] === '0') o+= '0'; } + if(c === 'm' && lst.toLowerCase() === 'h') c = 'M'; /* m = minute */ + if(c === 'h') c = hr; + o = o.toLowerCase(); + q={t:c, v:o}; out.push(q); lst = c; break; + case 'A': + if(!dt) dt = parse_date_code(v, opts); + if(!dt) return ""; + q={t:c,v:"A"}; + if(fmt.substr(i, 3) === "A/P") {q.v = dt.H >= 12 ? "P" : "A"; q.t = 'T'; hr='h';i+=3;} + else if(fmt.substr(i,5) === "AM/PM") { q.v = dt.H >= 12 ? "PM" : "AM"; q.t = 'T'; i+=5; hr='h'; } + else { q.t = "t"; i++; } + out.push(q); lst = c; break; + case '[': /* TODO: Fix this -- ignore all conditionals and formatting */ + o = c; + while(fmt[i++] !== ']' && i < fmt.length) o += fmt[i]; + if(o.substr(-1) !== ']') throw 'unterminated "[" block: |' + o + '|'; + if(o.match(/\[[HhMmSs]*\]/)) { + if(!dt) dt = parse_date_code(v, opts); + if(!dt) return ""; + out.push({t:'Z', v:o.toLowerCase()}); + } else { o=""; } + break; + /* Numbers */ + case '0': case '#': case '.': + o = c; while("0#?.,E+-%".indexOf(c=fmt[++i]) > -1) o += c; + out.push({t:'n', v:o}); break; + case '?': + o = fmt[i]; while(fmt[++i] === c) o+=c; + q={t:c, v:o}; out.push(q); lst = c; break; + case '*': ++i; if(fmt[i] == ' ') ++i; break; // ** + case '(': case ')': out.push({t:(flen===1?'t':c),v:c}); ++i; break; + case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': + o = fmt[i]; while("0123456789".indexOf(fmt[++i]) > -1) o+=fmt[i]; + out.push({t:'D', v:o}); break; + case ' ': out.push({t:c,v:c}); ++i; break; + default: + if(",$-+/():!^&'~{}<>=€".indexOf(c) === -1) + throw 'unrecognized character ' + fmt[i] + ' in ' + fmt; + out.push({t:'t', v:c}); ++i; break; + } + } + + /* walk backwards */ + for(i=out.length-1, lst='t'; i >= 0; --i) { + switch(out[i].t) { + case 'h': case 'H': out[i].t = hr; lst='h'; break; + case 'd': case 'y': case 's': case 'M': case 'e': lst=out[i].t; break; + case 'm': if(lst === 's') out[i].t = 'M'; break; + } + } + + /* replace fields */ + for(i=0; i < out.length; ++i) { + switch(out[i].t) { + case 't': case 'T': case ' ': case 'D': break; + case 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case 'e': case 'Z': + out[i].v = write_date(out[i].t, out[i].v, dt); + out[i].t = 't'; break; + case 'n': case '(': case '?': + var jj = i+1; + while(out[jj] && ("?D".indexOf(out[jj].t) > -1 || (" t".indexOf(out[jj].t) > -1 && "?t".indexOf((out[jj+1]||{}).t)>-1 && (out[jj+1].t == '?' || out[jj+1].v == '/')) || out[i].t == '(' && (out[jj].t == ')' || out[jj].t == 'n') || out[jj].t == 't' && (out[jj].v == '/' || '$€'.indexOf(out[jj].v) > -1 || (out[jj].v == ' ' && (out[jj+1]||{}).t == '?')))) { + out[i].v += out[jj].v; + delete out[jj]; ++jj; + } + out[i].v = write_num(out[i].t, out[i].v, (flen >1 && v < 0 && i>0 && out[i-1].v == "-" ? -v:v)); + out[i].t = 't'; + i = jj-1; break; + case 'G': out[i].t = 't'; out[i].v = general_fmt(v,opts); break; + } + } + return out.map(function(x){return x.v;}).join(""); +} +SSF._eval = eval_fmt; +function choose_fmt(fmt, v, o) { + if(typeof fmt === 'number') fmt = ((o&&o.table) ? o.table : table_fmt)[fmt]; + if(typeof fmt === "string") fmt = split_fmt(fmt); + var l = fmt.length; + if(l<4 && fmt[l-1].indexOf("@")>-1) --l; + switch(fmt.length) { + case 1: fmt = fmt[0].indexOf("@")>-1 ? ["General", "General", "General", fmt[0]] : [fmt[0], fmt[0], fmt[0], "@"]; break; + case 2: fmt = fmt[1].indexOf("@")>-1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], "@"]; break; + case 3: fmt = fmt[2].indexOf("@")>-1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], "@"]; break; + case 4: break; + default: throw "cannot find right format for |" + fmt + "|"; + } + if(typeof v !== "number") return [fmt.length, fmt[3]]; + return [l, v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2]]; +} +var format = function format(fmt,v,o) { + fixopts(o = (o||{})); + if(typeof fmt === "string" && fmt.toLowerCase() === "general") return general_fmt(v, o); + if(typeof fmt === 'number') fmt = (o.table || table_fmt)[fmt]; + var f = choose_fmt(fmt, v, o); + if(f[1].toLowerCase() === "general") return general_fmt(v,o); + if(v === true) v = "TRUE"; if(v === false) v = "FALSE"; + if(v === "" || typeof v === "undefined") return ""; + return eval_fmt(f[1], v, o, f[0]); +}; + +SSF._choose = choose_fmt; +SSF._table = table_fmt; +SSF.load = function(fmt, idx) { table_fmt[idx] = fmt; }; +SSF.format = format; +SSF.get_table = function() { return table_fmt; }; +SSF.load_table = function(tbl) { for(var i=0; i!=0x0188; ++i) if(tbl[i]) SSF.load(tbl[i], i); }; +}; +make_ssf(SSF); +var XLSX = {}; +(function(XLSX){ +XLSX.version = '0.5.8'; +var current_codepage, current_cptable, cptable; +if(typeof module !== "undefined" && typeof require !== 'undefined') { + if(typeof cptable === 'undefined') cptable = require('codepage'); + current_codepage = 1252; current_cptable = cptable[1252]; +} +function reset_cp() { + current_codepage = 1252; if(typeof cptable !== 'undefined') current_cptable = cptable[1252]; +} +function _getchar(x) { return String.fromCharCode(x); } + +function getdata(data) { + if(!data) return null; + if(data.data) return data.name.substr(-4) !== ".bin" ? data.data : data.data.split("").map(function(x) { return x.charCodeAt(0); }); + if(data.asNodeBuffer && typeof Buffer !== 'undefined' && data.name.substr(-4)===".bin") return data.asNodeBuffer(); + if(data.asBinary && data.name.substr(-4) !== ".bin") return data.asBinary(); + if(data._data && data._data.getContent) { + /* TODO: something far more intelligent */ + if(data.name.substr(-4) === ".bin") return Array.prototype.slice.call(data._data.getContent()); + return Array.prototype.slice.call(data._data.getContent(),0).map(function(x) { return String.fromCharCode(x); }).join(""); + } + return null; +} + +function getzipfile(zip, file) { + var f = file; if(zip.files[f]) return zip.files[f]; + f = file.toLowerCase(); if(zip.files[f]) return zip.files[f]; + f = f.replace(/\//g,'\\'); if(zip.files[f]) return zip.files[f]; + throw new Error("Cannot find file " + file + " in zip"); +} + +function getzipdata(zip, file, safe) { + if(!safe) return getdata(getzipfile(zip, file)); + if(!file) return null; + try { return getzipdata(zip, file); } catch(e) { return null; } +} + +var _fs, jszip; +if(typeof JSZip !== 'undefined') jszip = JSZip; +if (typeof exports !== 'undefined') { + if (typeof module !== 'undefined' && module.exports) { + if(typeof Buffer !== 'undefined' && typeof jszip === 'undefined') jszip = require('jszip'); + if(typeof jszip === 'undefined') jszip = require('./jszip').JSZip; + _fs = require('fs'); + } +} +var attregexg=/(\w+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g; +var attregex=/(\w+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/; +function parsexmltag(tag) { + var words = tag.split(/\s+/); + var z = {'0': words[0]}; + if(words.length === 1) return z; + (tag.match(attregexg) || []).map( + function(x){var y=x.match(attregex); z[y[1]] = y[2].substr(1,y[2].length-2); }); + return z; +} + +function evert(obj) { + var o = {}; + Object.keys(obj).forEach(function(k) { if(obj.hasOwnProperty(k)) o[obj[k]] = k; }); + return o; +} + +var encodings = { + '"': '"', + ''': "'", + '>': '>', + '<': '<', + '&': '&' +}; +var rencoding = evert(encodings); +var rencstr = "&<>'\"".split(""); + +// TODO: CP remap (need to read file version to determine OS) +function unescapexml(text){ + var s = text + ''; + for(var y in encodings) s = s.replace(new RegExp(y,'g'), encodings[y]); + return s.replace(/_x([0-9a-fA-F]*)_/g,function(m,c) {return _chr(parseInt(c,16));}); +} +function escapexml(text){ + var s = text + ''; + rencstr.forEach(function(y){s=s.replace(new RegExp(y,'g'), rencoding[y]);}); + return s; +} + + +function parsexmlbool(value, tag) { + switch(value) { + case '0': case 0: case 'false': case 'FALSE': return false; + case '1': case 1: case 'true': case 'TRUE': return true; + default: throw "bad boolean value " + value + " in "+(tag||"?"); + } +} + +var utf8read = function(orig) { + var out = "", i = 0, c = 0, c1 = 0, c2 = 0, c3 = 0; + while (i < orig.length) { + c = orig.charCodeAt(i++); + if (c < 128) out += _chr(c); + else { + c2 = orig.charCodeAt(i++); + if (c>191 && c<224) out += _chr((c & 31) << 6 | c2 & 63); + else { + c3 = orig.charCodeAt(i++); + out += _chr((c & 15) << 12 | (c2 & 63) << 6 | c3 & 63); + } + } + } + return out; +}; + +// matches ... extracts content +function matchtag(f,g) {return new RegExp('<'+f+'(?: xml:space="preserve")?>([^\u2603]*)',(g||"")+"m");} + +function parseVector(data) { + var h = parsexmltag(data); + + var matches = data.match(new RegExp("(.*?)", 'g'))||[]; + if(matches.length != h.size) throw "unexpected vector length " + matches.length + " != " + h.size; + var res = []; + matches.forEach(function(x) { + var v = x.replace(/<[/]?vt:variant>/g,"").match(/]*)>(.*)> 1; + var bits = -7, d = isLE ? -1 : 1, i = isLE ? (nl - 1) : 0, s = buf[idx + i]; + + i += d; + e = s & ((1 << (-bits)) - 1); s >>>= (-bits); bits += el; + for (; bits > 0; e = e * 256 + buf[idx + i], i += d, bits -= 8); + m = e & ((1 << (-bits)) - 1); e >>>= (-bits); bits += ml; + for (; bits > 0; m = m * 256 + buf[idx + i], i += d, bits -= 8); + if (e === eMax) return m ? NaN : ((s ? -1 : 1) * Infinity); + else if (e === 0) e = 1 - eBias; + else { m = m + Math.pow(2, ml); e = e - eBias; } + return (s ? -1 : 1) * m * Math.pow(2, e - ml); +} + +var __toBuffer; +if(typeof Buffer !== "undefined") { + Buffer.prototype.hexlify= function() { return this.toString('hex'); }; + __toBuffer = function(bufs) { return Buffer.concat(bufs[0]); }; +} else { + __toBuffer = function(bufs) { + var x = []; + for(var i = 0; i != bufs[0].length; ++i) { x = x.concat(bufs[0][i]); } + return x; + }; +} + +var __readUInt8 = function(b, idx) { return b.readUInt8 ? b.readUInt8(idx) : b[idx]; }; +var __readUInt16LE = function(b, idx) { return b.readUInt16LE ? b.readUInt16LE(idx) : b[idx+1]*(1<<8)+b[idx]; }; +var __readInt16LE = function(b, idx) { var u = __readUInt16LE(b,idx); if(!(u & 0x8000)) return u; return (0xffff - u + 1) * -1; }; +var __readUInt32LE = function(b, idx) { return b.readUInt32LE ? b.readUInt32LE(idx) : b[idx+3]*(1<<24)+b[idx+2]*(1<<16)+b[idx+1]*(1<<8)+b[idx]; }; +var __readInt32LE = function(b, idx) { if(b.readInt32LE) return b.readInt32LE(idx); var u = __readUInt32LE(b,idx); if(!(u & 0x80000000)) return u; return (0xffffffff - u + 1) * -1; }; +var __readDoubleLE = function(b, idx) { return b.readDoubleLE ? b.readDoubleLE(idx) : readIEEE754(b, idx||0);}; + + +function ReadShift(size, t) { + var o, w, vv, i, loc; t = t || 'u'; + if(size === 'ieee754') { size = 8; t = 'f'; } + switch(size) { + case 1: o = __readUInt8(this, this.l); break; + case 2: o=(t==='u' ? __readUInt16LE : __readInt16LE)(this, this.l); break; + case 4: o = __readUInt32LE(this, this.l); break; + case 8: if(t === 'f') { o = __readDoubleLE(this, this.l); break; } + /* falls through */ + case 16: o = this.toString('hex', this.l,this.l+size); break; + + /* sbcs and dbcs support continue records in the SST way TODO codepages */ + /* TODO: DBCS http://msdn.microsoft.com/en-us/library/cc194788.aspx */ + case 'dbcs': size = 2*t; o = ""; loc = this.l; + for(i = 0; i != t; ++i) { + o += _getchar(__readUInt16LE(this, loc)); + loc+=2; + } break; + + case 'sbcs': size = t; o = ""; loc = this.l; + for(i = 0; i != t; ++i) { + o += _getchar(__readUInt8(this, loc)); + loc+=1; + } break; + } + this.l+=size; return o; +} + +function prep_blob(blob, pos) { + blob.read_shift = ReadShift.bind(blob); + blob.l = pos || 0; + var read = ReadShift.bind(blob); + return [read]; +} + +function parsenoop(blob, length) { blob.l += length; } +/* [MS-XLSB] 2.1.4 Record */ +var recordhopper = function(data, cb, opts) { + var tmpbyte, cntbyte, length; + prep_blob(data, data.l || 0); + while(data.l < data.length) { + var RT = data.read_shift(1); + if(RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F)<<7); + var R = RecordEnum[RT] || RecordEnum[0xFFFF]; + tmpbyte = data.read_shift(1); + length = tmpbyte & 0x7F; + for(cntbyte = 1; cntbyte <4 && (tmpbyte & 0x80); ++cntbyte) length += ((tmpbyte = data.read_shift(1)) & 0x7F)<<(7*cntbyte); + var d = R.f(data, length, opts); + if(cb(d, R, RT)) return; + } +}; + +/* [MS-XLSB] 2.5.143 */ +var parse_StrRun = function(data, length) { + return { ich: data.read_shift(2), ifnt: data.read_shift(2) }; +}; + +/* [MS-XLSB] 2.1.7.121 */ +var parse_RichStr = function(data, length) { + var start = data.l; + var flags = data.read_shift(1); + var fRichStr = flags & 1, fExtStr = flags & 2; + var str = parse_XLWideString(data); + var rgsStrRun = []; + var z = { + t: str, + r:"" + escapexml(str) + "", + h: str + }; + if(fRichStr) { + /* TODO: formatted string */ + var dwSizeStrRun = data.read_shift(4); + for(var i = 0; i != dwSizeStrRun; ++i) rgsStrRun.push(parse_StrRun(data)); + } + if(fExtStr) { + /* TODO: phonetic string */ + } + data.l = start + length; + return z; +}; + +/* [MS-XLSB] 2.5.9 */ +function parse_Cell(data) { + var col = data.read_shift(4); + var iStyleRef = data.read_shift(2); + iStyleRef += data.read_shift(1) <<16; + var fPhShow = data.read_shift(1); + return { c:col, iStyleRef: iStyleRef }; +} + +/* [MS-XLSB] 2.5.21 */ +var parse_CodeName = function(data, length) { return parse_XLWideString(data, length); }; + +/* [MS-XLSB] 2.5.114 */ +var parse_RelID = function(data, length) { return parse_XLNullableWideString(data, length); }; + +/* [MS-XLSB] 2.5.122 */ +function parse_RkNumber(data) { + var b = data.slice(data.l, data.l+4); + var fX100 = b[0] & 1, fInt = b[0] & 2; + data.l+=4; + b[0] &= ~3; + var RK = fInt === 0 ? __readDoubleLE([0,0,0,0,b[0],b[1],b[2],b[3]],0) : __readInt32LE(b,0)>>2; + return fX100 ? RK/100 : RK; +} + +/* [MS-XLSB] 2.5.153 */ +var parse_UncheckedRfX = function(data) { + var cell = {s: {}, e: {}}; + cell.s.r = data.read_shift(4); + cell.e.r = data.read_shift(4); + cell.s.c = data.read_shift(4); + cell.e.c = data.read_shift(4); + return cell; +}; + +/* [MS-XLSB] 2.5.166 */ +var parse_XLNullableWideString = function(data) { + var cchCharacters = data.read_shift(4); + return cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? "" : data.read_shift('dbcs', cchCharacters); +}; + +/* [MS-XLSB] 2.5.168 */ +var parse_XLWideString = function(data) { + var cchCharacters = data.read_shift(4); + return cchCharacters === 0 ? "" : data.read_shift('dbcs', cchCharacters); +}; + +/* [MS-XLSB] 2.5.171 */ +function parse_Xnum(data, length) { return data.read_shift('ieee754'); } + +/* [MS-XLSB] 2.5.198.2 */ +var BErr = { + 0x00: "#NULL!", + 0x07: "#DIV/0!", + 0x0F: "#VALUE!", + 0x17: "#REF!", + 0x1D: "#NAME?", + 0x24: "#NUM!", + 0x2A: "#N/A", + 0x2B: "#GETTING_DATA", + 0xFF: "#WTF?" +}; +var RBErr = evert(BErr); + +/* Parse a list of tags */ +var parse_rs = (function() { + var tregex = matchtag("t"), rpregex = matchtag("rPr"); + /* 18.4.7 rPr CT_RPrElt */ + var parse_rpr = function(rpr, intro, outro) { + var font = {}; + (rpr.match(/<[^>]*>/g)||[]).forEach(function(x) { + var y = parsexmltag(x); + switch(y[0]) { + /* 18.8.12 condense CT_BooleanProperty */ + /* ** not required . */ + case '': break; + + /* 18.4.1 charset CT_IntProperty TODO */ + case '': break; + + /* 18.4.5 rFont CT_FontName */ + case '': font.strike = 1; break; + case '': break; + + /* 18.4.13 u CT_UnderlineProperty */ + case '': font.u = 1; break; + case '': break; + + /* 18.8.2 b */ + case '': font.b = 1; break; + case '': break; + + /* 18.8.26 i */ + case '': font.i = 1; break; + case '': break; + + /* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */ + case ''); + outro.push(""); + }; + + /* 18.4.4 r CT_RElt */ + function parse_r(r) { + var terms = [[],"",[]]; + /* 18.4.12 t ST_Xstring */ + var t = r.match(tregex); + if(!isval(t)) return ""; + terms[1] = t[1]; + + var rpr = r.match(rpregex); + if(isval(rpr)) parse_rpr(rpr[1], terms[0], terms[2]); + return terms[0].join("") + terms[1].replace(/\r\n/g,'
') + terms[2].join(""); + } + return function(rs) { + return rs.replace(//g,"").split(/<\/r>/).map(parse_r).join(""); + }; +})(); + +/* 18.4.8 si CT_Rst */ +var parse_si = function(x, opts) { + var html = opts ? opts.cellHTML : true; + var z = {}; + if(!x) return null; + var y; + /* 18.4.12 t ST_Xstring (Plaintext String) */ + if(x[1] === 't') { + z.t = utf8read(unescapexml(x.substr(x.indexOf(">")+1).split(/<\/t>/)[0])); + z.r = x; + if(html) z.h = z.t; + } + /* 18.4.4 r CT_RElt (Rich Text Run) */ + else if((y = x.match(//))) { + z.r = x; + /* TODO: properly parse (note: no other valid child can have body text) */ + z.t = utf8read(unescapexml(x.replace(/<[^>]*>/gm,""))); + if(html) z.h = parse_rs(x); + } + /* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */ + /* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */ + return z; +}; + +/* 18.4 Shared String Table */ +var parse_sst_xml = function(data, opts) { + var s = []; + /* 18.4.9 sst CT_Sst */ + var sst = data.match(new RegExp("]*)>([\\s\\S]*)<\/sst>","m")); + if(isval(sst)) { + s = sst[2].replace(/<(?:si|sstItem)>/g,"").split(/<\/(?:si|sstItem)>/).map(function(x) { return parse_si(x, opts); }).filter(function(x) { return x; }); + sst = parsexmltag(sst[1]); s.Count = sst.count; s.Unique = sst.uniqueCount; + } + return s; +}; + +/* [MS-XLSB] 2.4.219 BrtBeginSst */ +var parse_BrtBeginSst = function(data, length) { + return [data.read_shift(4), data.read_shift(4)]; +}; + +/* [MS-XLSB] 2.1.7.45 Shared Strings */ +var parse_sst_bin = function(data) { + var s = []; + recordhopper(data, function(val, R) { + switch(R.n) { + case 'BrtBeginSst': s.Count = val[0]; s.Unique = val[1]; break; + case 'BrtSSTItem': s.push(val); break; + case 'BrtEndSst': return true; + default: throw new Error("Unexpected record " + R.n); + } + }); + return s; +}; +var styles = {}; // shared styles + +/* 18.8.31 numFmts CT_NumFmts */ +function parseNumFmts(t) { + styles.NumberFmt = []; + for(var y in SSF._table) styles.NumberFmt[y] = SSF._table[y]; + t[0].match(/<[^>]*>/g).forEach(function(x) { + var y = parsexmltag(x); + switch(y[0]) { + case '': case '': break; + case ']*>/g).forEach(function(x) { + var y = parsexmltag(x); + switch(y[0]) { + case '': case '': break; + + /* 18.8.45 xf CT_Xf */ + case '': break; + + /* 18.8.1 alignment CT_CellAlignment */ + case '': case '': break; + + case '': break; + case ']*)>.*<\/numFmts>/))) parseNumFmts(t); + + /* fonts CT_Fonts ? */ + /* fills CT_Fills ? */ + /* borders CT_Borders ? */ + /* cellStyleXfs CT_CellStyleXfs ? */ + + /* cellXfs CT_CellXfs ? */ + if((t=data.match(/]*)>.*<\/cellXfs>/))) parseCXfs(t); + + /* dxfs CT_Dxfs ? */ + /* tableStyles CT_TableStyles ? */ + /* colors CT_Colors ? */ + /* extLst CT_ExtensionList ? */ + + return styles; +} +function parse_BrtFmt(data, length) { + var ifmt = data.read_shift(2); + var stFmtCode = parse_XLWideString(data,length-2); + return [ifmt, stFmtCode]; +} + +function parse_BrtXF(data, length) { + var ixfeParent = data.read_shift(2); + var ifmt = data.read_shift(2); + parsenoop(data, length-4); + return {ixfe:ixfeParent, ifmt:ifmt }; +} + +function parse_sty_bin(data) { + styles.NumberFmt = []; + for(var y in SSF._table) styles.NumberFmt[y] = SSF._table[y]; + + styles.CellXf = []; + var state = ""; /* TODO: this should be a stack */ + var pass = false; + recordhopper(data, function(val, R, RT) { + switch(R.n) { + case 'BrtFmt': + styles.NumberFmt[val[0]] = val[1]; SSF.load(val[1], val[0]); + break; + case 'BrtFont': break; /* TODO */ + case 'BrtKnownFonts': break; /* TODO */ + case 'BrtFill': break; /* TODO */ + case 'BrtBorder': break; /* TODO */ + case 'BrtXF': + if(state === "CELLXFS") { + styles.CellXf.push(val); + } + break; /* TODO */ + case 'BrtStyle': break; /* TODO */ + case 'BrtRowHdr': break; /* TODO */ + case 'BrtCellMeta': break; /* ?? */ + case 'BrtDXF': break; /* TODO */ + case 'BrtMRUColor': break; /* TODO */ + case 'BrtIndexedColor': break; /* TODO */ + case 'BrtBeginStyleSheet': break; + case 'BrtEndStyleSheet': break; + case 'BrtBeginTableStyle': break; + case 'BrtTableStyleElement': break; + case 'BrtEndTableStyle': break; + case 'BrtBeginFmts': state = "FMTS"; break; + case 'BrtEndFmts': state = ""; break; + case 'BrtBeginFonts': state = "FONTS"; break; + case 'BrtEndFonts': state = ""; break; + case 'BrtACBegin': state = "ACFONTS"; break; + case 'BrtACEnd': state = ""; break; + case 'BrtBeginFills': state = "FILLS"; break; + case 'BrtEndFills': state = ""; break; + case 'BrtBeginBorders': state = "BORDERS"; break; + case 'BrtEndBorders': state = ""; break; + case 'BrtBeginCellStyleXFs': state = "CELLSTYLEXFS"; break; + case 'BrtEndCellStyleXFs': state = ""; break; + case 'BrtBeginCellXFs': state = "CELLXFS"; break; + case 'BrtEndCellXFs': state = ""; break; + case 'BrtBeginStyles': state = "STYLES"; break; + case 'BrtEndStyles': state = ""; break; + case 'BrtBeginDXFs': state = "DXFS"; break; + case 'BrtEndDXFs': state = ""; break; + case 'BrtBeginTableStyles': state = "TABLESTYLES"; break; + case 'BrtEndTableStyles': state = ""; break; + case 'BrtBeginColorPalette': state = "COLORPALETTE"; break; + case 'BrtBeginIndexedColors': state = "INDEXEDCOLORS"; break; + case 'BrtEndIndexedColors': state = ""; break; + case 'BrtBeginMRUColors': state = "MRUCOLORS"; break; + case 'BrtEndMRUColors': state = ""; break; + case 'BrtEndColorPalette': state = ""; break; + case 'BrtFRTBegin': pass = true; break; + case 'BrtFRTEnd': pass = false; break; + //default: if(!pass) throw new Error("Unexpected record " + RT + " " + R.n); + } + }); + return styles; +} + +var ct2type = { + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": "workbooks", /*XLSX*/ + "application/vnd.ms-excel.sheet.macroEnabled.main+xml":"workbooks", /*XLSM*/ + "application/vnd.ms-excel.sheet.binary.macroEnabled.main":"workbooks", /*XLSB*/ + + "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":"sheets", /*XLS[XM]*/ + "application/vnd.ms-excel.worksheet":"sheets", /*XLSB*/ + + "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":"styles", /*XLS[XM]*/ + "application/vnd.ms-excel.styles":"styles", /*XLSB*/ + + "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml": "strs", /*XLS[XM]*/ + "application/vnd.ms-excel.sharedStrings": "strs", /*XLSB*/ + + "application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml": "calcchains", /*XLS[XM]*/ + //"application/vnd.ms-excel.calcChain": "calcchains", /*XLSB*/ + + "application/vnd.openxmlformats-package.core-properties+xml": "coreprops", + "application/vnd.openxmlformats-officedocument.extended-properties+xml": "extprops", + "application/vnd.openxmlformats-officedocument.custom-properties+xml": "custprops", + "application/vnd.openxmlformats-officedocument.theme+xml":"themes", + "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": "comments", + "foo": "bar" +}; + +var XMLNS_CT = 'http://schemas.openxmlformats.org/package/2006/content-types'; + +function parseProps(data) { + var p = { Company:'' }, q = {}; + var strings = ["Application", "DocSecurity", "Company", "AppVersion"]; + var bools = ["HyperlinksChanged","SharedDoc","LinksUpToDate","ScaleCrop"]; + var xtra = ["HeadingPairs", "TitlesOfParts"]; + var xtracp = ["category", "contentStatus", "lastModifiedBy", "lastPrinted", "revision", "version"]; + var xtradc = ["creator", "description", "identifier", "language", "subject", "title"]; + var xtradcterms = ["created", "modified"]; + xtra = xtra.concat(xtracp.map(function(x) { return "cp:" + x; })); + xtra = xtra.concat(xtradc.map(function(x) { return "dc:" + x; })); + xtra = xtra.concat(xtradcterms.map(function(x) { return "dcterms:" + x; })); + + + strings.forEach(function(f){p[f] = (data.match(matchtag(f))||[])[1];}); + bools.forEach(function(f){p[f] = (data.match(matchtag(f))||[])[1] == "true";}); + xtra.forEach(function(f) { + var cur = data.match(new RegExp("<" + f + "[^>]*>(.*)<\/" + f + ">")); + if(cur && cur.length > 0) q[f] = cur[1]; + }); + + if(q.HeadingPairs && q.TitlesOfParts) { + var v = parseVector(q.HeadingPairs); + var j = 0, widx = 0; + for(var i = 0; i !== v.length; ++i) { + switch(v[i].v) { + case "Worksheets": widx = j; p.Worksheets = +(v[++i].v); break; + case "Named Ranges": ++i; break; // TODO: Handle Named Ranges + } + } + var parts = parseVector(q.TitlesOfParts).map(function(x) { return utf8read(x.v); }); + p.SheetNames = parts.slice(widx, widx + p.Worksheets); + } + p.Creator = q["dc:creator"]; + p.LastModifiedBy = q["cp:lastModifiedBy"]; + p.CreatedDate = new Date(q["dcterms:created"]); + p.ModifiedDate = new Date(q["dcterms:modified"]); + return p; +} + +/* 15.2.12.2 Custom File Properties Part */ +function parseCustomProps(data) { + var p = {}, name; + data.match(/<[^>]+>([^<]*)/g).forEach(function(x) { + var y = parsexmltag(x); + switch(y[0]) { + case '': name = null; break; + default: if (x.indexOf(''); + var type = toks[0].substring(4), text = toks[1]; + /* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */ + switch(type) { + case 'lpstr': case 'lpwstr': case 'bstr': case 'lpwstr': + p[name] = unescapexml(text); + break; + case 'bool': + p[name] = parsexmlbool(text, ''); + break; + case 'i1': case 'i2': case 'i4': case 'i8': case 'int': case 'uint': + p[name] = parseInt(text, 10); + break; + case 'r4': case 'r8': case 'decimal': + p[name] = parseFloat(text); + break; + case 'filetime': case 'date': + p[name] = text; // should we make this into a date? + break; + case 'cy': case 'error': + p[name] = unescapexml(text); + break; + default: + console.warn('Unexpected', x, type, toks); + } + } + } + }); + return p; +} + +/* 18.6 Calculation Chain */ +function parseDeps(data) { + var d = []; + var l = 0, i = 1; + (data.match(/<[^>]*>/g)||[]).forEach(function(x) { + var y = parsexmltag(x); + switch(y[0]) { + case '': case '': break; + /* 18.6.1 c CT_CalcCell 1 */ + case ']*>/g)||[]).forEach(function(x) { + var y = parsexmltag(x); + switch(y[0]) { + case ' 0 ? ct.calcchains[0] : ""; + ct.sst = ct.strs.length > 0 ? ct.strs[0] : ""; + ct.style = ct.styles.length > 0 ? ct.styles[0] : ""; + delete ct.calcchains; + return ct; +} + + + +/* 9.3.2 OPC Relationships Markup */ +function parseRels(data, currentFilePath) { + if (!data) return data; + if (currentFilePath.charAt(0) !== '/') { + currentFilePath = '/'+currentFilePath; + } + var rels = {}; + + var resolveRelativePathIntoAbsolute = function (to) { + var toksFrom = currentFilePath.split('/'); + toksFrom.pop(); // folder path + var toksTo = to.split('/'); + var reversed = []; + while (toksTo.length !== 0) { + var tokTo = toksTo.shift(); + if (tokTo === '..') { + toksFrom.pop(); + } else if (tokTo !== '.') { + toksFrom.push(tokTo); + } + } + return toksFrom.join('/'); + }; + + data.match(/<[^>]*>/g).forEach(function(x) { + var y = parsexmltag(x); + /* 9.3.2.2 OPC_Relationships */ + if (y[0] === '/)) return []; + var authors = []; + var commentList = []; + data.match(/([^\u2603]*)<\/authors>/m)[1].split('').forEach(function(x) { + if(x === "" || x.trim() === "") return; + authors.push(x.match(/]*>(.*)/)[1]); + }); + data.match(/([^\u2603]*)<\/commentList>/m)[1].split('').forEach(function(x, index) { + if(x === "" || x.trim() === "") return; + var y = parsexmltag(x.match(/]*>/)[0]); + var comment = { author: y.authorId && authors[y.authorId] ? authors[y.authorId] : undefined, ref: y.ref, guid: y.guid }; + var textMatch = x.match(/([^\u2603]*)<\/text>/m); + if (!textMatch || !textMatch[1]) return; // a comment may contain an empty text tag. + var rt = parse_si(textMatch[1]); + comment.r = rt.r; + comment.t = rt.t; + if(opts.cellHTML) comment.h = rt.h; + commentList.push(comment); + }); + return commentList; +} + +function parse_comments(zip, dirComments, sheets, sheetRels, opts) { + for(var i = 0; i != dirComments.length; ++i) { + var canonicalpath=dirComments[i]; + var comments=parse_comments_xml(getzipdata(zip, canonicalpath.replace(/^\//,''), true), opts); + if(!comments || !comments.length) return; + // find the sheets targeted by these comments + var sheetNames = Object.keys(sheets); + for(var j = 0; j != sheetNames.length; ++j) { + var sheetName = sheetNames[j]; + var rels = sheetRels[sheetName]; + if(rels) { + var rel = rels[canonicalpath]; + if(rel) insertCommentsIntoSheet(sheetName, sheets[sheetName], comments); + } + } + } +} + +function insertCommentsIntoSheet(sheetName, sheet, comments) { + comments.forEach(function(comment) { + var cell = sheet[comment.ref]; + if (!cell) { + cell = {}; + sheet[comment.ref] = cell; + var range = decode_range(sheet["!ref"]); + var thisCell = decode_cell(comment.ref); + if(range.s.r > thisCell.r) range.s.r = thisCell.r; + if(range.e.r < thisCell.r) range.e.r = thisCell.r; + if(range.s.c > thisCell.c) range.s.c = thisCell.c; + if(range.e.c < thisCell.c) range.e.c = thisCell.c; + var encoded = encode_range(range); + if (encoded !== sheet["!ref"]) sheet["!ref"] = encoded; + } + + if (!cell.c) cell.c = []; + var o = {a: comment.author, t: comment.t, r: comment.r}; + if(comment.h) o.h = comment.h; + cell.c.push(o); + }); +} + +/* [MS-XLSB] 2.5.97.4 CellParsedFormula TODO: use similar logic to js-xls */ +var parse_CellParsedFormula = function(data, length) { + var cce = data.read_shift(4); + return parsenoop(data, length-4); +}; +var strs = {}; // shared strings +var _ssfopts = {}; // spreadsheet formatting options + +/* 18.3 Worksheets */ +function parse_ws_xml(data, opts) { + if(!data) return data; + /* 18.3.1.99 worksheet CT_Worksheet */ + var s = {}; + + /* 18.3.1.35 dimension CT_SheetDimension ? */ + var ref = data.match(//); + if(ref && ref.length == 2 && ref[1].indexOf(":") !== -1) s["!ref"] = ref[1]; + + var refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} }; + var q = ["v","f"]; + var sidx = 0; + /* 18.3.1.80 sheetData CT_SheetData ? */ + if(!data.match(//)) + data.match(/([^\u2603]*)<\/sheetData>/m)[1].split("").forEach(function(x) { + if(x === "" || x.trim() === "") return; + + /* 18.3.1.73 row CT_Row */ + var row = parsexmltag(x.match(/]*>/)[0]); + if(refguess.s.r > row.r - 1) refguess.s.r = row.r - 1; + if(refguess.e.r < row.r - 1) refguess.e.r = row.r - 1; + + /* 18.3.1.4 c CT_Cell */ + var cells = x.substr(x.indexOf('>')+1).split(/]*>/)||[c])[0]); delete cell[0]; + var d = c.substr(c.indexOf('>')+1); + var p = {}; + q.forEach(function(f){var x=d.match(matchtag(f));if(x)p[f]=unescapexml(x[1]);}); + + /* SCHEMA IS ACTUALLY INCORRECT HERE. IF A CELL HAS NO T, EMIT "" */ + if(cell.t === undefined && p.v === undefined) { + if(!opts.sheetStubs) return; + p.t = "str"; p.v = undefined; + } + else p.t = (cell.t ? cell.t : "n"); // default is "n" in schema + if(refguess.s.c > idx) refguess.s.c = idx; + if(refguess.e.c < idx) refguess.e.c = idx; + /* 18.18.11 t ST_CellType */ + switch(p.t) { + case 'n': p.v = parseFloat(p.v); break; + case 's': { + sidx = parseInt(p.v, 10); + p.v = strs[sidx].t; + p.r = strs[sidx].r; + if(opts.cellHTML) p.h = strs[sidx].h; + } break; + case 'str': if(p.v) p.v = utf8read(p.v); break; + case 'inlineStr': + var is = d.match(/(.*)<\/is>/); + is = is ? parse_si(is[1]) : {t:"",r:""}; + p.t = 'str'; p.v = is.t; + break; // inline string + case 'b': if(typeof p.v !== 'boolean') p.v = parsexmlbool(p.v); break; + case 'd': /* TODO: date1904 logic */ + var epoch = Date.parse(p.v); + p.v = (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000); + p.t = 'n'; + break; + /* in case of error, stick value in .raw */ + case 'e': p.raw = RBErr[p.v]; break; + } + + /* formatting */ + var fmtid = 0; + if(cell.s && styles.CellXf) { + var cf = styles.CellXf[cell.s]; + if(cf && cf.numFmtId) fmtid = cf.numFmtId; + } + try { + p.w = SSF.format(fmtid,p.v,_ssfopts); + if(opts.cellNF) p.z = SSF._table[fmtid]; + } catch(e) { if(opts.WTF) throw e; } + s[cell.r] = p; + }); + }); + if(!s["!ref"]) s["!ref"] = encode_range(refguess); + return s; +} + + +/* [MS-XLSB] 2.4.718 BrtRowHdr */ +var parse_BrtRowHdr = function(data, length) { + var z = {}; + z.r = data.read_shift(4); + data.l += length-4; + return z; +}; + +/* [MS-XLSB] 2.4.812 BrtWsDim */ +var parse_BrtWsDim = parse_UncheckedRfX; + +/* [MS-XLSB] 2.4.815 BrtWsProp */ +var parse_BrtWsProp = function(data, length) { + var z = {}; + /* TODO: pull flags */ + data.l += 19; + z.name = parse_CodeName(data, length - 19); + return z; +}; + +/* [MS-XLSB] 2.4.303 BrtCellBlank */ +var parse_BrtCellBlank = parsenoop; + +/* [MS-XLSB] 2.4.304 BrtCellBool */ +var parse_BrtCellBool = function(data, length) { + var cell = parse_Cell(data); + var fBool = data.read_shift(1); + return [cell, fBool, 'b']; +}; + +/* [MS-XLSB] 2.4.305 BrtCellError */ +var parse_BrtCellError = function(data, length) { + var cell = parse_Cell(data); + var fBool = data.read_shift(1); + return [cell, fBool, 'e']; +}; + +/* [MS-XLSB] 2.4.308 BrtCellIsst */ +var parse_BrtCellIsst = function(data, length) { + var cell = parse_Cell(data); + var isst = data.read_shift(4); + return [cell, isst, 's']; +}; + +/* [MS-XLSB] 2.4.310 BrtCellReal */ +var parse_BrtCellReal = function(data, length) { + var cell = parse_Cell(data); + var value = parse_Xnum(data); + return [cell, value, 'n']; +}; + +/* [MS-XLSB] 2.4.311 BrtCellRk */ +var parse_BrtCellRk = function(data, length) { + var cell = parse_Cell(data); + var value = parse_RkNumber(data); + return [cell, value, 'n']; +}; + +/* [MS-XLSB] 2.4.314 BrtCellSt */ +var parse_BrtCellSt = function(data, length) { + var cell = parse_Cell(data); + var value = parse_XLWideString(data); + return [cell, value, 'str']; +}; + +/* [MS-XLSB] 2.4.647 BrtFmlaBool */ +var parse_BrtFmlaBool = function(data, length, opts) { + var cell = parse_Cell(data); + var value = data.read_shift(1); + var o = [cell, value, 'b']; + if(opts.cellFormula) { + var formula = parse_CellParsedFormula(data, length-9); + o[3] = ""; /* TODO */ + } + else data.l += length-9; + return o; +}; + +/* [MS-XLSB] 2.4.648 BrtFmlaError */ +var parse_BrtFmlaError = function(data, length, opts) { + var cell = parse_Cell(data); + var value = data.read_shift(1); + var o = [cell, value, 'e']; + if(opts.cellFormula) { + var formula = parse_CellParsedFormula(data, length-9); + o[3] = ""; /* TODO */ + } + else data.l += length-9; + return o; +}; + +/* [MS-XLSB] 2.4.649 BrtFmlaNum */ +var parse_BrtFmlaNum = function(data, length, opts) { + var cell = parse_Cell(data); + var value = parse_Xnum(data); + var o = [cell, value, 'n']; + if(opts.cellFormula) { + var formula = parse_CellParsedFormula(data, length - 16); + o[3] = ""; /* TODO */ + } + else data.l += length-16; + return o; +}; + +/* [MS-XLSB] 2.4.650 BrtFmlaString */ +var parse_BrtFmlaString = function(data, length, opts) { + var start = data.l; + var cell = parse_Cell(data); + var value = parse_XLWideString(data); + var o = [cell, value, 'str']; + if(opts.cellFormula) { + var formula = parse_CellParsedFormula(data, start + length - data.l); + o[3] = ""; /* TODO */ + } + else data.l = start + length; + return o; +}; + +/* [MS-XLSB] 2.1.7.61 Worksheet */ +var parse_ws_bin = function(data, opts) { + if(!data) return data; + var s = {}; + + var ref; + + var pass = false; + var row, p, cf; + recordhopper(data, function(val, R) { + switch(R.n) { + case 'BrtWsDim': ref = val; break; + case 'BrtRowHdr': row = val; break; + + case 'BrtFmlaBool': + case 'BrtFmlaError': + case 'BrtFmlaNum': + case 'BrtFmlaString': + case 'BrtCellBool': + case 'BrtCellError': + case 'BrtCellIsst': + case 'BrtCellReal': + case 'BrtCellRk': + p = {t:val[2]}; + switch(val[2]) { + case 'n': p.v = val[1]; break; + case 's': p.v = strs[val[1]].t; p.r = strs[val[1]].r; break; + case 'b': p.v = val[1] ? true : false; break; + case 'e': p.raw = val[1]; p.v = BErr[p.raw]; break; + case 'str': p.v = utf8read(val[1]); break; + } + if(opts.cellFormula && val.length > 3) p.f = val[3]; + if((cf = styles.CellXf[val[0].iStyleRef])) try { + p.w = SSF.format(cf.ifmt,p.v,_ssfopts); + if(opts.cellNF) p.z = SSF._table[cf.ifmt]; + } catch(e) { if(opts.WTF) throw e; } + s[encode_cell({c:val[0].c,r:row.r})] = p; + break; // TODO + + case 'BrtCellBlank': break; // (blank cell) + + case 'BrtArrFmla': break; // TODO + case 'BrtShrFmla': break; // TODO + case 'BrtBeginSheet': break; + case 'BrtWsProp': break; // TODO + case 'BrtSheetCalcProp': break; // TODO + case 'BrtBeginWsViews': break; // TODO + case 'BrtBeginWsView': break; // TODO + case 'BrtEndWsView': break; // TODO + case 'BrtEndWsViews': break; // TODO + case 'BrtSel': break; // TODO + case 'BrtACBegin': break; // TODO + case 'BrtACEnd': break; // TODO + case 'BrtWsFmtInfoEx14': break; // TODO + case 'BrtWsFmtInfo': break; // TODO + case 'BrtBeginColInfos': break; // TODO + case 'BrtColInfo': break; // TODO + case 'BrtEndColInfos': break; // TODO + case 'BrtBeginSheetData': break; // TODO + case 'BrtEndSheetData': break; // TODO + case 'BrtSheetProtection': break; // TODO + case 'BrtPrintOptions': break; // TODO + case 'BrtMargins': break; // TODO + case 'BrtPageSetup': break; // TODO + case 'BrtFRTBegin': pass = true; break; + case 'BrtFRTEnd': pass = false; break; + case 'BrtEndSheet': break; // TODO + case 'BrtBeginMergeCells': break; // TODO + case 'BrtMergeCell': break; // TODO + case 'BrtEndMergeCells': break; // TODO + case 'BrtLegacyDrawing': break; // TODO + //default: if(!pass) throw new Error("Unexpected record " + R.n); + } + }, opts); + s["!ref"] = encode_range(ref); + return s; +}; + +/* 18.2.28 (CT_WorkbookProtection) Defaults */ +var WBPropsDef = { + allowRefreshQuery: '0', + autoCompressPictures: '1', + backupFile: '0', + checkCompatibility: '0', + codeName: '', + date1904: '0', + dateCompatibility: '1', + //defaultThemeVersion: '0', + filterPrivacy: '0', + hidePivotFieldList: '0', + promptedSolutions: '0', + publishItems: '0', + refreshAllConnections: false, + saveExternalLinkValues: '1', + showBorderUnselectedTables: '1', + showInkAnnotation: '1', + showObjects: 'all', + showPivotChartFilter: '0' + //updateLinks: 'userSet' +}; + +/* 18.2.30 (CT_BookView) Defaults */ +var WBViewDef = { + activeTab: '0', + autoFilterDateGrouping: '1', + firstSheet: '0', + minimized: '0', + showHorizontalScroll: '1', + showSheetTabs: '1', + showVerticalScroll: '1', + tabRatio: '600', + visibility: 'visible' + //window{Height,Width}, {x,y}Window +}; + +/* 18.2.19 (CT_Sheet) Defaults */ +var SheetDef = { + state: 'visible' +}; + +/* 18.2.2 (CT_CalcPr) Defaults */ +var CalcPrDef = { + calcCompleted: 'true', + calcMode: 'auto', + calcOnSave: 'true', + concurrentCalc: 'true', + fullCalcOnLoad: 'false', + fullPrecision: 'true', + iterate: 'false', + iterateCount: '100', + iterateDelta: '0.001', + refMode: 'A1' +}; + +/* 18.2.3 (CT_CustomWorkbookView) Defaults */ +var CustomWBViewDef = { + autoUpdate: 'false', + changesSavedWin: 'false', + includeHiddenRowCol: 'true', + includePrintSettings: 'true', + maximized: 'false', + minimized: 'false', + onlySync: 'false', + personalView: 'false', + showComments: 'commIndicator', + showFormulaBar: 'true', + showHorizontalScroll: 'true', + showObjects: 'all', + showSheetTabs: 'true', + showStatusbar: 'true', + showVerticalScroll: 'true', + tabRatio: '600', + xWindow: '0', + yWindow: '0' +}; +var XMLNS_WB = [ + 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + 'http://schemas.microsoft.com/office/excel/2006/main', + 'http://schemas.microsoft.com/office/excel/2006/2' +]; + +/* 18.2 Workbook */ +function parse_wb_xml(data) { + var wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: "" }; + var pass = false; + data.match(/<[^>]*>/g).forEach(function(x) { + var y = parsexmltag(x); + switch(y[0]) { + case '': break; + + /* 18.2.13 fileVersion CT_FileVersion ? */ + case '': break; + + /* 18.2.12 fileSharing CT_FileSharing ? */ + case '': break; + + /* 18.2.28 workbookPr CT_WorkbookPr ? */ + case '': delete y[0]; wb.WBProps = y; break; + + /* 18.2.29 workbookProtection CT_WorkbookProtection ? */ + case '': break; + + /* 18.2.1 bookViews CT_BookViews ? */ + case '': case '': break; + /* 18.2.30 workbookView CT_BookView + */ + case '': case '': break; // aggregate sheet + /* 18.2.19 sheet CT_Sheet + */ + case '': break; + /* 18.2.14 functionGroup CT_FunctionGroup + */ + case '': break; + /* 18.2.8 externalReference CT_ExternalReference + */ + case '': break; + case '': pass=true; break; + case '': pass=false; break; + /* 18.2.5 definedName CT_DefinedName + */ + case '': case '': break; + + /* 18.2.2 calcPr CT_CalcPr ? */ + case '': delete y[0]; wb.CalcPr = y; break; + + /* 18.2.16 oleSize CT_OleSize ? (ref required) */ + case '': case '': case '': break; + + /* 18.2.18 pivotCaches CT_PivotCaches ? */ + case '': case '': case '': break; + + /* 18.2.23 smartTagTypes CT_SmartTagTypes ? */ + case '': case '': break; + /* 18.2.22 smartTagType CT_SmartTagType ? */ + case '': break; + + /* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */ + case '': break; + + /* 18.2.26 webPublishObjects CT_WebPublishObjects ? */ + case '': case '': break; + /* 18.2.25 webPublishObject CT_WebPublishObject ? */ + case '': case '': case '': break; + /* 18.2.7 ext CT_Extension + */ + case '': pass=false; break; + + /* Others */ + case '': pass=false; break; + } + }); + if(XMLNS_WB.indexOf(wb.xmlns) === -1) throw new Error("Unknown Namespace: " + wb.xmlns); + + var z; + /* defaults */ + for(z in WBPropsDef) if(typeof wb.WBProps[z] === 'undefined') wb.WBProps[z] = WBPropsDef[z]; + for(z in CalcPrDef) if(typeof wb.CalcPr[z] === 'undefined') wb.CalcPr[z] = CalcPrDef[z]; + + wb.WBView.forEach(function(w){for(var z in WBViewDef) if(typeof w[z] === 'undefined') w[z]=WBViewDef[z]; }); + wb.Sheets.forEach(function(w){for(var z in SheetDef) if(typeof w[z] === 'undefined') w[z]=SheetDef[z]; }); + + _ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904, 'date1904'); + + return wb; +} + +/* [MS-XLSB] 2.4.301 BrtBundleSh */ +var parse_BrtBundleSh = function(data, length) { + var z = {}; + z.hsState = data.read_shift(4); //ST_SheetState + z.iTabID = data.read_shift(4); + z.strRelID = parse_RelID(data,length-8); + z.name = parse_XLWideString(data); + return z; +}; + +/* [MS-XLSB] 2.1.7.60 Workbook */ +var parse_wb_bin = function(data) { + var wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: "" }; + var pass = false, z; + + recordhopper(data, function(val, R) { + switch(R.n) { + case 'BrtBundleSh': wb.Sheets.push(val); break; + + case 'BrtBeginBook': break; + case 'BrtFileVersion': break; + case 'BrtWbProp': break; + case 'BrtACBegin': break; + case 'BrtAbsPath15': break; + case 'BrtACEnd': break; + /*case 'BrtBookProtectionIso': break;*/ + case 'BrtBookProtection': break; + case 'BrtBeginBookViews': break; + case 'BrtBookView': break; + case 'BrtEndBookViews': break; + case 'BrtBeginBundleShs': break; + case 'BrtEndBundleShs': break; + case 'BrtBeginFnGroup': break; + case 'BrtEndFnGroup': break; + case 'BrtBeginExternals': break; + case 'BrtSupSelf': break; + case 'BrtSupBookSrc': break; + case 'BrtExternSheet': break; + case 'BrtEndExternals': break; + case 'BrtName': break; + case 'BrtCalcProp': break; + case 'BrtUserBookView': break; + case 'BrtBeginPivotCacheIDs': break; + case 'BrtBeginPivotCacheID': break; + case 'BrtEndPivotCacheID': break; + case 'BrtEndPivotCacheIDs': break; + case 'BrtWebOpt': break; + case 'BrtFileRecover': break; + /*case 'BrtBeginWebPubItems': break; + case 'BrtBeginWebPubItem': break; + case 'BrtEndWebPubItem': break; + case 'BrtEndWebPubItems': break;*/ + case 'BrtFRTBegin': pass = true; break; + case 'BrtFRTEnd': pass = false; break; + case 'BrtEndBook': break; + //default: if(!pass) throw new Error("Unexpected record " + R.n); + } + }); + + /* defaults */ + for(z in WBPropsDef) if(typeof wb.WBProps[z] === 'undefined') wb.WBProps[z] = WBPropsDef[z]; + for(z in CalcPrDef) if(typeof wb.CalcPr[z] === 'undefined') wb.CalcPr[z] = CalcPrDef[z]; + + wb.WBView.forEach(function(w){for(var z in WBViewDef) if(typeof w[z] === 'undefined') w[z]=WBViewDef[z]; }); + wb.Sheets.forEach(function(w){for(var z in SheetDef) if(typeof w[z] === 'undefined') w[z]=SheetDef[z]; }); + + _ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904, 'date1904'); + + return wb; +}; +function parse_wb(data, name, opts) { + return name.substr(-4)===".bin" ? parse_wb_bin(data, opts) : parse_wb_xml(data, opts); +} + +function parse_ws(data, name, opts) { + return name.substr(-4)===".bin" ? parse_ws_bin(data, opts) : parse_ws_xml(data, opts); +} + +function parse_sty(data, name, opts) { + return name.substr(-4)===".bin" ? parse_sty_bin(data, opts) : parse_sty_xml(data, opts); +} + +function parse_sst(data, name, opts) { + return name.substr(-4)===".bin" ? parse_sst_bin(data, opts) : parse_sst_xml(data, opts); +} +/* [MS-XLSB] 2.3 Record Enumeration */ +var RecordEnum = { + 0x0000: { n:"BrtRowHdr", f:parse_BrtRowHdr }, + 0x0001: { n:"BrtCellBlank", f:parse_BrtCellBlank }, + 0x0002: { n:"BrtCellRk", f:parse_BrtCellRk }, + 0x0003: { n:"BrtCellError", f:parse_BrtCellError }, + 0x0004: { n:"BrtCellBool", f:parse_BrtCellBool }, + 0x0005: { n:"BrtCellReal", f:parse_BrtCellReal }, + 0x0006: { n:"BrtCellSt", f:parse_BrtCellSt }, + 0x0007: { n:"BrtCellIsst", f:parse_BrtCellIsst }, + 0x0008: { n:"BrtFmlaString", f:parse_BrtFmlaString }, + 0x0009: { n:"BrtFmlaNum", f:parse_BrtFmlaNum }, + 0x000A: { n:"BrtFmlaBool", f:parse_BrtFmlaBool }, + 0x000B: { n:"BrtFmlaError", f:parse_BrtFmlaError }, + 0x0013: { n:"BrtSSTItem", f:parse_RichStr }, + 0x0014: { n:"BrtPCDIMissing", f:parsenoop }, + 0x0015: { n:"BrtPCDINumber", f:parsenoop }, + 0x0016: { n:"BrtPCDIBoolean", f:parsenoop }, + 0x0017: { n:"BrtPCDIError", f:parsenoop }, + 0x0018: { n:"BrtPCDIString", f:parsenoop }, + 0x0019: { n:"BrtPCDIDatetime", f:parsenoop }, + 0x001A: { n:"BrtPCDIIndex", f:parsenoop }, + 0x001B: { n:"BrtPCDIAMissing", f:parsenoop }, + 0x001C: { n:"BrtPCDIANumber", f:parsenoop }, + 0x001D: { n:"BrtPCDIABoolean", f:parsenoop }, + 0x001E: { n:"BrtPCDIAError", f:parsenoop }, + 0x001F: { n:"BrtPCDIAString", f:parsenoop }, + 0x0020: { n:"BrtPCDIADatetime", f:parsenoop }, + 0x0021: { n:"BrtPCRRecord", f:parsenoop }, + 0x0022: { n:"BrtPCRRecordDt", f:parsenoop }, + 0x0023: { n:"BrtFRTBegin", f:parsenoop }, + 0x0024: { n:"BrtFRTEnd", f:parsenoop }, + 0x0025: { n:"BrtACBegin", f:parsenoop }, + 0x0026: { n:"BrtACEnd", f:parsenoop }, + 0x0027: { n:"BrtName", f:parsenoop }, + 0x0028: { n:"BrtIndexRowBlock", f:parsenoop }, + 0x002A: { n:"BrtIndexBlock", f:parsenoop }, + 0x002B: { n:"BrtFont", f:parsenoop }, + 0x002C: { n:"BrtFmt", f:parse_BrtFmt }, + 0x002D: { n:"BrtFill", f:parsenoop }, + 0x002E: { n:"BrtBorder", f:parsenoop }, + 0x002F: { n:"BrtXF", f:parse_BrtXF }, + 0x0030: { n:"BrtStyle", f:parsenoop }, + 0x0031: { n:"BrtCellMeta", f:parsenoop }, + 0x0032: { n:"BrtValueMeta", f:parsenoop }, + 0x0033: { n:"BrtMdb", f:parsenoop }, + 0x0034: { n:"BrtBeginFmd", f:parsenoop }, + 0x0035: { n:"BrtEndFmd", f:parsenoop }, + 0x0036: { n:"BrtBeginMdx", f:parsenoop }, + 0x0037: { n:"BrtEndMdx", f:parsenoop }, + 0x0038: { n:"BrtBeginMdxTuple", f:parsenoop }, + 0x0039: { n:"BrtEndMdxTuple", f:parsenoop }, + 0x003A: { n:"BrtMdxMbrIstr", f:parsenoop }, + 0x003B: { n:"BrtStr", f:parsenoop }, + 0x003C: { n:"BrtColInfo", f:parsenoop }, + 0x003E: { n:"BrtCellRString", f:parsenoop }, + 0x0040: { n:"BrtDVal", f:parsenoop }, + 0x0041: { n:"BrtSxvcellNum", f:parsenoop }, + 0x0042: { n:"BrtSxvcellStr", f:parsenoop }, + 0x0043: { n:"BrtSxvcellBool", f:parsenoop }, + 0x0044: { n:"BrtSxvcellErr", f:parsenoop }, + 0x0045: { n:"BrtSxvcellDate", f:parsenoop }, + 0x0046: { n:"BrtSxvcellNil", f:parsenoop }, + 0x0080: { n:"BrtFileVersion", f:parsenoop }, + 0x0081: { n:"BrtBeginSheet", f:parsenoop }, + 0x0082: { n:"BrtEndSheet", f:parsenoop }, + 0x0083: { n:"BrtBeginBook", f:parsenoop }, + 0x0084: { n:"BrtEndBook", f:parsenoop }, + 0x0085: { n:"BrtBeginWsViews", f:parsenoop }, + 0x0086: { n:"BrtEndWsViews", f:parsenoop }, + 0x0087: { n:"BrtBeginBookViews", f:parsenoop }, + 0x0088: { n:"BrtEndBookViews", f:parsenoop }, + 0x0089: { n:"BrtBeginWsView", f:parsenoop }, + 0x008A: { n:"BrtEndWsView", f:parsenoop }, + 0x008B: { n:"BrtBeginCsViews", f:parsenoop }, + 0x008C: { n:"BrtEndCsViews", f:parsenoop }, + 0x008D: { n:"BrtBeginCsView", f:parsenoop }, + 0x008E: { n:"BrtEndCsView", f:parsenoop }, + 0x008F: { n:"BrtBeginBundleShs", f:parsenoop }, + 0x0090: { n:"BrtEndBundleShs", f:parsenoop }, + 0x0091: { n:"BrtBeginSheetData", f:parsenoop }, + 0x0092: { n:"BrtEndSheetData", f:parsenoop }, + 0x0093: { n:"BrtWsProp", f:parse_BrtWsProp }, + 0x0094: { n:"BrtWsDim", f:parse_BrtWsDim }, + 0x0097: { n:"BrtPane", f:parsenoop }, + 0x0098: { n:"BrtSel", f:parsenoop }, + 0x0099: { n:"BrtWbProp", f:parsenoop }, + 0x009A: { n:"BrtWbFactoid", f:parsenoop }, + 0x009B: { n:"BrtFileRecover", f:parsenoop }, + 0x009C: { n:"BrtBundleSh", f:parse_BrtBundleSh }, + 0x009D: { n:"BrtCalcProp", f:parsenoop }, + 0x009E: { n:"BrtBookView", f:parsenoop }, + 0x009F: { n:"BrtBeginSst", f:parse_BrtBeginSst }, + 0x00A0: { n:"BrtEndSst", f:parsenoop }, + 0x00A1: { n:"BrtBeginAFilter", f:parsenoop }, + 0x00A2: { n:"BrtEndAFilter", f:parsenoop }, + 0x00A3: { n:"BrtBeginFilterColumn", f:parsenoop }, + 0x00A4: { n:"BrtEndFilterColumn", f:parsenoop }, + 0x00A5: { n:"BrtBeginFilters", f:parsenoop }, + 0x00A6: { n:"BrtEndFilters", f:parsenoop }, + 0x00A7: { n:"BrtFilter", f:parsenoop }, + 0x00A8: { n:"BrtColorFilter", f:parsenoop }, + 0x00A9: { n:"BrtIconFilter", f:parsenoop }, + 0x00AA: { n:"BrtTop10Filter", f:parsenoop }, + 0x00AB: { n:"BrtDynamicFilter", f:parsenoop }, + 0x00AC: { n:"BrtBeginCustomFilters", f:parsenoop }, + 0x00AD: { n:"BrtEndCustomFilters", f:parsenoop }, + 0x00AE: { n:"BrtCustomFilter", f:parsenoop }, + 0x00AF: { n:"BrtAFilterDateGroupItem", f:parsenoop }, + 0x00B0: { n:"BrtMergeCell", f:parsenoop }, + 0x00B1: { n:"BrtBeginMergeCells", f:parsenoop }, + 0x00B2: { n:"BrtEndMergeCells", f:parsenoop }, + 0x00B3: { n:"BrtBeginPivotCacheDef", f:parsenoop }, + 0x00B4: { n:"BrtEndPivotCacheDef", f:parsenoop }, + 0x00B5: { n:"BrtBeginPCDFields", f:parsenoop }, + 0x00B6: { n:"BrtEndPCDFields", f:parsenoop }, + 0x00B7: { n:"BrtBeginPCDField", f:parsenoop }, + 0x00B8: { n:"BrtEndPCDField", f:parsenoop }, + 0x00B9: { n:"BrtBeginPCDSource", f:parsenoop }, + 0x00BA: { n:"BrtEndPCDSource", f:parsenoop }, + 0x00BB: { n:"BrtBeginPCDSRange", f:parsenoop }, + 0x00BC: { n:"BrtEndPCDSRange", f:parsenoop }, + 0x00BD: { n:"BrtBeginPCDFAtbl", f:parsenoop }, + 0x00BE: { n:"BrtEndPCDFAtbl", f:parsenoop }, + 0x00BF: { n:"BrtBeginPCDIRun", f:parsenoop }, + 0x00C0: { n:"BrtEndPCDIRun", f:parsenoop }, + 0x00C1: { n:"BrtBeginPivotCacheRecords", f:parsenoop }, + 0x00C2: { n:"BrtEndPivotCacheRecords", f:parsenoop }, + 0x00C3: { n:"BrtBeginPCDHierarchies", f:parsenoop }, + 0x00C4: { n:"BrtEndPCDHierarchies", f:parsenoop }, + 0x00C5: { n:"BrtBeginPCDHierarchy", f:parsenoop }, + 0x00C6: { n:"BrtEndPCDHierarchy", f:parsenoop }, + 0x00C7: { n:"BrtBeginPCDHFieldsUsage", f:parsenoop }, + 0x00C8: { n:"BrtEndPCDHFieldsUsage", f:parsenoop }, + 0x00C9: { n:"BrtBeginExtConnection", f:parsenoop }, + 0x00CA: { n:"BrtEndExtConnection", f:parsenoop }, + 0x00CB: { n:"BrtBeginECDbProps", f:parsenoop }, + 0x00CC: { n:"BrtEndECDbProps", f:parsenoop }, + 0x00CD: { n:"BrtBeginECOlapProps", f:parsenoop }, + 0x00CE: { n:"BrtEndECOlapProps", f:parsenoop }, + 0x00CF: { n:"BrtBeginPCDSConsol", f:parsenoop }, + 0x00D0: { n:"BrtEndPCDSConsol", f:parsenoop }, + 0x00D1: { n:"BrtBeginPCDSCPages", f:parsenoop }, + 0x00D2: { n:"BrtEndPCDSCPages", f:parsenoop }, + 0x00D3: { n:"BrtBeginPCDSCPage", f:parsenoop }, + 0x00D4: { n:"BrtEndPCDSCPage", f:parsenoop }, + 0x00D5: { n:"BrtBeginPCDSCPItem", f:parsenoop }, + 0x00D6: { n:"BrtEndPCDSCPItem", f:parsenoop }, + 0x00D7: { n:"BrtBeginPCDSCSets", f:parsenoop }, + 0x00D8: { n:"BrtEndPCDSCSets", f:parsenoop }, + 0x00D9: { n:"BrtBeginPCDSCSet", f:parsenoop }, + 0x00DA: { n:"BrtEndPCDSCSet", f:parsenoop }, + 0x00DB: { n:"BrtBeginPCDFGroup", f:parsenoop }, + 0x00DC: { n:"BrtEndPCDFGroup", f:parsenoop }, + 0x00DD: { n:"BrtBeginPCDFGItems", f:parsenoop }, + 0x00DE: { n:"BrtEndPCDFGItems", f:parsenoop }, + 0x00DF: { n:"BrtBeginPCDFGRange", f:parsenoop }, + 0x00E0: { n:"BrtEndPCDFGRange", f:parsenoop }, + 0x00E1: { n:"BrtBeginPCDFGDiscrete", f:parsenoop }, + 0x00E2: { n:"BrtEndPCDFGDiscrete", f:parsenoop }, + 0x00E3: { n:"BrtBeginPCDSDTupleCache", f:parsenoop }, + 0x00E4: { n:"BrtEndPCDSDTupleCache", f:parsenoop }, + 0x00E5: { n:"BrtBeginPCDSDTCEntries", f:parsenoop }, + 0x00E6: { n:"BrtEndPCDSDTCEntries", f:parsenoop }, + 0x00E7: { n:"BrtBeginPCDSDTCEMembers", f:parsenoop }, + 0x00E8: { n:"BrtEndPCDSDTCEMembers", f:parsenoop }, + 0x00E9: { n:"BrtBeginPCDSDTCEMember", f:parsenoop }, + 0x00EA: { n:"BrtEndPCDSDTCEMember", f:parsenoop }, + 0x00EB: { n:"BrtBeginPCDSDTCQueries", f:parsenoop }, + 0x00EC: { n:"BrtEndPCDSDTCQueries", f:parsenoop }, + 0x00ED: { n:"BrtBeginPCDSDTCQuery", f:parsenoop }, + 0x00EE: { n:"BrtEndPCDSDTCQuery", f:parsenoop }, + 0x00EF: { n:"BrtBeginPCDSDTCSets", f:parsenoop }, + 0x00F0: { n:"BrtEndPCDSDTCSets", f:parsenoop }, + 0x00F1: { n:"BrtBeginPCDSDTCSet", f:parsenoop }, + 0x00F2: { n:"BrtEndPCDSDTCSet", f:parsenoop }, + 0x00F3: { n:"BrtBeginPCDCalcItems", f:parsenoop }, + 0x00F4: { n:"BrtEndPCDCalcItems", f:parsenoop }, + 0x00F5: { n:"BrtBeginPCDCalcItem", f:parsenoop }, + 0x00F6: { n:"BrtEndPCDCalcItem", f:parsenoop }, + 0x00F7: { n:"BrtBeginPRule", f:parsenoop }, + 0x00F8: { n:"BrtEndPRule", f:parsenoop }, + 0x00F9: { n:"BrtBeginPRFilters", f:parsenoop }, + 0x00FA: { n:"BrtEndPRFilters", f:parsenoop }, + 0x00FB: { n:"BrtBeginPRFilter", f:parsenoop }, + 0x00FC: { n:"BrtEndPRFilter", f:parsenoop }, + 0x00FD: { n:"BrtBeginPNames", f:parsenoop }, + 0x00FE: { n:"BrtEndPNames", f:parsenoop }, + 0x00FF: { n:"BrtBeginPName", f:parsenoop }, + 0x0100: { n:"BrtEndPName", f:parsenoop }, + 0x0101: { n:"BrtBeginPNPairs", f:parsenoop }, + 0x0102: { n:"BrtEndPNPairs", f:parsenoop }, + 0x0103: { n:"BrtBeginPNPair", f:parsenoop }, + 0x0104: { n:"BrtEndPNPair", f:parsenoop }, + 0x0105: { n:"BrtBeginECWebProps", f:parsenoop }, + 0x0106: { n:"BrtEndECWebProps", f:parsenoop }, + 0x0107: { n:"BrtBeginEcWpTables", f:parsenoop }, + 0x0108: { n:"BrtEndECWPTables", f:parsenoop }, + 0x0109: { n:"BrtBeginECParams", f:parsenoop }, + 0x010A: { n:"BrtEndECParams", f:parsenoop }, + 0x010B: { n:"BrtBeginECParam", f:parsenoop }, + 0x010C: { n:"BrtEndECParam", f:parsenoop }, + 0x010D: { n:"BrtBeginPCDKPIs", f:parsenoop }, + 0x010E: { n:"BrtEndPCDKPIs", f:parsenoop }, + 0x010F: { n:"BrtBeginPCDKPI", f:parsenoop }, + 0x0110: { n:"BrtEndPCDKPI", f:parsenoop }, + 0x0111: { n:"BrtBeginDims", f:parsenoop }, + 0x0112: { n:"BrtEndDims", f:parsenoop }, + 0x0113: { n:"BrtBeginDim", f:parsenoop }, + 0x0114: { n:"BrtEndDim", f:parsenoop }, + 0x0115: { n:"BrtIndexPartEnd", f:parsenoop }, + 0x0116: { n:"BrtBeginStyleSheet", f:parsenoop }, + 0x0117: { n:"BrtEndStyleSheet", f:parsenoop }, + 0x0118: { n:"BrtBeginSXView", f:parsenoop }, + 0x0119: { n:"BrtEndSXVI", f:parsenoop }, + 0x011A: { n:"BrtBeginSXVI", f:parsenoop }, + 0x011B: { n:"BrtBeginSXVIs", f:parsenoop }, + 0x011C: { n:"BrtEndSXVIs", f:parsenoop }, + 0x011D: { n:"BrtBeginSXVD", f:parsenoop }, + 0x011E: { n:"BrtEndSXVD", f:parsenoop }, + 0x011F: { n:"BrtBeginSXVDs", f:parsenoop }, + 0x0120: { n:"BrtEndSXVDs", f:parsenoop }, + 0x0121: { n:"BrtBeginSXPI", f:parsenoop }, + 0x0122: { n:"BrtEndSXPI", f:parsenoop }, + 0x0123: { n:"BrtBeginSXPIs", f:parsenoop }, + 0x0124: { n:"BrtEndSXPIs", f:parsenoop }, + 0x0125: { n:"BrtBeginSXDI", f:parsenoop }, + 0x0126: { n:"BrtEndSXDI", f:parsenoop }, + 0x0127: { n:"BrtBeginSXDIs", f:parsenoop }, + 0x0128: { n:"BrtEndSXDIs", f:parsenoop }, + 0x0129: { n:"BrtBeginSXLI", f:parsenoop }, + 0x012A: { n:"BrtEndSXLI", f:parsenoop }, + 0x012B: { n:"BrtBeginSXLIRws", f:parsenoop }, + 0x012C: { n:"BrtEndSXLIRws", f:parsenoop }, + 0x012D: { n:"BrtBeginSXLICols", f:parsenoop }, + 0x012E: { n:"BrtEndSXLICols", f:parsenoop }, + 0x012F: { n:"BrtBeginSXFormat", f:parsenoop }, + 0x0130: { n:"BrtEndSXFormat", f:parsenoop }, + 0x0131: { n:"BrtBeginSXFormats", f:parsenoop }, + 0x0132: { n:"BrtEndSxFormats", f:parsenoop }, + 0x0133: { n:"BrtBeginSxSelect", f:parsenoop }, + 0x0134: { n:"BrtEndSxSelect", f:parsenoop }, + 0x0135: { n:"BrtBeginISXVDRws", f:parsenoop }, + 0x0136: { n:"BrtEndISXVDRws", f:parsenoop }, + 0x0137: { n:"BrtBeginISXVDCols", f:parsenoop }, + 0x0138: { n:"BrtEndISXVDCols", f:parsenoop }, + 0x0139: { n:"BrtEndSXLocation", f:parsenoop }, + 0x013A: { n:"BrtBeginSXLocation", f:parsenoop }, + 0x013B: { n:"BrtEndSXView", f:parsenoop }, + 0x013C: { n:"BrtBeginSXTHs", f:parsenoop }, + 0x013D: { n:"BrtEndSXTHs", f:parsenoop }, + 0x013E: { n:"BrtBeginSXTH", f:parsenoop }, + 0x013F: { n:"BrtEndSXTH", f:parsenoop }, + 0x0140: { n:"BrtBeginISXTHRws", f:parsenoop }, + 0x0141: { n:"BrtEndISXTHRws", f:parsenoop }, + 0x0142: { n:"BrtBeginISXTHCols", f:parsenoop }, + 0x0143: { n:"BrtEndISXTHCols", f:parsenoop }, + 0x0144: { n:"BrtBeginSXTDMPS", f:parsenoop }, + 0x0145: { n:"BrtEndSXTDMPs", f:parsenoop }, + 0x0146: { n:"BrtBeginSXTDMP", f:parsenoop }, + 0x0147: { n:"BrtEndSXTDMP", f:parsenoop }, + 0x0148: { n:"BrtBeginSXTHItems", f:parsenoop }, + 0x0149: { n:"BrtEndSXTHItems", f:parsenoop }, + 0x014A: { n:"BrtBeginSXTHItem", f:parsenoop }, + 0x014B: { n:"BrtEndSXTHItem", f:parsenoop }, + 0x014C: { n:"BrtBeginMetadata", f:parsenoop }, + 0x014D: { n:"BrtEndMetadata", f:parsenoop }, + 0x014E: { n:"BrtBeginEsmdtinfo", f:parsenoop }, + 0x014F: { n:"BrtMdtinfo", f:parsenoop }, + 0x0150: { n:"BrtEndEsmdtinfo", f:parsenoop }, + 0x0151: { n:"BrtBeginEsmdb", f:parsenoop }, + 0x0152: { n:"BrtEndEsmdb", f:parsenoop }, + 0x0153: { n:"BrtBeginEsfmd", f:parsenoop }, + 0x0154: { n:"BrtEndEsfmd", f:parsenoop }, + 0x0155: { n:"BrtBeginSingleCells", f:parsenoop }, + 0x0156: { n:"BrtEndSingleCells", f:parsenoop }, + 0x0157: { n:"BrtBeginList", f:parsenoop }, + 0x0158: { n:"BrtEndList", f:parsenoop }, + 0x0159: { n:"BrtBeginListCols", f:parsenoop }, + 0x015A: { n:"BrtEndListCols", f:parsenoop }, + 0x015B: { n:"BrtBeginListCol", f:parsenoop }, + 0x015C: { n:"BrtEndListCol", f:parsenoop }, + 0x015D: { n:"BrtBeginListXmlCPr", f:parsenoop }, + 0x015E: { n:"BrtEndListXmlCPr", f:parsenoop }, + 0x015F: { n:"BrtListCCFmla", f:parsenoop }, + 0x0160: { n:"BrtListTrFmla", f:parsenoop }, + 0x0161: { n:"BrtBeginExternals", f:parsenoop }, + 0x0162: { n:"BrtEndExternals", f:parsenoop }, + 0x0163: { n:"BrtSupBookSrc", f:parsenoop }, + 0x0165: { n:"BrtSupSelf", f:parsenoop }, + 0x0166: { n:"BrtSupSame", f:parsenoop }, + 0x0167: { n:"BrtSupTabs", f:parsenoop }, + 0x0168: { n:"BrtBeginSupBook", f:parsenoop }, + 0x0169: { n:"BrtPlaceholderName", f:parsenoop }, + 0x016A: { n:"BrtExternSheet", f:parsenoop }, + 0x016B: { n:"BrtExternTableStart", f:parsenoop }, + 0x016C: { n:"BrtExternTableEnd", f:parsenoop }, + 0x016E: { n:"BrtExternRowHdr", f:parsenoop }, + 0x016F: { n:"BrtExternCellBlank", f:parsenoop }, + 0x0170: { n:"BrtExternCellReal", f:parsenoop }, + 0x0171: { n:"BrtExternCellBool", f:parsenoop }, + 0x0172: { n:"BrtExternCellError", f:parsenoop }, + 0x0173: { n:"BrtExternCellString", f:parsenoop }, + 0x0174: { n:"BrtBeginEsmdx", f:parsenoop }, + 0x0175: { n:"BrtEndEsmdx", f:parsenoop }, + 0x0176: { n:"BrtBeginMdxSet", f:parsenoop }, + 0x0177: { n:"BrtEndMdxSet", f:parsenoop }, + 0x0178: { n:"BrtBeginMdxMbrProp", f:parsenoop }, + 0x0179: { n:"BrtEndMdxMbrProp", f:parsenoop }, + 0x017A: { n:"BrtBeginMdxKPI", f:parsenoop }, + 0x017B: { n:"BrtEndMdxKPI", f:parsenoop }, + 0x017C: { n:"BrtBeginEsstr", f:parsenoop }, + 0x017D: { n:"BrtEndEsstr", f:parsenoop }, + 0x017E: { n:"BrtBeginPRFItem", f:parsenoop }, + 0x017F: { n:"BrtEndPRFItem", f:parsenoop }, + 0x0180: { n:"BrtBeginPivotCacheIDs", f:parsenoop }, + 0x0181: { n:"BrtEndPivotCacheIDs", f:parsenoop }, + 0x0182: { n:"BrtBeginPivotCacheID", f:parsenoop }, + 0x0183: { n:"BrtEndPivotCacheID", f:parsenoop }, + 0x0184: { n:"BrtBeginISXVIs", f:parsenoop }, + 0x0185: { n:"BrtEndISXVIs", f:parsenoop }, + 0x0186: { n:"BrtBeginColInfos", f:parsenoop }, + 0x0187: { n:"BrtEndColInfos", f:parsenoop }, + 0x0188: { n:"BrtBeginRwBrk", f:parsenoop }, + 0x0189: { n:"BrtEndRwBrk", f:parsenoop }, + 0x018A: { n:"BrtBeginColBrk", f:parsenoop }, + 0x018B: { n:"BrtEndColBrk", f:parsenoop }, + 0x018C: { n:"BrtBrk", f:parsenoop }, + 0x018D: { n:"BrtUserBookView", f:parsenoop }, + 0x018E: { n:"BrtInfo", f:parsenoop }, + 0x018F: { n:"BrtCUsr", f:parsenoop }, + 0x0190: { n:"BrtUsr", f:parsenoop }, + 0x0191: { n:"BrtBeginUsers", f:parsenoop }, + 0x0193: { n:"BrtEOF", f:parsenoop }, + 0x0194: { n:"BrtUCR", f:parsenoop }, + 0x0195: { n:"BrtRRInsDel", f:parsenoop }, + 0x0196: { n:"BrtRREndInsDel", f:parsenoop }, + 0x0197: { n:"BrtRRMove", f:parsenoop }, + 0x0198: { n:"BrtRREndMove", f:parsenoop }, + 0x0199: { n:"BrtRRChgCell", f:parsenoop }, + 0x019A: { n:"BrtRREndChgCell", f:parsenoop }, + 0x019B: { n:"BrtRRHeader", f:parsenoop }, + 0x019C: { n:"BrtRRUserView", f:parsenoop }, + 0x019D: { n:"BrtRRRenSheet", f:parsenoop }, + 0x019E: { n:"BrtRRInsertSh", f:parsenoop }, + 0x019F: { n:"BrtRRDefName", f:parsenoop }, + 0x01A0: { n:"BrtRRNote", f:parsenoop }, + 0x01A1: { n:"BrtRRConflict", f:parsenoop }, + 0x01A2: { n:"BrtRRTQSIF", f:parsenoop }, + 0x01A3: { n:"BrtRRFormat", f:parsenoop }, + 0x01A4: { n:"BrtRREndFormat", f:parsenoop }, + 0x01A5: { n:"BrtRRAutoFmt", f:parsenoop }, + 0x01A6: { n:"BrtBeginUserShViews", f:parsenoop }, + 0x01A7: { n:"BrtBeginUserShView", f:parsenoop }, + 0x01A8: { n:"BrtEndUserShView", f:parsenoop }, + 0x01A9: { n:"BrtEndUserShViews", f:parsenoop }, + 0x01AA: { n:"BrtArrFmla", f:parsenoop }, + 0x01AB: { n:"BrtShrFmla", f:parsenoop }, + 0x01AC: { n:"BrtTable", f:parsenoop }, + 0x01AD: { n:"BrtBeginExtConnections", f:parsenoop }, + 0x01AE: { n:"BrtEndExtConnections", f:parsenoop }, + 0x01AF: { n:"BrtBeginPCDCalcMems", f:parsenoop }, + 0x01B0: { n:"BrtEndPCDCalcMems", f:parsenoop }, + 0x01B1: { n:"BrtBeginPCDCalcMem", f:parsenoop }, + 0x01B2: { n:"BrtEndPCDCalcMem", f:parsenoop }, + 0x01B3: { n:"BrtBeginPCDHGLevels", f:parsenoop }, + 0x01B4: { n:"BrtEndPCDHGLevels", f:parsenoop }, + 0x01B5: { n:"BrtBeginPCDHGLevel", f:parsenoop }, + 0x01B6: { n:"BrtEndPCDHGLevel", f:parsenoop }, + 0x01B7: { n:"BrtBeginPCDHGLGroups", f:parsenoop }, + 0x01B8: { n:"BrtEndPCDHGLGroups", f:parsenoop }, + 0x01B9: { n:"BrtBeginPCDHGLGroup", f:parsenoop }, + 0x01BA: { n:"BrtEndPCDHGLGroup", f:parsenoop }, + 0x01BB: { n:"BrtBeginPCDHGLGMembers", f:parsenoop }, + 0x01BC: { n:"BrtEndPCDHGLGMembers", f:parsenoop }, + 0x01BD: { n:"BrtBeginPCDHGLGMember", f:parsenoop }, + 0x01BE: { n:"BrtEndPCDHGLGMember", f:parsenoop }, + 0x01BF: { n:"BrtBeginQSI", f:parsenoop }, + 0x01C0: { n:"BrtEndQSI", f:parsenoop }, + 0x01C1: { n:"BrtBeginQSIR", f:parsenoop }, + 0x01C2: { n:"BrtEndQSIR", f:parsenoop }, + 0x01C3: { n:"BrtBeginDeletedNames", f:parsenoop }, + 0x01C4: { n:"BrtEndDeletedNames", f:parsenoop }, + 0x01C5: { n:"BrtBeginDeletedName", f:parsenoop }, + 0x01C6: { n:"BrtEndDeletedName", f:parsenoop }, + 0x01C7: { n:"BrtBeginQSIFs", f:parsenoop }, + 0x01C8: { n:"BrtEndQSIFs", f:parsenoop }, + 0x01C9: { n:"BrtBeginQSIF", f:parsenoop }, + 0x01CA: { n:"BrtEndQSIF", f:parsenoop }, + 0x01CB: { n:"BrtBeginAutoSortScope", f:parsenoop }, + 0x01CC: { n:"BrtEndAutoSortScope", f:parsenoop }, + 0x01CD: { n:"BrtBeginConditionalFormatting", f:parsenoop }, + 0x01CE: { n:"BrtEndConditionalFormatting", f:parsenoop }, + 0x01CF: { n:"BrtBeginCFRule", f:parsenoop }, + 0x01D0: { n:"BrtEndCFRule", f:parsenoop }, + 0x01D1: { n:"BrtBeginIconSet", f:parsenoop }, + 0x01D2: { n:"BrtEndIconSet", f:parsenoop }, + 0x01D3: { n:"BrtBeginDatabar", f:parsenoop }, + 0x01D4: { n:"BrtEndDatabar", f:parsenoop }, + 0x01D5: { n:"BrtBeginColorScale", f:parsenoop }, + 0x01D6: { n:"BrtEndColorScale", f:parsenoop }, + 0x01D7: { n:"BrtCFVO", f:parsenoop }, + 0x01D8: { n:"BrtExternValueMeta", f:parsenoop }, + 0x01D9: { n:"BrtBeginColorPalette", f:parsenoop }, + 0x01DA: { n:"BrtEndColorPalette", f:parsenoop }, + 0x01DB: { n:"BrtIndexedColor", f:parsenoop }, + 0x01DC: { n:"BrtMargins", f:parsenoop }, + 0x01DD: { n:"BrtPrintOptions", f:parsenoop }, + 0x01DE: { n:"BrtPageSetup", f:parsenoop }, + 0x01DF: { n:"BrtBeginHeaderFooter", f:parsenoop }, + 0x01E0: { n:"BrtEndHeaderFooter", f:parsenoop }, + 0x01E1: { n:"BrtBeginSXCrtFormat", f:parsenoop }, + 0x01E2: { n:"BrtEndSXCrtFormat", f:parsenoop }, + 0x01E3: { n:"BrtBeginSXCrtFormats", f:parsenoop }, + 0x01E4: { n:"BrtEndSXCrtFormats", f:parsenoop }, + 0x01E5: { n:"BrtWsFmtInfo", f:parsenoop }, + 0x01E6: { n:"BrtBeginMgs", f:parsenoop }, + 0x01E7: { n:"BrtEndMGs", f:parsenoop }, + 0x01E8: { n:"BrtBeginMGMaps", f:parsenoop }, + 0x01E9: { n:"BrtEndMGMaps", f:parsenoop }, + 0x01EA: { n:"BrtBeginMG", f:parsenoop }, + 0x01EB: { n:"BrtEndMG", f:parsenoop }, + 0x01EC: { n:"BrtBeginMap", f:parsenoop }, + 0x01ED: { n:"BrtEndMap", f:parsenoop }, + 0x01EE: { n:"BrtHLink", f:parsenoop }, + 0x01EF: { n:"BrtBeginDCon", f:parsenoop }, + 0x01F0: { n:"BrtEndDCon", f:parsenoop }, + 0x01F1: { n:"BrtBeginDRefs", f:parsenoop }, + 0x01F2: { n:"BrtEndDRefs", f:parsenoop }, + 0x01F3: { n:"BrtDRef", f:parsenoop }, + 0x01F4: { n:"BrtBeginScenMan", f:parsenoop }, + 0x01F5: { n:"BrtEndScenMan", f:parsenoop }, + 0x01F6: { n:"BrtBeginSct", f:parsenoop }, + 0x01F7: { n:"BrtEndSct", f:parsenoop }, + 0x01F8: { n:"BrtSlc", f:parsenoop }, + 0x01F9: { n:"BrtBeginDXFs", f:parsenoop }, + 0x01FA: { n:"BrtEndDXFs", f:parsenoop }, + 0x01FB: { n:"BrtDXF", f:parsenoop }, + 0x01FC: { n:"BrtBeginTableStyles", f:parsenoop }, + 0x01FD: { n:"BrtEndTableStyles", f:parsenoop }, + 0x01FE: { n:"BrtBeginTableStyle", f:parsenoop }, + 0x01FF: { n:"BrtEndTableStyle", f:parsenoop }, + 0x0200: { n:"BrtTableStyleElement", f:parsenoop }, + 0x0201: { n:"BrtTableStyleClient", f:parsenoop }, + 0x0202: { n:"BrtBeginVolDeps", f:parsenoop }, + 0x0203: { n:"BrtEndVolDeps", f:parsenoop }, + 0x0204: { n:"BrtBeginVolType", f:parsenoop }, + 0x0205: { n:"BrtEndVolType", f:parsenoop }, + 0x0206: { n:"BrtBeginVolMain", f:parsenoop }, + 0x0207: { n:"BrtEndVolMain", f:parsenoop }, + 0x0208: { n:"BrtBeginVolTopic", f:parsenoop }, + 0x0209: { n:"BrtEndVolTopic", f:parsenoop }, + 0x020A: { n:"BrtVolSubtopic", f:parsenoop }, + 0x020B: { n:"BrtVolRef", f:parsenoop }, + 0x020C: { n:"BrtVolNum", f:parsenoop }, + 0x020D: { n:"BrtVolErr", f:parsenoop }, + 0x020E: { n:"BrtVolStr", f:parsenoop }, + 0x020F: { n:"BrtVolBool", f:parsenoop }, + 0x0212: { n:"BrtBeginSortState", f:parsenoop }, + 0x0213: { n:"BrtEndSortState", f:parsenoop }, + 0x0214: { n:"BrtBeginSortCond", f:parsenoop }, + 0x0215: { n:"BrtEndSortCond", f:parsenoop }, + 0x0216: { n:"BrtBookProtection", f:parsenoop }, + 0x0217: { n:"BrtSheetProtection", f:parsenoop }, + 0x0218: { n:"BrtRangeProtection", f:parsenoop }, + 0x0219: { n:"BrtPhoneticInfo", f:parsenoop }, + 0x021A: { n:"BrtBeginECTxtWiz", f:parsenoop }, + 0x021B: { n:"BrtEndECTxtWiz", f:parsenoop }, + 0x021C: { n:"BrtBeginECTWFldInfoLst", f:parsenoop }, + 0x021D: { n:"BrtEndECTWFldInfoLst", f:parsenoop }, + 0x021E: { n:"BrtBeginECTwFldInfo", f:parsenoop }, + 0x0224: { n:"BrtFileSharing", f:parsenoop }, + 0x0225: { n:"BrtOleSize", f:parsenoop }, + 0x0226: { n:"BrtDrawing", f:parsenoop }, + 0x0227: { n:"BrtLegacyDrawing", f:parsenoop }, + 0x0228: { n:"BrtLegacyDrawingHF", f:parsenoop }, + 0x0229: { n:"BrtWebOpt", f:parsenoop }, + 0x022A: { n:"BrtBeginWebPubItems", f:parsenoop }, + 0x022B: { n:"BrtEndWebPubItems", f:parsenoop }, + 0x022C: { n:"BrtBeginWebPubItem", f:parsenoop }, + 0x022D: { n:"BrtEndWebPubItem", f:parsenoop }, + 0x022E: { n:"BrtBeginSXCondFmt", f:parsenoop }, + 0x022F: { n:"BrtEndSXCondFmt", f:parsenoop }, + 0x0230: { n:"BrtBeginSXCondFmts", f:parsenoop }, + 0x0231: { n:"BrtEndSXCondFmts", f:parsenoop }, + 0x0232: { n:"BrtBkHim", f:parsenoop }, + 0x0234: { n:"BrtColor", f:parsenoop }, + 0x0235: { n:"BrtBeginIndexedColors", f:parsenoop }, + 0x0236: { n:"BrtEndIndexedColors", f:parsenoop }, + 0x0239: { n:"BrtBeginMRUColors", f:parsenoop }, + 0x023A: { n:"BrtEndMRUColors", f:parsenoop }, + 0x023C: { n:"BrtMRUColor", f:parsenoop }, + 0x023D: { n:"BrtBeginDVals", f:parsenoop }, + 0x023E: { n:"BrtEndDVals", f:parsenoop }, + 0x0241: { n:"BrtSupNameStart", f:parsenoop }, + 0x0242: { n:"BrtSupNameValueStart", f:parsenoop }, + 0x0243: { n:"BrtSupNameValueEnd", f:parsenoop }, + 0x0244: { n:"BrtSupNameNum", f:parsenoop }, + 0x0245: { n:"BrtSupNameErr", f:parsenoop }, + 0x0246: { n:"BrtSupNameSt", f:parsenoop }, + 0x0247: { n:"BrtSupNameNil", f:parsenoop }, + 0x0248: { n:"BrtSupNameBool", f:parsenoop }, + 0x0249: { n:"BrtSupNameFmla", f:parsenoop }, + 0x024A: { n:"BrtSupNameBits", f:parsenoop }, + 0x024B: { n:"BrtSupNameEnd", f:parsenoop }, + 0x024C: { n:"BrtEndSupBook", f:parsenoop }, + 0x024D: { n:"BrtCellSmartTagProperty", f:parsenoop }, + 0x024E: { n:"BrtBeginCellSmartTag", f:parsenoop }, + 0x024F: { n:"BrtEndCellSmartTag", f:parsenoop }, + 0x0250: { n:"BrtBeginCellSmartTags", f:parsenoop }, + 0x0251: { n:"BrtEndCellSmartTags", f:parsenoop }, + 0x0252: { n:"BrtBeginSmartTags", f:parsenoop }, + 0x0253: { n:"BrtEndSmartTags", f:parsenoop }, + 0x0254: { n:"BrtSmartTagType", f:parsenoop }, + 0x0255: { n:"BrtBeginSmartTagTypes", f:parsenoop }, + 0x0256: { n:"BrtEndSmartTagTypes", f:parsenoop }, + 0x0257: { n:"BrtBeginSXFilters", f:parsenoop }, + 0x0258: { n:"BrtEndSXFilters", f:parsenoop }, + 0x0259: { n:"BrtBeginSXFILTER", f:parsenoop }, + 0x025A: { n:"BrtEndSXFilter", f:parsenoop }, + 0x025B: { n:"BrtBeginFills", f:parsenoop }, + 0x025C: { n:"BrtEndFills", f:parsenoop }, + 0x025D: { n:"BrtBeginCellWatches", f:parsenoop }, + 0x025E: { n:"BrtEndCellWatches", f:parsenoop }, + 0x025F: { n:"BrtCellWatch", f:parsenoop }, + 0x0260: { n:"BrtBeginCRErrs", f:parsenoop }, + 0x0261: { n:"BrtEndCRErrs", f:parsenoop }, + 0x0262: { n:"BrtCrashRecErr", f:parsenoop }, + 0x0263: { n:"BrtBeginFonts", f:parsenoop }, + 0x0264: { n:"BrtEndFonts", f:parsenoop }, + 0x0265: { n:"BrtBeginBorders", f:parsenoop }, + 0x0266: { n:"BrtEndBorders", f:parsenoop }, + 0x0267: { n:"BrtBeginFmts", f:parsenoop }, + 0x0268: { n:"BrtEndFmts", f:parsenoop }, + 0x0269: { n:"BrtBeginCellXFs", f:parsenoop }, + 0x026A: { n:"BrtEndCellXFs", f:parsenoop }, + 0x026B: { n:"BrtBeginStyles", f:parsenoop }, + 0x026C: { n:"BrtEndStyles", f:parsenoop }, + 0x0271: { n:"BrtBigName", f:parsenoop }, + 0x0272: { n:"BrtBeginCellStyleXFs", f:parsenoop }, + 0x0273: { n:"BrtEndCellStyleXFs", f:parsenoop }, + 0x0274: { n:"BrtBeginComments", f:parsenoop }, + 0x0275: { n:"BrtEndComments", f:parsenoop }, + 0x0276: { n:"BrtBeginCommentAuthors", f:parsenoop }, + 0x0277: { n:"BrtEndCommentAuthors", f:parsenoop }, + 0x0278: { n:"BrtCommentAuthor", f:parsenoop }, + 0x0279: { n:"BrtBeginCommentList", f:parsenoop }, + 0x027A: { n:"BrtEndCommentList", f:parsenoop }, + 0x027B: { n:"BrtBeginComment", f:parsenoop }, + 0x027C: { n:"BrtEndComment", f:parsenoop }, + 0x027D: { n:"BrtCommentText", f:parsenoop }, + 0x027E: { n:"BrtBeginOleObjects", f:parsenoop }, + 0x027F: { n:"BrtOleObject", f:parsenoop }, + 0x0280: { n:"BrtEndOleObjects", f:parsenoop }, + 0x0281: { n:"BrtBeginSxrules", f:parsenoop }, + 0x0282: { n:"BrtEndSxRules", f:parsenoop }, + 0x0283: { n:"BrtBeginActiveXControls", f:parsenoop }, + 0x0284: { n:"BrtActiveX", f:parsenoop }, + 0x0285: { n:"BrtEndActiveXControls", f:parsenoop }, + 0x0286: { n:"BrtBeginPCDSDTCEMembersSortBy", f:parsenoop }, + 0x0288: { n:"BrtBeginCellIgnoreECs", f:parsenoop }, + 0x0289: { n:"BrtCellIgnoreEC", f:parsenoop }, + 0x028A: { n:"BrtEndCellIgnoreECs", f:parsenoop }, + 0x028B: { n:"BrtCsProp", f:parsenoop }, + 0x028C: { n:"BrtCsPageSetup", f:parsenoop }, + 0x028D: { n:"BrtBeginUserCsViews", f:parsenoop }, + 0x028E: { n:"BrtEndUserCsViews", f:parsenoop }, + 0x028F: { n:"BrtBeginUserCsView", f:parsenoop }, + 0x0290: { n:"BrtEndUserCsView", f:parsenoop }, + 0x0291: { n:"BrtBeginPcdSFCIEntries", f:parsenoop }, + 0x0292: { n:"BrtEndPCDSFCIEntries", f:parsenoop }, + 0x0293: { n:"BrtPCDSFCIEntry", f:parsenoop }, + 0x0294: { n:"BrtBeginListParts", f:parsenoop }, + 0x0295: { n:"BrtListPart", f:parsenoop }, + 0x0296: { n:"BrtEndListParts", f:parsenoop }, + 0x0297: { n:"BrtSheetCalcProp", f:parsenoop }, + 0x0298: { n:"BrtBeginFnGroup", f:parsenoop }, + 0x0299: { n:"BrtFnGroup", f:parsenoop }, + 0x029A: { n:"BrtEndFnGroup", f:parsenoop }, + 0x029B: { n:"BrtSupAddin", f:parsenoop }, + 0x029C: { n:"BrtSXTDMPOrder", f:parsenoop }, + 0x029D: { n:"BrtCsProtection", f:parsenoop }, + 0x029F: { n:"BrtBeginWsSortMap", f:parsenoop }, + 0x02A0: { n:"BrtEndWsSortMap", f:parsenoop }, + 0x02A1: { n:"BrtBeginRRSort", f:parsenoop }, + 0x02A2: { n:"BrtEndRRSort", f:parsenoop }, + 0x02A3: { n:"BrtRRSortItem", f:parsenoop }, + 0x02A4: { n:"BrtFileSharingIso", f:parsenoop }, + 0x02A5: { n:"BrtBookProtectionIso", f:parsenoop }, + 0x02A6: { n:"BrtSheetProtectionIso", f:parsenoop }, + 0x02A7: { n:"BrtCsProtectionIso", f:parsenoop }, + 0x02A8: { n:"BrtRangeProtectionIso", f:parsenoop }, + 0x0400: { n:"BrtRwDescent", f:parsenoop }, + 0x0401: { n:"BrtKnownFonts", f:parsenoop }, + 0x0402: { n:"BrtBeginSXTupleSet", f:parsenoop }, + 0x0403: { n:"BrtEndSXTupleSet", f:parsenoop }, + 0x0404: { n:"BrtBeginSXTupleSetHeader", f:parsenoop }, + 0x0405: { n:"BrtEndSXTupleSetHeader", f:parsenoop }, + 0x0406: { n:"BrtSXTupleSetHeaderItem", f:parsenoop }, + 0x0407: { n:"BrtBeginSXTupleSetData", f:parsenoop }, + 0x0408: { n:"BrtEndSXTupleSetData", f:parsenoop }, + 0x0409: { n:"BrtBeginSXTupleSetRow", f:parsenoop }, + 0x040A: { n:"BrtEndSXTupleSetRow", f:parsenoop }, + 0x040B: { n:"BrtSXTupleSetRowItem", f:parsenoop }, + 0x040C: { n:"BrtNameExt", f:parsenoop }, + 0x040D: { n:"BrtPCDH14", f:parsenoop }, + 0x040E: { n:"BrtBeginPCDCalcMem14", f:parsenoop }, + 0x040F: { n:"BrtEndPCDCalcMem14", f:parsenoop }, + 0x0410: { n:"BrtSXTH14", f:parsenoop }, + 0x0411: { n:"BrtBeginSparklineGroup", f:parsenoop }, + 0x0412: { n:"BrtEndSparklineGroup", f:parsenoop }, + 0x0413: { n:"BrtSparkline", f:parsenoop }, + 0x0414: { n:"BrtSXDI14", f:parsenoop }, + 0x0415: { n:"BrtWsFmtInfoEx14", f:parsenoop }, + 0x0416: { n:"BrtBeginConditionalFormatting14", f:parsenoop }, + 0x0417: { n:"BrtEndConditionalFormatting14", f:parsenoop }, + 0x0418: { n:"BrtBeginCFRule14", f:parsenoop }, + 0x0419: { n:"BrtEndCFRule14", f:parsenoop }, + 0x041A: { n:"BrtCFVO14", f:parsenoop }, + 0x041B: { n:"BrtBeginDatabar14", f:parsenoop }, + 0x041C: { n:"BrtBeginIconSet14", f:parsenoop }, + 0x041D: { n:"BrtDVal14", f:parsenoop }, + 0x041E: { n:"BrtBeginDVals14", f:parsenoop }, + 0x041F: { n:"BrtColor14", f:parsenoop }, + 0x0420: { n:"BrtBeginSparklines", f:parsenoop }, + 0x0421: { n:"BrtEndSparklines", f:parsenoop }, + 0x0422: { n:"BrtBeginSparklineGroups", f:parsenoop }, + 0x0423: { n:"BrtEndSparklineGroups", f:parsenoop }, + 0x0425: { n:"BrtSXVD14", f:parsenoop }, + 0x0426: { n:"BrtBeginSxview14", f:parsenoop }, + 0x0427: { n:"BrtEndSxview14", f:parsenoop }, + 0x042A: { n:"BrtBeginPCD14", f:parsenoop }, + 0x042B: { n:"BrtEndPCD14", f:parsenoop }, + 0x042C: { n:"BrtBeginExtConn14", f:parsenoop }, + 0x042D: { n:"BrtEndExtConn14", f:parsenoop }, + 0x042E: { n:"BrtBeginSlicerCacheIDs", f:parsenoop }, + 0x042F: { n:"BrtEndSlicerCacheIDs", f:parsenoop }, + 0x0430: { n:"BrtBeginSlicerCacheID", f:parsenoop }, + 0x0431: { n:"BrtEndSlicerCacheID", f:parsenoop }, + 0x0433: { n:"BrtBeginSlicerCache", f:parsenoop }, + 0x0434: { n:"BrtEndSlicerCache", f:parsenoop }, + 0x0435: { n:"BrtBeginSlicerCacheDef", f:parsenoop }, + 0x0436: { n:"BrtEndSlicerCacheDef", f:parsenoop }, + 0x0437: { n:"BrtBeginSlicersEx", f:parsenoop }, + 0x0438: { n:"BrtEndSlicersEx", f:parsenoop }, + 0x0439: { n:"BrtBeginSlicerEx", f:parsenoop }, + 0x043A: { n:"BrtEndSlicerEx", f:parsenoop }, + 0x043B: { n:"BrtBeginSlicer", f:parsenoop }, + 0x043C: { n:"BrtEndSlicer", f:parsenoop }, + 0x043D: { n:"BrtSlicerCachePivotTables", f:parsenoop }, + 0x043E: { n:"BrtBeginSlicerCacheOlapImpl", f:parsenoop }, + 0x043F: { n:"BrtEndSlicerCacheOlapImpl", f:parsenoop }, + 0x0440: { n:"BrtBeginSlicerCacheLevelsData", f:parsenoop }, + 0x0441: { n:"BrtEndSlicerCacheLevelsData", f:parsenoop }, + 0x0442: { n:"BrtBeginSlicerCacheLevelData", f:parsenoop }, + 0x0443: { n:"BrtEndSlicerCacheLevelData", f:parsenoop }, + 0x0444: { n:"BrtBeginSlicerCacheSiRanges", f:parsenoop }, + 0x0445: { n:"BrtEndSlicerCacheSiRanges", f:parsenoop }, + 0x0446: { n:"BrtBeginSlicerCacheSiRange", f:parsenoop }, + 0x0447: { n:"BrtEndSlicerCacheSiRange", f:parsenoop }, + 0x0448: { n:"BrtSlicerCacheOlapItem", f:parsenoop }, + 0x0449: { n:"BrtBeginSlicerCacheSelections", f:parsenoop }, + 0x044A: { n:"BrtSlicerCacheSelection", f:parsenoop }, + 0x044B: { n:"BrtEndSlicerCacheSelections", f:parsenoop }, + 0x044C: { n:"BrtBeginSlicerCacheNative", f:parsenoop }, + 0x044D: { n:"BrtEndSlicerCacheNative", f:parsenoop }, + 0x044E: { n:"BrtSlicerCacheNativeItem", f:parsenoop }, + 0x044F: { n:"BrtRangeProtection14", f:parsenoop }, + 0x0450: { n:"BrtRangeProtectionIso14", f:parsenoop }, + 0x0451: { n:"BrtCellIgnoreEC14", f:parsenoop }, + 0x0457: { n:"BrtList14", f:parsenoop }, + 0x0458: { n:"BrtCFIcon", f:parsenoop }, + 0x0459: { n:"BrtBeginSlicerCachesPivotCacheIDs", f:parsenoop }, + 0x045A: { n:"BrtEndSlicerCachesPivotCacheIDs", f:parsenoop }, + 0x045B: { n:"BrtBeginSlicers", f:parsenoop }, + 0x045C: { n:"BrtEndSlicers", f:parsenoop }, + 0x045D: { n:"BrtWbProp14", f:parsenoop }, + 0x045E: { n:"BrtBeginSXEdit", f:parsenoop }, + 0x045F: { n:"BrtEndSXEdit", f:parsenoop }, + 0x0460: { n:"BrtBeginSXEdits", f:parsenoop }, + 0x0461: { n:"BrtEndSXEdits", f:parsenoop }, + 0x0462: { n:"BrtBeginSXChange", f:parsenoop }, + 0x0463: { n:"BrtEndSXChange", f:parsenoop }, + 0x0464: { n:"BrtBeginSXChanges", f:parsenoop }, + 0x0465: { n:"BrtEndSXChanges", f:parsenoop }, + 0x0466: { n:"BrtSXTupleItems", f:parsenoop }, + 0x0468: { n:"BrtBeginSlicerStyle", f:parsenoop }, + 0x0469: { n:"BrtEndSlicerStyle", f:parsenoop }, + 0x046A: { n:"BrtSlicerStyleElement", f:parsenoop }, + 0x046B: { n:"BrtBeginStyleSheetExt14", f:parsenoop }, + 0x046C: { n:"BrtEndStyleSheetExt14", f:parsenoop }, + 0x046D: { n:"BrtBeginSlicerCachesPivotCacheID", f:parsenoop }, + 0x046E: { n:"BrtEndSlicerCachesPivotCacheID", f:parsenoop }, + 0x046F: { n:"BrtBeginConditionalFormattings", f:parsenoop }, + 0x0470: { n:"BrtEndConditionalFormattings", f:parsenoop }, + 0x0471: { n:"BrtBeginPCDCalcMemExt", f:parsenoop }, + 0x0472: { n:"BrtEndPCDCalcMemExt", f:parsenoop }, + 0x0473: { n:"BrtBeginPCDCalcMemsExt", f:parsenoop }, + 0x0474: { n:"BrtEndPCDCalcMemsExt", f:parsenoop }, + 0x0475: { n:"BrtPCDField14", f:parsenoop }, + 0x0476: { n:"BrtBeginSlicerStyles", f:parsenoop }, + 0x0477: { n:"BrtEndSlicerStyles", f:parsenoop }, + 0x0478: { n:"BrtBeginSlicerStyleElements", f:parsenoop }, + 0x0479: { n:"BrtEndSlicerStyleElements", f:parsenoop }, + 0x047A: { n:"BrtCFRuleExt", f:parsenoop }, + 0x047B: { n:"BrtBeginSXCondFmt14", f:parsenoop }, + 0x047C: { n:"BrtEndSXCondFmt14", f:parsenoop }, + 0x047D: { n:"BrtBeginSXCondFmts14", f:parsenoop }, + 0x047E: { n:"BrtEndSXCondFmts14", f:parsenoop }, + 0x0480: { n:"BrtBeginSortCond14", f:parsenoop }, + 0x0481: { n:"BrtEndSortCond14", f:parsenoop }, + 0x0482: { n:"BrtEndDVals14", f:parsenoop }, + 0x0483: { n:"BrtEndIconSet14", f:parsenoop }, + 0x0484: { n:"BrtEndDatabar14", f:parsenoop }, + 0x0485: { n:"BrtBeginColorScale14", f:parsenoop }, + 0x0486: { n:"BrtEndColorScale14", f:parsenoop }, + 0x0487: { n:"BrtBeginSxrules14", f:parsenoop }, + 0x0488: { n:"BrtEndSxrules14", f:parsenoop }, + 0x0489: { n:"BrtBeginPRule14", f:parsenoop }, + 0x048A: { n:"BrtEndPRule14", f:parsenoop }, + 0x048B: { n:"BrtBeginPRFilters14", f:parsenoop }, + 0x048C: { n:"BrtEndPRFilters14", f:parsenoop }, + 0x048D: { n:"BrtBeginPRFilter14", f:parsenoop }, + 0x048E: { n:"BrtEndPRFilter14", f:parsenoop }, + 0x048F: { n:"BrtBeginPRFItem14", f:parsenoop }, + 0x0490: { n:"BrtEndPRFItem14", f:parsenoop }, + 0x0491: { n:"BrtBeginCellIgnoreECs14", f:parsenoop }, + 0x0492: { n:"BrtEndCellIgnoreECs14", f:parsenoop }, + 0x0493: { n:"BrtDxf14", f:parsenoop }, + 0x0494: { n:"BrtBeginDxF14s", f:parsenoop }, + 0x0495: { n:"BrtEndDxf14s", f:parsenoop }, + 0x0499: { n:"BrtFilter14", f:parsenoop }, + 0x049A: { n:"BrtBeginCustomFilters14", f:parsenoop }, + 0x049C: { n:"BrtCustomFilter14", f:parsenoop }, + 0x049D: { n:"BrtIconFilter14", f:parsenoop }, + 0x049E: { n:"BrtPivotCacheConnectionName", f:parsenoop }, + 0x0800: { n:"BrtBeginDecoupledPivotCacheIDs", f:parsenoop }, + 0x0801: { n:"BrtEndDecoupledPivotCacheIDs", f:parsenoop }, + 0x0802: { n:"BrtDecoupledPivotCacheID", f:parsenoop }, + 0x0803: { n:"BrtBeginPivotTableRefs", f:parsenoop }, + 0x0804: { n:"BrtEndPivotTableRefs", f:parsenoop }, + 0x0805: { n:"BrtPivotTableRef", f:parsenoop }, + 0x0806: { n:"BrtSlicerCacheBookPivotTables", f:parsenoop }, + 0x0807: { n:"BrtBeginSxvcells", f:parsenoop }, + 0x0808: { n:"BrtEndSxvcells", f:parsenoop }, + 0x0809: { n:"BrtBeginSxRow", f:parsenoop }, + 0x080A: { n:"BrtEndSxRow", f:parsenoop }, + 0x080C: { n:"BrtPcdCalcMem15", f:parsenoop }, + 0x0813: { n:"BrtQsi15", f:parsenoop }, + 0x0814: { n:"BrtBeginWebExtensions", f:parsenoop }, + 0x0815: { n:"BrtEndWebExtensions", f:parsenoop }, + 0x0816: { n:"BrtWebExtension", f:parsenoop }, + 0x0817: { n:"BrtAbsPath15", f:parsenoop }, + 0x0818: { n:"BrtBeginPivotTableUISettings", f:parsenoop }, + 0x0819: { n:"BrtEndPivotTableUISettings", f:parsenoop }, + 0x081B: { n:"BrtTableSlicerCacheIDs", f:parsenoop }, + 0x081C: { n:"BrtTableSlicerCacheID", f:parsenoop }, + 0x081D: { n:"BrtBeginTableSlicerCache", f:parsenoop }, + 0x081E: { n:"BrtEndTableSlicerCache", f:parsenoop }, + 0x081F: { n:"BrtSxFilter15", f:parsenoop }, + 0x0820: { n:"BrtBeginTimelineCachePivotCacheIDs", f:parsenoop }, + 0x0821: { n:"BrtEndTimelineCachePivotCacheIDs", f:parsenoop }, + 0x0822: { n:"BrtTimelineCachePivotCacheID", f:parsenoop }, + 0x0823: { n:"BrtBeginTimelineCacheIDs", f:parsenoop }, + 0x0824: { n:"BrtEndTimelineCacheIDs", f:parsenoop }, + 0x0825: { n:"BrtBeginTimelineCacheID", f:parsenoop }, + 0x0826: { n:"BrtEndTimelineCacheID", f:parsenoop }, + 0x0827: { n:"BrtBeginTimelinesEx", f:parsenoop }, + 0x0828: { n:"BrtEndTimelinesEx", f:parsenoop }, + 0x0829: { n:"BrtBeginTimelineEx", f:parsenoop }, + 0x082A: { n:"BrtEndTimelineEx", f:parsenoop }, + 0x082B: { n:"BrtWorkBookPr15", f:parsenoop }, + 0x082C: { n:"BrtPCDH15", f:parsenoop }, + 0x082D: { n:"BrtBeginTimelineStyle", f:parsenoop }, + 0x082E: { n:"BrtEndTimelineStyle", f:parsenoop }, + 0x082F: { n:"BrtTimelineStyleElement", f:parsenoop }, + 0x0830: { n:"BrtBeginTimelineStylesheetExt15", f:parsenoop }, + 0x0831: { n:"BrtEndTimelineStylesheetExt15", f:parsenoop }, + 0x0832: { n:"BrtBeginTimelineStyles", f:parsenoop }, + 0x0833: { n:"BrtEndTimelineStyles", f:parsenoop }, + 0x0834: { n:"BrtBeginTimelineStyleElements", f:parsenoop }, + 0x0835: { n:"BrtEndTimelineStyleElements", f:parsenoop }, + 0x0836: { n:"BrtDxf15", f:parsenoop }, + 0x0837: { n:"BrtBeginDxfs15", f:parsenoop }, + 0x0838: { n:"brtEndDxfs15", f:parsenoop }, + 0x0839: { n:"BrtSlicerCacheHideItemsWithNoData", f:parsenoop }, + 0x083A: { n:"BrtBeginItemUniqueNames", f:parsenoop }, + 0x083B: { n:"BrtEndItemUniqueNames", f:parsenoop }, + 0x083C: { n:"BrtItemUniqueName", f:parsenoop }, + 0x083D: { n:"BrtBeginExtConn15", f:parsenoop }, + 0x083E: { n:"BrtEndExtConn15", f:parsenoop }, + 0x083F: { n:"BrtBeginOledbPr15", f:parsenoop }, + 0x0840: { n:"BrtEndOledbPr15", f:parsenoop }, + 0x0841: { n:"BrtBeginDataFeedPr15", f:parsenoop }, + 0x0842: { n:"BrtEndDataFeedPr15", f:parsenoop }, + 0x0843: { n:"BrtTextPr15", f:parsenoop }, + 0x0844: { n:"BrtRangePr15", f:parsenoop }, + 0x0845: { n:"BrtDbCommand15", f:parsenoop }, + 0x0846: { n:"BrtBeginDbTables15", f:parsenoop }, + 0x0847: { n:"BrtEndDbTables15", f:parsenoop }, + 0x0848: { n:"BrtDbTable15", f:parsenoop }, + 0x0849: { n:"BrtBeginDataModel", f:parsenoop }, + 0x084A: { n:"BrtEndDataModel", f:parsenoop }, + 0x084B: { n:"BrtBeginModelTables", f:parsenoop }, + 0x084C: { n:"BrtEndModelTables", f:parsenoop }, + 0x084D: { n:"BrtModelTable", f:parsenoop }, + 0x084E: { n:"BrtBeginModelRelationships", f:parsenoop }, + 0x084F: { n:"BrtEndModelRelationships", f:parsenoop }, + 0x0850: { n:"BrtModelRelationship", f:parsenoop }, + 0x0851: { n:"BrtBeginECTxtWiz15", f:parsenoop }, + 0x0852: { n:"BrtEndECTxtWiz15", f:parsenoop }, + 0x0853: { n:"BrtBeginECTWFldInfoLst15", f:parsenoop }, + 0x0854: { n:"BrtEndECTWFldInfoLst15", f:parsenoop }, + 0x0855: { n:"BrtBeginECTWFldInfo15", f:parsenoop }, + 0x0856: { n:"BrtFieldListActiveItem", f:parsenoop }, + 0x0857: { n:"BrtPivotCacheIdVersion", f:parsenoop }, + 0x0858: { n:"BrtSXDI15", f:parsenoop }, + 0xFFFF: { n:"", f:parsenoop } +}; + +function fixopts(opts) { + var defaults = [ + ['cellNF', false], /* emit cell number format string as .z */ + ['cellHTML', true], /* emit html string as .h */ + ['cellFormula', true], /* emit formulae as .h */ + + ['sheetStubs', false], /* emit empty cells */ + + ['bookDeps', false], /* parse calculation chains */ + ['bookSheets', false], /* only try to get sheet names (no Sheets) */ + ['bookProps', false], /* only try to get properties (no Sheets) */ + ['bookFiles', false], /* include raw file structure (keys, files) */ + + ['WTF', false] /* WTF mode (throws errors) */ + ]; + defaults.forEach(function(d) { if(typeof opts[d[0]] === 'undefined') opts[d[0]] = d[1]; }); +} +function parseZip(zip, opts) { + opts = opts || {}; + fixopts(opts); + reset_cp(); + var entries = Object.keys(zip.files); + var keys = entries.filter(function(x){return x.substr(-1) != '/';}).sort(); + var dir = parseCT(getzipdata(zip, '[Content_Types].xml')); + var xlsb = false; + var sheets; + if(dir.workbooks.length === 0) { + var binname = "xl/workbook.bin"; + if(!getzipfile(zip,binname)) throw new Error("Could not find workbook entry"); + dir.workbooks.push(binname); + xlsb = true; + } + + if(!opts.bookSheets && !opts.bookProps) { + strs = {}; + if(dir.sst) strs=parse_sst(getzipdata(zip, dir.sst.replace(/^\//,'')), dir.sst, opts); + + styles = {}; + if(dir.style) styles = parse_sty(getzipdata(zip, dir.style.replace(/^\//,'')),dir.style); + } + + var wb = parse_wb(getzipdata(zip, dir.workbooks[0].replace(/^\//,'')), dir.workbooks[0], opts); + + var props = {}, propdata = ""; + try { + propdata = dir.coreprops.length !== 0 ? getzipdata(zip, dir.coreprops[0].replace(/^\//,'')) : ""; + propdata += dir.extprops.length !== 0 ? getzipdata(zip, dir.extprops[0].replace(/^\//,'')) : ""; + props = propdata !== "" ? parseProps(propdata) : {}; + } catch(e) { } + + var custprops = {}; + if(!opts.bookSheets || opts.bookProps) { + if (dir.custprops.length !== 0) { + propdata = getzipdata(zip, dir.custprops[0].replace(/^\//,''), true); + if(propdata) custprops = parseCustomProps(propdata); + } + } + + var out = {}; + if(opts.bookSheets || opts.bookProps) { + if(props.Worksheets && props.SheetNames.length > 0) sheets=props.SheetNames; + else if(wb.Sheets) sheets = wb.Sheets.map(function(x){ return x.name; }); + if(opts.bookProps) { out.Props = props; out.Custprops = custprops; } + if(typeof sheets !== 'undefined') out.SheetNames = sheets; + if(opts.bookSheets ? out.SheetNames : opts.bookProps) return out; + } + sheets = {}; + + var deps = {}; + if(opts.bookDeps && dir.calcchain) deps=parseDeps(getzipdata(zip, dir.calcchain.replace(/^\//,''))); + + var i=0; + var sheetRels = {}; + var path, relsPath; + if(!props.Worksheets) { + /* Google Docs doesn't generate the appropriate metadata, so we impute: */ + var wbsheets = wb.Sheets; + props.Worksheets = wbsheets.length; + props.SheetNames = []; + for(var j = 0; j != wbsheets.length; ++j) { + props.SheetNames[j] = wbsheets[j].name; + } + for(i = 0; i != props.Worksheets; ++i) { + try { + path = 'xl/worksheets/sheet' + (i+1) + (xlsb?'.bin':'.xml'); + relsPath = path.replace(/^(.*)(\/)([^\/]*)$/, "$1/_rels/$3.rels"); + sheets[props.SheetNames[i]]=parse_ws(getzipdata(zip, path),path,opts); + sheetRels[props.SheetNames[i]]=parseRels(getzipdata(zip, relsPath, true), path); + } catch(e) { if(opts.WTF) throw e; } + } + } else { + for(i = 0; i != props.Worksheets; ++i) { + try { + //var path = dir.sheets[i].replace(/^\//,''); + path = 'xl/worksheets/sheet' + (i+1) + (xlsb?'.bin':'.xml'); + relsPath = path.replace(/^(.*)(\/)([^\/]*)$/, "$1/_rels/$3.rels"); + sheets[props.SheetNames[i]]=parse_ws(getzipdata(zip, path),path,opts); + sheetRels[props.SheetNames[i]]=parseRels(getzipdata(zip, relsPath, true), path); + } catch(e) { if(opts.WTF) throw e; } + } + } + + if(dir.comments) parse_comments(zip, dir.comments, sheets, sheetRels, opts); + + out = { + Directory: dir, + Workbook: wb, + Props: props, + Custprops: custprops, + Deps: deps, + Sheets: sheets, + SheetNames: props.SheetNames, + Strings: strs, + Styles: styles, + }; + if(opts.bookFiles) { + out.keys = keys, + out.files = zip.files + } + return out; +} +function readSync(data, options) { + var zip, d = data; + var o = options||{}; + switch((o.type||"base64")){ + case "file": + if(typeof Buffer !== 'undefined') { zip=new jszip(d=_fs.readFileSync(data)); break; } + d = _fs.readFileSync(data).toString('base64'); + /* falls through */ + case "base64": zip = new jszip(d, { base64:true }); break; + case "binary": zip = new jszip(d, { base64:false }); break; + } + return parseZip(zip, o); +} + +function readFileSync(data, options) { + var o = options||{}; o.type = 'file'; + return readSync(data, o); +} + +XLSX.read = readSync; +XLSX.readFile = readFileSync; +XLSX.parseZip = parseZip; +return this; + +})(XLSX); + +var _chr = function(c) { return String.fromCharCode(c); }; + +function encode_col(col) { var s=""; for(++col; col; col=Math.floor((col-1)/26)) s = _chr(((col-1)%26) + 65) + s; return s; } +function encode_row(row) { return "" + (row + 1); } +function encode_cell(cell) { return encode_col(cell.c) + encode_row(cell.r); } + +function decode_col(c) { var d = 0, i = 0; for(; i !== c.length; ++i) d = 26*d + c.charCodeAt(i) - 64; return d - 1; } +function decode_row(rowstr) { return Number(rowstr) - 1; } +function split_cell(cstr) { return cstr.replace(/(\$?[A-Z]*)(\$?[0-9]*)/,"$1,$2").split(","); } +function decode_cell(cstr) { var splt = split_cell(cstr); return { c:decode_col(splt[0]), r:decode_row(splt[1]) }; } +function decode_range(range) { var x =range.split(":").map(decode_cell); return {s:x[0],e:x[x.length-1]}; } +function encode_range(range) { return encode_cell(range.s) + ":" + encode_cell(range.e); } + +function sheet_to_row_object_array(sheet, opts){ + var val, row, r, hdr = {}, isempty, R, C; + var out = []; + opts = opts || {}; + if(!sheet || !sheet["!ref"]) return out; + r = XLSX.utils.decode_range(sheet["!ref"]); + for(R=r.s.r, C = r.s.c; C <= r.e.c; ++C) { + val = sheet[encode_cell({c:C,r:R})]; + if(!val) continue; + if(val.w) hdr[C] = val.w; + else switch(val.t) { + case 's': case 'str': hdr[C] = val.v; break; + case 'n': hdr[C] = val.v; break; + } + } + + for (R = r.s.r + 1; R <= r.e.r; ++R) { + isempty = true; + /* row index available as __rowNum__ */ + row = Object.create({ __rowNum__ : R }); + for (C = r.s.c; C <= r.e.c; ++C) { + val = sheet[encode_cell({c: C,r: R})]; + if(!val || !val.t) continue; + if(typeof val.w !== 'undefined' && !opts.raw) { row[hdr[C]] = val.w; isempty = false; } + else switch(val.t){ + case 's': case 'str': case 'b': case 'n': + if(typeof val.v !== 'undefined') { + row[hdr[C]] = val.v; + isempty = false; + } + break; + case 'e': break; /* throw */ + default: throw 'unrecognized type ' + val.t; + } + } + if(!isempty) out.push(row); + } + return out; +} + +function sheet_to_csv(sheet, opts) { + var stringify = function stringify(val) { + if(!val.t) return ""; + if(typeof val.w !== 'undefined') return val.w; + switch(val.t){ + case 'n': return String(val.v); + case 's': case 'str': return typeof val.v !== 'undefined' ? val.v : ""; + case 'b': return val.v ? "TRUE" : "FALSE"; + case 'e': return val.v; /* throw out value in case of error */ + default: throw 'unrecognized type ' + val.t; + } + }; + var out = "", txt = ""; + opts = opts || {}; + if(!sheet || !sheet["!ref"]) return out; + var r = XLSX.utils.decode_range(sheet["!ref"]); + var fs = opts.FS||",", rs = opts.RS||"\n"; + + for(var R = r.s.r; R <= r.e.r; ++R) { + var row = []; + for(var C = r.s.c; C <= r.e.c; ++C) { + var val = sheet[XLSX.utils.encode_cell({c:C,r:R})]; + if(!val) { row.push(""); continue; } + txt = String(stringify(val)); + if(txt.indexOf(fs)!==-1 || txt.indexOf(rs)!==-1 || txt.indexOf('"')!==-1) + txt = "\"" + txt.replace(/"/g, '""') + "\""; + row.push(txt); + } + out += row.join(fs) + (rs); + } + return out; +} +var make_csv = sheet_to_csv; + +function get_formulae(ws) { + var cmds = []; + for(var y in ws) if(y[0] !=='!' && ws.hasOwnProperty(y)) { + var x = ws[y]; + var val = ""; + if(x.f) val = x.f; + else if(typeof x.w !== 'undefined') val = "'" + x.w; + else if(typeof x.v === 'undefined') continue; + else val = x.v; + cmds.push(y + "=" + val); + } + return cmds; +} + +XLSX.utils = { + encode_col: encode_col, + encode_row: encode_row, + encode_cell: encode_cell, + encode_range: encode_range, + decode_col: decode_col, + decode_row: decode_row, + split_cell: split_cell, + decode_cell: decode_cell, + decode_range: decode_range, + sheet_to_csv: sheet_to_csv, + make_csv: sheet_to_csv, + get_formulae: get_formulae, + sheet_to_row_object_array: sheet_to_row_object_array +}; + +if(typeof require !== 'undefined' && typeof exports !== 'undefined') { + exports.read = XLSX.read; + exports.readFile = XLSX.readFile; + exports.utils = XLSX.utils; + exports.version = XLSX.version; +} diff --git a/dist/xlsx.min.js b/dist/xlsx.min.js new file mode 100644 index 0000000..4b86208 --- /dev/null +++ b/dist/xlsx.min.js @@ -0,0 +1,5 @@ +/* xlsx.js (C) 2013-2014 SheetJS -- http://sheetjs.com */ +var SSF={};var make_ssf=function(SSF){var _strrev=function(x){return String(x).split("").reverse().join("")};function fill(c,l){return new Array(l+1).join(c)}function pad(v,d,c){var t=String(v);return t.length>=d?t:fill(c||0,d-t.length)+t}function rpad(v,d,c){var t=String(v);return t.length>=d?t:t+fill(c||0,d-t.length)}SSF.version="0.5.8";var opts_fmt={};function fixopts(o){for(var y in opts_fmt)if(o[y]===undefined)o[y]=opts_fmt[y]}SSF.opts=opts_fmt;opts_fmt.date1904=0;opts_fmt.output="";opts_fmt.mode="";var table_fmt={0:"General",1:"0",2:"0.00",3:"#,##0",4:"#,##0.00",9:"0%",10:"0.00%",11:"0.00E+00",12:"# ?/?",13:"# ??/??",14:"m/d/yy",15:"d-mmm-yy",16:"d-mmm",17:"mmm-yy",18:"h:mm AM/PM",19:"h:mm:ss AM/PM",20:"h:mm",21:"h:mm:ss",22:"m/d/yy h:mm",37:"#,##0 ;(#,##0)",38:"#,##0 ;[Red](#,##0)",39:"#,##0.00;(#,##0.00)",40:"#,##0.00;[Red](#,##0.00)",45:"mm:ss",46:"[h]:mm:ss",47:"mmss.0",48:"##0.0E+0",49:"@",56:'"上午/下午 "hh"時"mm"分"ss"秒 "',65535:"General"};var days=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]];var months=[["J","Jan","January"],["F","Feb","February"],["M","Mar","March"],["A","Apr","April"],["M","May","May"],["J","Jun","June"],["J","Jul","July"],["A","Aug","August"],["S","Sep","September"],["O","Oct","October"],["N","Nov","November"],["D","Dec","December"]];var frac=function frac(x,D,mixed){var sgn=x<0?-1:1;var B=x*sgn;var P_2=0,P_1=1,P=0;var Q_2=1,Q_1=0,Q=0;var A=Math.floor(B);while(Q_1D){Q=Q_1;P=P_1}if(Q>D){Q=Q_2;P=P_2}if(!mixed)return[0,sgn*P,Q];if(Q===0)throw"Unexpected state: "+P+" "+P_1+" "+P_2+" "+Q+" "+Q_1+" "+Q_2;var q=Math.floor(sgn*P/Q);return[q,sgn*P-q*Q,Q]};var general_fmt=function(v){if(typeof v==="boolean")return v?"TRUE":"FALSE";if(typeof v==="number"){var o,V=v<0?-v:v;if(V>=.1&&V<1)o=v.toPrecision(9);else if(V>=.01&&V<.1)o=v.toPrecision(8);else if(V>=.001&&V<.01)o=v.toPrecision(7);else if(V>=1e-4&&V<.001)o=v.toPrecision(6);else if(V>=Math.pow(10,10)&&VMath.pow(10,-9)&&V11+(v<0?1:0))o=v.toPrecision(10);if(o.length>11+(v<0?1:0))o=v.toExponential(5)}else{o=v.toFixed(11).replace(/(\.[0-9]*[1-9])0*$/,"$1");if(o.length>11+(v<0?1:0))o=v.toPrecision(6)}o=o.replace(/(\.[0-9]*[1-9])0+e/,"$1e").replace(/\.0*e/,"e");return o.replace("e","E").replace(/\.0*$/,"").replace(/\.([0-9]*[^0])0*$/,".$1").replace(/(E[+-])([0-9])$/,"$1"+"0"+"$2")}if(typeof v==="string")return v;throw new Error("unsupported value in General format: "+v)};SSF._general=general_fmt;var parse_date_code=function parse_date_code(v,opts){var date=Math.floor(v),time=Math.floor(86400*(v-date)+1e-6),dow=0;var dout=[],out={D:date,T:time,u:86400*(v-date)-time};fixopts(opts=opts||{});if(opts.date1904)date+=1462;if(date>2958465)return null;if(date===60){dout=[1900,2,29];dow=3}else if(date===0){dout=[1900,1,0];dow=6}else{if(date>60)--date;var d=new Date(1900,0,1);d.setDate(d.getDate()+date-1);dout=[d.getFullYear(),d.getMonth()+1,d.getDate()];dow=d.getDay();if(date<60)dow=(dow+6)%7}out.y=dout[0];out.m=dout[1];out.d=dout[2];out.S=time%60;time=Math.floor(time/60);out.M=time%60;time=Math.floor(time/60);out.H=time;out.q=dow;return out};SSF.parse_date_code=parse_date_code;var write_date=function(type,fmt,val){if(val<0)return"";var o;switch(type){case"y":switch(fmt){case"y":case"yy":return pad(val.y%100,2);default:return pad(val.y%1e4,4)}case"m":switch(fmt){case"m":return val.m;case"mm":return pad(val.m,2);case"mmm":return months[val.m-1][1];case"mmmmm":return months[val.m-1][0];default:return months[val.m-1][2]}case"d":switch(fmt){case"d":return val.d;case"dd":return pad(val.d,2);case"ddd":return days[val.q][0];default:return days[val.q][1]}case"h":switch(fmt){case"h":return 1+(val.H+11)%12;case"hh":return pad(1+(val.H+11)%12,2);default:throw"bad hour format: "+fmt}case"H":switch(fmt){case"h":return val.H;case"hh":return pad(val.H,2);default:throw"bad hour format: "+fmt}case"M":switch(fmt){case"m":return val.M;case"mm":return pad(val.M,2);default:throw"bad minute format: "+fmt}case"s":switch(fmt){case"s":return Math.round(val.S+val.u);case"ss":return pad(Math.round(val.S+val.u),2);case"ss.0":o=pad(Math.round(10*(val.S+val.u)),3);return o.substr(0,2)+"."+o.substr(2);case"ss.00":o=pad(Math.round(100*(val.S+val.u)),4);return o.substr(0,2)+"."+o.substr(2);case"ss.000":o=pad(Math.round(1e3*(val.S+val.u)),5);return o.substr(0,2)+"."+o.substr(2);default:throw"bad second format: "+fmt}case"Z":switch(fmt){case"[h]":case"[hh]":o=val.D*24+val.H;break;case"[m]":case"[mm]":o=(val.D*24+val.H)*60+val.M;break;case"[s]":case"[ss]":o=((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u);break;default:throw"bad abstime format: "+fmt}return fmt.length===3?o:pad(o,2);case"e":{return val.y}break}};var commaify=function(s){return _strrev(_strrev(s).replace(/.../g,"$&,")).replace(/^,/,"")};var write_num=function(type,fmt,val){if(type==="("){var ffmt=fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");if(val>=0)return write_num("n",ffmt,val);return"("+write_num("n",ffmt,-val)+")"}var mul=0,o;fmt=fmt.replace(/%/g,function(x){mul++;return""});if(mul!==0)return write_num(type,fmt,val*Math.pow(10,2*mul))+fill("%",mul);if(fmt.indexOf("E")>-1){var idx=fmt.indexOf("E")-fmt.indexOf(".")-1;if(fmt.match(/^#+0.0E\+0$/)){var period=fmt.indexOf(".");if(period===-1)period=fmt.indexOf("E");var ee=Number(val.toExponential(0).substr(2+(val<0)))%period;if(ee<0)ee+=period;o=(val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);if(!o.match(/[Ee]/)){var fakee=Number(val.toExponential(0).substr(2+(val<0)));if(o.indexOf(".")===-1)o=o[0]+"."+o.substr(1)+"E+"+(fakee-o.length+ee);else o+="E+"+(fakee-ee);while(o.substr(0,2)==="0."){o=o[0]+o.substr(2,period)+"."+o.substr(2+period);o=o.replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.")}o=o.replace(/\+-/,"-")}o=o.replace(/^([+-]?)([0-9]*)\.([0-9]*)[Ee]/,function($$,$1,$2,$3){return $1+$2+$3.substr(0,(period+ee)%period)+"."+$3.substr(ee)+"E"})}else o=val.toExponential(idx);if(fmt.match(/E\+00$/)&&o.match(/e[+-][0-9]$/))o=o.substr(0,o.length-1)+"0"+o[o.length-1];if(fmt.match(/E\-/)&&o.match(/e\+/))o=o.replace(/e\+/,"e");return o.replace("e","E")}if(fmt[0]==="$")return"$"+write_num(type,fmt.substr(fmt[1]==" "?2:1),val);var r,rr,ff,aval=val<0?-val:val,sign=val<0?"-":"";if(r=fmt.match(/# (\?+)([ ]?)\/([ ]?)(\d+)/)){var den=Number(r[4]),rnd=Math.round(aval*den),base=Math.floor(rnd/den);var myn=rnd-base*den,myd=den;return sign+(base?base:"")+" "+(myn===0?fill(" ",r[1].length+1+r[4].length):pad(myn,r[1].length," ")+r[2]+"/"+r[3]+pad(myd,r[4].length))}if(fmt.match(/^#+0+$/))fmt=fmt.replace(/#/g,"");if(fmt.match(/^00+$/))return(val<0?"-":"")+pad(Math.round(aval),fmt.length);if(fmt.match(/^[#?]+$/))return String(Math.round(val)).replace(/^0$/,"");if(r=fmt.match(/^#*0+\.(0+)/)){o=Math.round(val*Math.pow(10,r[1].length));return String(o/Math.pow(10,r[1].length)).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.([0-9]*)$/,function($$,$1){return"."+$1+fill("0",r[1].length-$1.length)})}if(r=fmt.match(/^(0*)\.(#*)$/)){o=Math.round(val*Math.pow(10,r[2].length));return String(o*Math.pow(10,-r[2].length)).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^([-]?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".")}if(r=fmt.match(/^#,##0([.]?)$/))return sign+commaify(String(Math.round(aval)));if(r=fmt.match(/^#,##0\.([#0]*0)$/)){rr=Math.round((val-Math.floor(val))*Math.pow(10,r[1].length));return val<0?"-"+write_num(type,fmt,-val):commaify(String(Math.floor(val)))+"."+pad(rr,r[1].length,0)}if(r=fmt.match(/^# ([?]+)([ ]?)\/([ ]?)([?]+)/)){rr=Math.min(Math.max(r[1].length,r[4].length),7);ff=frac(aval,Math.pow(10,rr)-1,true);return sign+(ff[0]||(ff[1]?"":"0"))+" "+(ff[1]?pad(ff[1],rr," ")+r[2]+"/"+r[3]+rpad(ff[2],rr," "):fill(" ",2*rr+1+r[2].length+r[3].length))}switch(fmt){case"0":case"#0":return Math.round(val);case"#.##":o=Math.round(val*100);return String(o/100).replace(/^([^\.]+)$/,"$1.").replace(/^0\.$/,".");case"#,###":var x=commaify(String(Math.round(aval)));return x!=="0"?sign+x:"";default:}throw new Error("unsupported format |"+fmt+"|")};function split_fmt(fmt){var out=[];var in_str=-1;for(var i=0,j=0;i=12?"P":"A";q.t="T";hr="h";i+=3}else if(fmt.substr(i,5)==="AM/PM"){q.v=dt.H>=12?"PM":"AM";q.t="T";i+=5;hr="h"}else{q.t="t";i++}out.push(q);lst=c;break;case"[":o=c;while(fmt[i++]!=="]"&&i-1)o+=c;out.push({t:"n",v:o});break;case"?":o=fmt[i];while(fmt[++i]===c)o+=c;q={t:c,v:o};out.push(q);lst=c;break;case"*":++i;if(fmt[i]==" ")++i;break;case"(":case")":out.push({t:flen===1?"t":c,v:c});++i;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":o=fmt[i];while("0123456789".indexOf(fmt[++i])>-1)o+=fmt[i];out.push({t:"D",v:o});break;case" ":out.push({t:c,v:c});++i;break;default:if(",$-+/():!^&'~{}<>=€".indexOf(c)===-1)throw"unrecognized character "+fmt[i]+" in "+fmt;out.push({t:"t",v:c});++i;break}}for(i=out.length-1,lst="t";i>=0;--i){switch(out[i].t){case"h":case"H":out[i].t=hr;lst="h";break;case"d":case"y":case"s":case"M":case"e":lst=out[i].t;break;case"m":if(lst==="s")out[i].t="M";break}}for(i=0;i-1||" t".indexOf(out[jj].t)>-1&&"?t".indexOf((out[jj+1]||{}).t)>-1&&(out[jj+1].t=="?"||out[jj+1].v=="/")||out[i].t=="("&&(out[jj].t==")"||out[jj].t=="n")||out[jj].t=="t"&&(out[jj].v=="/"||"$€".indexOf(out[jj].v)>-1||out[jj].v==" "&&(out[jj+1]||{}).t=="?"))){out[i].v+=out[jj].v;delete out[jj];++jj}out[i].v=write_num(out[i].t,out[i].v,flen>1&&v<0&&i>0&&out[i-1].v=="-"?-v:v);out[i].t="t";i=jj-1;break;case"G":out[i].t="t";out[i].v=general_fmt(v,opts);break}}return out.map(function(x){return x.v}).join("")}SSF._eval=eval_fmt;function choose_fmt(fmt,v,o){if(typeof fmt==="number")fmt=(o&&o.table?o.table:table_fmt)[fmt];if(typeof fmt==="string")fmt=split_fmt(fmt);var l=fmt.length;if(l<4&&fmt[l-1].indexOf("@")>-1)--l;switch(fmt.length){case 1:fmt=fmt[0].indexOf("@")>-1?["General","General","General",fmt[0]]:[fmt[0],fmt[0],fmt[0],"@"];break;case 2:fmt=fmt[1].indexOf("@")>-1?[fmt[0],fmt[0],fmt[0],fmt[1]]:[fmt[0],fmt[1],fmt[0],"@"];break;case 3:fmt=fmt[2].indexOf("@")>-1?[fmt[0],fmt[1],fmt[0],fmt[2]]:[fmt[0],fmt[1],fmt[2],"@"];break;case 4:break;default:throw"cannot find right format for |"+fmt+"|"}if(typeof v!=="number")return[fmt.length,fmt[3]];return[l,v>0?fmt[0]:v<0?fmt[1]:fmt[2]]}var format=function format(fmt,v,o){fixopts(o=o||{});if(typeof fmt==="string"&&fmt.toLowerCase()==="general")return general_fmt(v,o);if(typeof fmt==="number")fmt=(o.table||table_fmt)[fmt];var f=choose_fmt(fmt,v,o);if(f[1].toLowerCase()==="general")return general_fmt(v,o);if(v===true)v="TRUE";if(v===false)v="FALSE";if(v===""||typeof v==="undefined")return"";return eval_fmt(f[1],v,o,f[0])};SSF._choose=choose_fmt;SSF._table=table_fmt;SSF.load=function(fmt,idx){table_fmt[idx]=fmt};SSF.format=format;SSF.get_table=function(){return table_fmt};SSF.load_table=function(tbl){for(var i=0;i!=392;++i)if(tbl[i])SSF.load(tbl[i],i)}};make_ssf(SSF);var XLSX={};(function(XLSX){XLSX.version="0.5.8";var current_codepage,current_cptable,cptable;if(typeof module!=="undefined"&&typeof require!=="undefined"){if(typeof cptable==="undefined")cptable=require("codepage");current_codepage=1252;current_cptable=cptable[1252]}function reset_cp(){current_codepage=1252;if(typeof cptable!=="undefined")current_cptable=cptable[1252]}function _getchar(x){return String.fromCharCode(x)}function getdata(data){if(!data)return null;if(data.data)return data.name.substr(-4)!==".bin"?data.data:data.data.split("").map(function(x){return x.charCodeAt(0)});if(data.asNodeBuffer&&typeof Buffer!=="undefined"&&data.name.substr(-4)===".bin")return data.asNodeBuffer();if(data.asBinary&&data.name.substr(-4)!==".bin")return data.asBinary();if(data._data&&data._data.getContent){if(data.name.substr(-4)===".bin")return Array.prototype.slice.call(data._data.getContent());return Array.prototype.slice.call(data._data.getContent(),0).map(function(x){return String.fromCharCode(x)}).join("")}return null}function getzipfile(zip,file){var f=file;if(zip.files[f])return zip.files[f];f=file.toLowerCase();if(zip.files[f])return zip.files[f];f=f.replace(/\//g,"\\");if(zip.files[f])return zip.files[f];throw new Error("Cannot find file "+file+" in zip")}function getzipdata(zip,file,safe){if(!safe)return getdata(getzipfile(zip,file));if(!file)return null;try{return getzipdata(zip,file)}catch(e){return null}}var _fs,jszip;if(typeof JSZip!=="undefined")jszip=JSZip;if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports){if(typeof Buffer!=="undefined"&&typeof jszip==="undefined")jszip=require("jszip");if(typeof jszip==="undefined")jszip=require("./jszip").JSZip;_fs=require("fs")}}var attregexg=/(\w+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;var attregex=/(\w+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;function parsexmltag(tag){var words=tag.split(/\s+/);var z={0:words[0]};if(words.length===1)return z;(tag.match(attregexg)||[]).map(function(x){var y=x.match(attregex);z[y[1]]=y[2].substr(1,y[2].length-2)});return z}function evert(obj){var o={};Object.keys(obj).forEach(function(k){if(obj.hasOwnProperty(k))o[obj[k]]=k});return o}var encodings={""":'"',"'":"'",">":">","<":"<","&":"&"};var rencoding=evert(encodings);var rencstr="&<>'\"".split("");function unescapexml(text){var s=text+"";for(var y in encodings)s=s.replace(new RegExp(y,"g"),encodings[y]);return s.replace(/_x([0-9a-fA-F]*)_/g,function(m,c){return _chr(parseInt(c,16))})}function escapexml(text){var s=text+"";rencstr.forEach(function(y){s=s.replace(new RegExp(y,"g"),rencoding[y])});return s}function parsexmlbool(value,tag){switch(value){case"0":case 0:case"false":case"FALSE":return false;case"1":case 1:case"true":case"TRUE":return true;default:throw"bad boolean value "+value+" in "+(tag||"?")}}var utf8read=function(orig){var out="",i=0,c=0,c1=0,c2=0,c3=0;while(i191&&c<224)out+=_chr((c&31)<<6|c2&63);else{c3=orig.charCodeAt(i++);out+=_chr((c&15)<<12|(c2&63)<<6|c3&63)}}}return out};function matchtag(f,g){return new RegExp("<"+f+'(?: xml:space="preserve")?>([^☃]*)",(g||"")+"m")}function parseVector(data){var h=parsexmltag(data);var matches=data.match(new RegExp("(.*?)","g"))||[];if(matches.length!=h.size)throw"unexpected vector length "+matches.length+" != "+h.size;var res=[];matches.forEach(function(x){var v=x.replace(/<[/]?vt:variant>/g,"").match(/]*)>(.*)>1;var bits=-7,d=isLE?-1:1,i=isLE?nl-1:0,s=buf[idx+i];i+=d;e=s&(1<<-bits)-1;s>>>=-bits;bits+=el;for(;bits>0;e=e*256+buf[idx+i],i+=d,bits-=8);m=e&(1<<-bits)-1;e>>>=-bits;bits+=ml;for(;bits>0;m=m*256+buf[idx+i],i+=d,bits-=8);if(e===eMax)return m?NaN:(s?-1:1)*Infinity;else if(e===0)e=1-eBias;else{m=m+Math.pow(2,ml);e=e-eBias}return(s?-1:1)*m*Math.pow(2,e-ml)}var __toBuffer;if(typeof Buffer!=="undefined"){Buffer.prototype.hexlify=function(){return this.toString("hex")};__toBuffer=function(bufs){return Buffer.concat(bufs[0])}}else{__toBuffer=function(bufs){var x=[];for(var i=0;i!=bufs[0].length;++i){x=x.concat(bufs[0][i])}return x}}var __readUInt8=function(b,idx){return b.readUInt8?b.readUInt8(idx):b[idx]};var __readUInt16LE=function(b,idx){return b.readUInt16LE?b.readUInt16LE(idx):b[idx+1]*(1<<8)+b[idx]};var __readInt16LE=function(b,idx){var u=__readUInt16LE(b,idx);if(!(u&32768))return u;return(65535-u+1)*-1};var __readUInt32LE=function(b,idx){return b.readUInt32LE?b.readUInt32LE(idx):b[idx+3]*(1<<24)+b[idx+2]*(1<<16)+b[idx+1]*(1<<8)+b[idx]};var __readInt32LE=function(b,idx){if(b.readInt32LE)return b.readInt32LE(idx);var u=__readUInt32LE(b,idx);if(!(u&2147483648))return u;return(4294967295-u+1)*-1};var __readDoubleLE=function(b,idx){return b.readDoubleLE?b.readDoubleLE(idx):readIEEE754(b,idx||0)};function ReadShift(size,t){var o,w,vv,i,loc;t=t||"u";if(size==="ieee754"){size=8;t="f"}switch(size){case 1:o=__readUInt8(this,this.l);break;case 2:o=(t==="u"?__readUInt16LE:__readInt16LE)(this,this.l);break;case 4:o=__readUInt32LE(this,this.l);break;case 8:if(t==="f"){o=__readDoubleLE(this,this.l);break}case 16:o=this.toString("hex",this.l,this.l+size);break;case"dbcs":size=2*t;o="";loc=this.l;for(i=0;i!=t;++i){o+=_getchar(__readUInt16LE(this,loc));loc+=2}break;case"sbcs":size=t;o="";loc=this.l;for(i=0;i!=t;++i){o+=_getchar(__readUInt8(this,loc));loc+=1}break}this.l+=size;return o}function prep_blob(blob,pos){blob.read_shift=ReadShift.bind(blob);blob.l=pos||0;var read=ReadShift.bind(blob);return[read]}function parsenoop(blob,length){blob.l+=length}var recordhopper=function(data,cb,opts){var tmpbyte,cntbyte,length;prep_blob(data,data.l||0);while(data.l"+escapexml(str)+"",h:str};if(fRichStr){var dwSizeStrRun=data.read_shift(4);for(var i=0;i!=dwSizeStrRun;++i)rgsStrRun.push(parse_StrRun(data))}if(fExtStr){}data.l=start+length;return z};function parse_Cell(data){var col=data.read_shift(4);var iStyleRef=data.read_shift(2);iStyleRef+=data.read_shift(1)<<16;var fPhShow=data.read_shift(1);return{c:col,iStyleRef:iStyleRef}}var parse_CodeName=function(data,length){return parse_XLWideString(data,length)};var parse_RelID=function(data,length){return parse_XLNullableWideString(data,length)};function parse_RkNumber(data){var b=data.slice(data.l,data.l+4);var fX100=b[0]&1,fInt=b[0]&2;data.l+=4;b[0]&=~3;var RK=fInt===0?__readDoubleLE([0,0,0,0,b[0],b[1],b[2],b[3]],0):__readInt32LE(b,0)>>2;return fX100?RK/100:RK}var parse_UncheckedRfX=function(data){var cell={s:{},e:{}};cell.s.r=data.read_shift(4);cell.e.r=data.read_shift(4);cell.s.c=data.read_shift(4);cell.e.c=data.read_shift(4);return cell};var parse_XLNullableWideString=function(data){var cchCharacters=data.read_shift(4);return cchCharacters===0||cchCharacters===4294967295?"":data.read_shift("dbcs",cchCharacters)};var parse_XLWideString=function(data){var cchCharacters=data.read_shift(4);return cchCharacters===0?"":data.read_shift("dbcs",cchCharacters)};function parse_Xnum(data,length){return data.read_shift("ieee754")}var BErr={0:"#NULL!",7:"#DIV/0!",15:"#VALUE!",23:"#REF!",29:"#NAME?",36:"#NUM!",42:"#N/A",43:"#GETTING_DATA",255:"#WTF?"};var RBErr=evert(BErr);var parse_rs=function(){var tregex=matchtag("t"),rpregex=matchtag("rPr");var parse_rpr=function(rpr,intro,outro){var font={};(rpr.match(/<[^>]*>/g)||[]).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"":break;case"":break;case"":font.strike=1;break;case"":break;case"":font.u=1;break;case"":break;case"":font.b=1;break;case"":break;case"":font.i=1;break;case"":break;case"');outro.push("")};function parse_r(r){var terms=[[],"",[]];var t=r.match(tregex);if(!isval(t))return"";terms[1]=t[1];var rpr=r.match(rpregex);if(isval(rpr))parse_rpr(rpr[1],terms[0],terms[2]);return terms[0].join("")+terms[1].replace(/\r\n/g,"
")+terms[2].join("")}return function(rs){return rs.replace(//g,"").split(/<\/r>/).map(parse_r).join("")}}();var parse_si=function(x,opts){var html=opts?opts.cellHTML:true;var z={};if(!x)return null;var y;if(x[1]==="t"){z.t=utf8read(unescapexml(x.substr(x.indexOf(">")+1).split(/<\/t>/)[0]));z.r=x;if(html)z.h=z.t}else if(y=x.match(//)){z.r=x;z.t=utf8read(unescapexml(x.replace(/<[^>]*>/gm,"")));if(html)z.h=parse_rs(x)}return z};var parse_sst_xml=function(data,opts){var s=[];var sst=data.match(new RegExp("]*)>([\\s\\S]*)","m"));if(isval(sst)){s=sst[2].replace(/<(?:si|sstItem)>/g,"").split(/<\/(?:si|sstItem)>/).map(function(x){return parse_si(x,opts)}).filter(function(x){return x});sst=parsexmltag(sst[1]);s.Count=sst.count;s.Unique=sst.uniqueCount}return s};var parse_BrtBeginSst=function(data,length){return[data.read_shift(4),data.read_shift(4)]};var parse_sst_bin=function(data){var s=[];recordhopper(data,function(val,R){switch(R.n){case"BrtBeginSst":s.Count=val[0];s.Unique=val[1];break;case"BrtSSTItem":s.push(val);break;case"BrtEndSst":return true;default:throw new Error("Unexpected record "+R.n)}});return s};var styles={};function parseNumFmts(t){styles.NumberFmt=[];for(var y in SSF._table)styles.NumberFmt[y]=SSF._table[y];t[0].match(/<[^>]*>/g).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"":case"":break;case"]*>/g).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"":case"":break;case"":break;case"":case"":break;case"":break;case"]*)>.*<\/numFmts>/))parseNumFmts(t);if(t=data.match(/]*)>.*<\/cellXfs>/))parseCXfs(t);return styles}function parse_BrtFmt(data,length){var ifmt=data.read_shift(2);var stFmtCode=parse_XLWideString(data,length-2);return[ifmt,stFmtCode]}function parse_BrtXF(data,length){var ixfeParent=data.read_shift(2);var ifmt=data.read_shift(2);parsenoop(data,length-4);return{ixfe:ixfeParent,ifmt:ifmt}}function parse_sty_bin(data){styles.NumberFmt=[];for(var y in SSF._table)styles.NumberFmt[y]=SSF._table[y];styles.CellXf=[];var state="";var pass=false;recordhopper(data,function(val,R,RT){switch(R.n){case"BrtFmt":styles.NumberFmt[val[0]]=val[1];SSF.load(val[1],val[0]);break;case"BrtFont":break;case"BrtKnownFonts":break;case"BrtFill":break;case"BrtBorder":break;case"BrtXF":if(state==="CELLXFS"){styles.CellXf.push(val)}break;case"BrtStyle":break;case"BrtRowHdr":break;case"BrtCellMeta":break;case"BrtDXF":break;case"BrtMRUColor":break;case"BrtIndexedColor":break;case"BrtBeginStyleSheet":break;case"BrtEndStyleSheet":break;case"BrtBeginTableStyle":break;case"BrtTableStyleElement":break;case"BrtEndTableStyle":break;case"BrtBeginFmts":state="FMTS";break;case"BrtEndFmts":state="";break;case"BrtBeginFonts":state="FONTS";break;case"BrtEndFonts":state="";break;case"BrtACBegin":state="ACFONTS";break;case"BrtACEnd":state="";break;case"BrtBeginFills":state="FILLS";break;case"BrtEndFills":state="";break;case"BrtBeginBorders":state="BORDERS";break;case"BrtEndBorders":state="";break;case"BrtBeginCellStyleXFs":state="CELLSTYLEXFS";break;case"BrtEndCellStyleXFs":state="";break;case"BrtBeginCellXFs":state="CELLXFS";break;case"BrtEndCellXFs":state="";break;case"BrtBeginStyles":state="STYLES";break;case"BrtEndStyles":state="";break;case"BrtBeginDXFs":state="DXFS";break;case"BrtEndDXFs":state="";break;case"BrtBeginTableStyles":state="TABLESTYLES";break;case"BrtEndTableStyles":state="";break;case"BrtBeginColorPalette":state="COLORPALETTE";break;case"BrtBeginIndexedColors":state="INDEXEDCOLORS";break;case"BrtEndIndexedColors":state="";break;case"BrtBeginMRUColors":state="MRUCOLORS";break;case"BrtEndMRUColors":state="";break;case"BrtEndColorPalette":state="";break;case"BrtFRTBegin":pass=true;break;case"BrtFRTEnd":pass=false;break}});return styles}var ct2type={"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":"workbooks","application/vnd.ms-excel.sheet.macroEnabled.main+xml":"workbooks","application/vnd.ms-excel.sheet.binary.macroEnabled.main":"workbooks","application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":"sheets","application/vnd.ms-excel.worksheet":"sheets","application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":"styles","application/vnd.ms-excel.styles":"styles","application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml":"strs","application/vnd.ms-excel.sharedStrings":"strs","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml":"calcchains","application/vnd.openxmlformats-package.core-properties+xml":"coreprops","application/vnd.openxmlformats-officedocument.extended-properties+xml":"extprops","application/vnd.openxmlformats-officedocument.custom-properties+xml":"custprops","application/vnd.openxmlformats-officedocument.theme+xml":"themes","application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":"comments",foo:"bar"};var XMLNS_CT="http://schemas.openxmlformats.org/package/2006/content-types";function parseProps(data){var p={Company:""},q={};var strings=["Application","DocSecurity","Company","AppVersion"];var bools=["HyperlinksChanged","SharedDoc","LinksUpToDate","ScaleCrop"];var xtra=["HeadingPairs","TitlesOfParts"];var xtracp=["category","contentStatus","lastModifiedBy","lastPrinted","revision","version"];var xtradc=["creator","description","identifier","language","subject","title"];var xtradcterms=["created","modified"];xtra=xtra.concat(xtracp.map(function(x){return"cp:"+x}));xtra=xtra.concat(xtradc.map(function(x){return"dc:"+x}));xtra=xtra.concat(xtradcterms.map(function(x){return"dcterms:"+x}));strings.forEach(function(f){p[f]=(data.match(matchtag(f))||[])[1]});bools.forEach(function(f){p[f]=(data.match(matchtag(f))||[])[1]=="true"});xtra.forEach(function(f){var cur=data.match(new RegExp("<"+f+"[^>]*>(.*)"));if(cur&&cur.length>0)q[f]=cur[1]});if(q.HeadingPairs&&q.TitlesOfParts){var v=parseVector(q.HeadingPairs);var j=0,widx=0;for(var i=0;i!==v.length;++i){switch(v[i].v){case"Worksheets":widx=j;p.Worksheets=+v[++i].v;break;case"Named Ranges":++i;break}}var parts=parseVector(q.TitlesOfParts).map(function(x){return utf8read(x.v)});p.SheetNames=parts.slice(widx,widx+p.Worksheets)}p.Creator=q["dc:creator"];p.LastModifiedBy=q["cp:lastModifiedBy"];p.CreatedDate=new Date(q["dcterms:created"]);p.ModifiedDate=new Date(q["dcterms:modified"]);return p}function parseCustomProps(data){var p={},name;data.match(/<[^>]+>([^<]*)/g).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"":name=null;break;default:if(x.indexOf("");var type=toks[0].substring(4),text=toks[1];switch(type){case"lpstr":case"lpwstr":case"bstr":case"lpwstr":p[name]=unescapexml(text);break;case"bool":p[name]=parsexmlbool(text,"");break;case"i1":case"i2":case"i4":case"i8":case"int":case"uint":p[name]=parseInt(text,10);break;case"r4":case"r8":case"decimal":p[name]=parseFloat(text);break;case"filetime":case"date":p[name]=text;break;case"cy":case"error":p[name]=unescapexml(text);break;default:console.warn("Unexpected",x,type,toks)}}}});return p}function parseDeps(data){var d=[];var l=0,i=1;(data.match(/<[^>]*>/g)||[]).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"":case"":break;case"]*>/g)||[]).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"0?ct.calcchains[0]:"";ct.sst=ct.strs.length>0?ct.strs[0]:"";ct.style=ct.styles.length>0?ct.styles[0]:"";delete ct.calcchains;return ct}function parseRels(data,currentFilePath){if(!data)return data;if(currentFilePath.charAt(0)!=="/"){currentFilePath="/"+currentFilePath}var rels={};var resolveRelativePathIntoAbsolute=function(to){var toksFrom=currentFilePath.split("/");toksFrom.pop();var toksTo=to.split("/");var reversed=[];while(toksTo.length!==0){var tokTo=toksTo.shift();if(tokTo===".."){toksFrom.pop()}else if(tokTo!=="."){toksFrom.push(tokTo)}}return toksFrom.join("/")};data.match(/<[^>]*>/g).forEach(function(x){var y=parsexmltag(x);if(y[0]==="/))return[]; +var authors=[];var commentList=[];data.match(/([^\u2603]*)<\/authors>/m)[1].split("").forEach(function(x){if(x===""||x.trim()==="")return;authors.push(x.match(/]*>(.*)/)[1])});data.match(/([^\u2603]*)<\/commentList>/m)[1].split("").forEach(function(x,index){if(x===""||x.trim()==="")return;var y=parsexmltag(x.match(/]*>/)[0]);var comment={author:y.authorId&&authors[y.authorId]?authors[y.authorId]:undefined,ref:y.ref,guid:y.guid};var textMatch=x.match(/([^\u2603]*)<\/text>/m);if(!textMatch||!textMatch[1])return;var rt=parse_si(textMatch[1]);comment.r=rt.r;comment.t=rt.t;if(opts.cellHTML)comment.h=rt.h;commentList.push(comment)});return commentList}function parse_comments(zip,dirComments,sheets,sheetRels,opts){for(var i=0;i!=dirComments.length;++i){var canonicalpath=dirComments[i];var comments=parse_comments_xml(getzipdata(zip,canonicalpath.replace(/^\//,""),true),opts);if(!comments||!comments.length)return;var sheetNames=Object.keys(sheets);for(var j=0;j!=sheetNames.length;++j){var sheetName=sheetNames[j];var rels=sheetRels[sheetName];if(rels){var rel=rels[canonicalpath];if(rel)insertCommentsIntoSheet(sheetName,sheets[sheetName],comments)}}}}function insertCommentsIntoSheet(sheetName,sheet,comments){comments.forEach(function(comment){var cell=sheet[comment.ref];if(!cell){cell={};sheet[comment.ref]=cell;var range=decode_range(sheet["!ref"]);var thisCell=decode_cell(comment.ref);if(range.s.r>thisCell.r)range.s.r=thisCell.r;if(range.e.rthisCell.c)range.s.c=thisCell.c;if(range.e.c/);if(ref&&ref.length==2&&ref[1].indexOf(":")!==-1)s["!ref"]=ref[1];var refguess={s:{r:1e6,c:1e6},e:{r:0,c:0}};var q=["v","f"];var sidx=0;if(!data.match(//))data.match(/([^\u2603]*)<\/sheetData>/m)[1].split("").forEach(function(x){if(x===""||x.trim()==="")return;var row=parsexmltag(x.match(/]*>/)[0]);if(refguess.s.r>row.r-1)refguess.s.r=row.r-1;if(refguess.e.r")+1).split(/]*>/)||[c])[0]);delete cell[0];var d=c.substr(c.indexOf(">")+1);var p={};q.forEach(function(f){var x=d.match(matchtag(f));if(x)p[f]=unescapexml(x[1])});if(cell.t===undefined&&p.v===undefined){if(!opts.sheetStubs)return;p.t="str";p.v=undefined}else p.t=cell.t?cell.t:"n";if(refguess.s.c>idx)refguess.s.c=idx;if(refguess.e.c(.*)<\/is>/);is=is?parse_si(is[1]):{t:"",r:""};p.t="str";p.v=is.t;break;case"b":if(typeof p.v!=="boolean")p.v=parsexmlbool(p.v);break;case"d":var epoch=Date.parse(p.v);p.v=(epoch-new Date(Date.UTC(1899,11,30)))/(24*60*60*1e3);p.t="n";break;case"e":p.raw=RBErr[p.v];break}var fmtid=0;if(cell.s&&styles.CellXf){var cf=styles.CellXf[cell.s];if(cf&&cf.numFmtId)fmtid=cf.numFmtId}try{p.w=SSF.format(fmtid,p.v,_ssfopts);if(opts.cellNF)p.z=SSF._table[fmtid]}catch(e){if(opts.WTF)throw e}s[cell.r]=p})});if(!s["!ref"])s["!ref"]=encode_range(refguess);return s}var parse_BrtRowHdr=function(data,length){var z={};z.r=data.read_shift(4);data.l+=length-4;return z};var parse_BrtWsDim=parse_UncheckedRfX;var parse_BrtWsProp=function(data,length){var z={};data.l+=19;z.name=parse_CodeName(data,length-19);return z};var parse_BrtCellBlank=parsenoop;var parse_BrtCellBool=function(data,length){var cell=parse_Cell(data);var fBool=data.read_shift(1);return[cell,fBool,"b"]};var parse_BrtCellError=function(data,length){var cell=parse_Cell(data);var fBool=data.read_shift(1);return[cell,fBool,"e"]};var parse_BrtCellIsst=function(data,length){var cell=parse_Cell(data);var isst=data.read_shift(4);return[cell,isst,"s"]};var parse_BrtCellReal=function(data,length){var cell=parse_Cell(data);var value=parse_Xnum(data);return[cell,value,"n"]};var parse_BrtCellRk=function(data,length){var cell=parse_Cell(data);var value=parse_RkNumber(data);return[cell,value,"n"]};var parse_BrtCellSt=function(data,length){var cell=parse_Cell(data);var value=parse_XLWideString(data);return[cell,value,"str"]};var parse_BrtFmlaBool=function(data,length,opts){var cell=parse_Cell(data);var value=data.read_shift(1);var o=[cell,value,"b"];if(opts.cellFormula){var formula=parse_CellParsedFormula(data,length-9);o[3]=""}else data.l+=length-9;return o};var parse_BrtFmlaError=function(data,length,opts){var cell=parse_Cell(data);var value=data.read_shift(1);var o=[cell,value,"e"];if(opts.cellFormula){var formula=parse_CellParsedFormula(data,length-9);o[3]=""}else data.l+=length-9;return o};var parse_BrtFmlaNum=function(data,length,opts){var cell=parse_Cell(data);var value=parse_Xnum(data);var o=[cell,value,"n"];if(opts.cellFormula){var formula=parse_CellParsedFormula(data,length-16);o[3]=""}else data.l+=length-16;return o};var parse_BrtFmlaString=function(data,length,opts){var start=data.l;var cell=parse_Cell(data);var value=parse_XLWideString(data);var o=[cell,value,"str"];if(opts.cellFormula){var formula=parse_CellParsedFormula(data,start+length-data.l);o[3]=""}else data.l=start+length;return o};var parse_ws_bin=function(data,opts){if(!data)return data;var s={};var ref;var pass=false;var row,p,cf;recordhopper(data,function(val,R){switch(R.n){case"BrtWsDim":ref=val;break;case"BrtRowHdr":row=val;break;case"BrtFmlaBool":case"BrtFmlaError":case"BrtFmlaNum":case"BrtFmlaString":case"BrtCellBool":case"BrtCellError":case"BrtCellIsst":case"BrtCellReal":case"BrtCellRk":p={t:val[2]};switch(val[2]){case"n":p.v=val[1];break;case"s":p.v=strs[val[1]].t;p.r=strs[val[1]].r;break;case"b":p.v=val[1]?true:false;break;case"e":p.raw=val[1];p.v=BErr[p.raw];break;case"str":p.v=utf8read(val[1]);break}if(opts.cellFormula&&val.length>3)p.f=val[3];if(cf=styles.CellXf[val[0].iStyleRef])try{p.w=SSF.format(cf.ifmt,p.v,_ssfopts);if(opts.cellNF)p.z=SSF._table[cf.ifmt]}catch(e){if(opts.WTF)throw e}s[encode_cell({c:val[0].c,r:row.r})]=p;break;case"BrtCellBlank":break;case"BrtArrFmla":break;case"BrtShrFmla":break;case"BrtBeginSheet":break;case"BrtWsProp":break;case"BrtSheetCalcProp":break;case"BrtBeginWsViews":break;case"BrtBeginWsView":break;case"BrtEndWsView":break;case"BrtEndWsViews":break;case"BrtSel":break;case"BrtACBegin":break;case"BrtACEnd":break;case"BrtWsFmtInfoEx14":break;case"BrtWsFmtInfo":break;case"BrtBeginColInfos":break;case"BrtColInfo":break;case"BrtEndColInfos":break;case"BrtBeginSheetData":break;case"BrtEndSheetData":break;case"BrtSheetProtection":break;case"BrtPrintOptions":break;case"BrtMargins":break;case"BrtPageSetup":break;case"BrtFRTBegin":pass=true;break;case"BrtFRTEnd":pass=false;break;case"BrtEndSheet":break;case"BrtBeginMergeCells":break;case"BrtMergeCell":break;case"BrtEndMergeCells":break;case"BrtLegacyDrawing":break}},opts);s["!ref"]=encode_range(ref);return s};var WBPropsDef={allowRefreshQuery:"0",autoCompressPictures:"1",backupFile:"0",checkCompatibility:"0",codeName:"",date1904:"0",dateCompatibility:"1",filterPrivacy:"0",hidePivotFieldList:"0",promptedSolutions:"0",publishItems:"0",refreshAllConnections:false,saveExternalLinkValues:"1",showBorderUnselectedTables:"1",showInkAnnotation:"1",showObjects:"all",showPivotChartFilter:"0"};var WBViewDef={activeTab:"0",autoFilterDateGrouping:"1",firstSheet:"0",minimized:"0",showHorizontalScroll:"1",showSheetTabs:"1",showVerticalScroll:"1",tabRatio:"600",visibility:"visible"};var SheetDef={state:"visible"};var CalcPrDef={calcCompleted:"true",calcMode:"auto",calcOnSave:"true",concurrentCalc:"true",fullCalcOnLoad:"false",fullPrecision:"true",iterate:"false",iterateCount:"100",iterateDelta:"0.001",refMode:"A1"};var CustomWBViewDef={autoUpdate:"false",changesSavedWin:"false",includeHiddenRowCol:"true",includePrintSettings:"true",maximized:"false",minimized:"false",onlySync:"false",personalView:"false",showComments:"commIndicator",showFormulaBar:"true",showHorizontalScroll:"true",showObjects:"all",showSheetTabs:"true",showStatusbar:"true",showVerticalScroll:"true",tabRatio:"600",xWindow:"0",yWindow:"0"};var XMLNS_WB=["http://schemas.openxmlformats.org/spreadsheetml/2006/main","http://schemas.microsoft.com/office/excel/2006/main","http://schemas.microsoft.com/office/excel/2006/2"];function parse_wb_xml(data){var wb={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:""};var pass=false;data.match(/<[^>]*>/g).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"":break;case"":break;case"":break;case"":delete y[0];wb.WBProps=y;break;case"":break;case"":case"":break;case"":case"":break;case"":break;case"":break;case"":break;case"":pass=true;break;case"":pass=false;break;case"":case"":break;case"":delete y[0];wb.CalcPr=y;break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":break;case"":break;case"":break;case"":case"":break;case"":case"
":case"":break;case"":pass=false;break;case"":pass=false;break}});if(XMLNS_WB.indexOf(wb.xmlns)===-1)throw new Error("Unknown Namespace: "+wb.xmlns);var z;for(z in WBPropsDef)if(typeof wb.WBProps[z]==="undefined")wb.WBProps[z]=WBPropsDef[z];for(z in CalcPrDef)if(typeof wb.CalcPr[z]==="undefined")wb.CalcPr[z]=CalcPrDef[z];wb.WBView.forEach(function(w){for(var z in WBViewDef)if(typeof w[z]==="undefined")w[z]=WBViewDef[z]});wb.Sheets.forEach(function(w){for(var z in SheetDef)if(typeof w[z]==="undefined")w[z]=SheetDef[z]});_ssfopts.date1904=parsexmlbool(wb.WBProps.date1904,"date1904");return wb}var parse_BrtBundleSh=function(data,length){var z={};z.hsState=data.read_shift(4);z.iTabID=data.read_shift(4);z.strRelID=parse_RelID(data,length-8);z.name=parse_XLWideString(data);return z};var parse_wb_bin=function(data){var wb={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:""};var pass=false,z;recordhopper(data,function(val,R){switch(R.n){case"BrtBundleSh":wb.Sheets.push(val);break;case"BrtBeginBook":break;case"BrtFileVersion":break;case"BrtWbProp":break;case"BrtACBegin":break;case"BrtAbsPath15":break;case"BrtACEnd":break;case"BrtBookProtection":break;case"BrtBeginBookViews":break;case"BrtBookView":break;case"BrtEndBookViews":break;case"BrtBeginBundleShs":break;case"BrtEndBundleShs":break;case"BrtBeginFnGroup":break;case"BrtEndFnGroup":break;case"BrtBeginExternals":break;case"BrtSupSelf":break;case"BrtSupBookSrc":break;case"BrtExternSheet":break;case"BrtEndExternals":break;case"BrtName":break;case"BrtCalcProp":break;case"BrtUserBookView":break;case"BrtBeginPivotCacheIDs":break;case"BrtBeginPivotCacheID":break;case"BrtEndPivotCacheID":break;case"BrtEndPivotCacheIDs":break;case"BrtWebOpt":break;case"BrtFileRecover":break;case"BrtFRTBegin":pass=true;break;case"BrtFRTEnd":pass=false;break;case"BrtEndBook":break}});for(z in WBPropsDef)if(typeof wb.WBProps[z]==="undefined")wb.WBProps[z]=WBPropsDef[z];for(z in CalcPrDef)if(typeof wb.CalcPr[z]==="undefined")wb.CalcPr[z]=CalcPrDef[z];wb.WBView.forEach(function(w){for(var z in WBViewDef)if(typeof w[z]==="undefined")w[z]=WBViewDef[z]});wb.Sheets.forEach(function(w){for(var z in SheetDef)if(typeof w[z]==="undefined")w[z]=SheetDef[z]});_ssfopts.date1904=parsexmlbool(wb.WBProps.date1904,"date1904");return wb};function parse_wb(data,name,opts){return name.substr(-4)===".bin"?parse_wb_bin(data,opts):parse_wb_xml(data,opts)}function parse_ws(data,name,opts){return name.substr(-4)===".bin"?parse_ws_bin(data,opts):parse_ws_xml(data,opts)}function parse_sty(data,name,opts){return name.substr(-4)===".bin"?parse_sty_bin(data,opts):parse_sty_xml(data,opts)}function parse_sst(data,name,opts){return name.substr(-4)===".bin"?parse_sst_bin(data,opts):parse_sst_xml(data,opts)}var RecordEnum={0:{n:"BrtRowHdr",f:parse_BrtRowHdr},1:{n:"BrtCellBlank",f:parse_BrtCellBlank},2:{n:"BrtCellRk",f:parse_BrtCellRk},3:{n:"BrtCellError",f:parse_BrtCellError},4:{n:"BrtCellBool",f:parse_BrtCellBool},5:{n:"BrtCellReal",f:parse_BrtCellReal},6:{n:"BrtCellSt",f:parse_BrtCellSt},7:{n:"BrtCellIsst",f:parse_BrtCellIsst},8:{n:"BrtFmlaString",f:parse_BrtFmlaString},9:{n:"BrtFmlaNum",f:parse_BrtFmlaNum},10:{n:"BrtFmlaBool",f:parse_BrtFmlaBool},11:{n:"BrtFmlaError",f:parse_BrtFmlaError},19:{n:"BrtSSTItem",f:parse_RichStr},20:{n:"BrtPCDIMissing",f:parsenoop},21:{n:"BrtPCDINumber",f:parsenoop},22:{n:"BrtPCDIBoolean",f:parsenoop},23:{n:"BrtPCDIError",f:parsenoop},24:{n:"BrtPCDIString",f:parsenoop},25:{n:"BrtPCDIDatetime",f:parsenoop},26:{n:"BrtPCDIIndex",f:parsenoop},27:{n:"BrtPCDIAMissing",f:parsenoop},28:{n:"BrtPCDIANumber",f:parsenoop},29:{n:"BrtPCDIABoolean",f:parsenoop},30:{n:"BrtPCDIAError",f:parsenoop},31:{n:"BrtPCDIAString",f:parsenoop},32:{n:"BrtPCDIADatetime",f:parsenoop},33:{n:"BrtPCRRecord",f:parsenoop},34:{n:"BrtPCRRecordDt",f:parsenoop},35:{n:"BrtFRTBegin",f:parsenoop},36:{n:"BrtFRTEnd",f:parsenoop},37:{n:"BrtACBegin",f:parsenoop},38:{n:"BrtACEnd",f:parsenoop},39:{n:"BrtName",f:parsenoop},40:{n:"BrtIndexRowBlock",f:parsenoop},42:{n:"BrtIndexBlock",f:parsenoop},43:{n:"BrtFont",f:parsenoop},44:{n:"BrtFmt",f:parse_BrtFmt},45:{n:"BrtFill",f:parsenoop},46:{n:"BrtBorder",f:parsenoop},47:{n:"BrtXF",f:parse_BrtXF},48:{n:"BrtStyle",f:parsenoop},49:{n:"BrtCellMeta",f:parsenoop},50:{n:"BrtValueMeta",f:parsenoop},51:{n:"BrtMdb",f:parsenoop},52:{n:"BrtBeginFmd",f:parsenoop},53:{n:"BrtEndFmd",f:parsenoop},54:{n:"BrtBeginMdx",f:parsenoop},55:{n:"BrtEndMdx",f:parsenoop},56:{n:"BrtBeginMdxTuple",f:parsenoop},57:{n:"BrtEndMdxTuple",f:parsenoop},58:{n:"BrtMdxMbrIstr",f:parsenoop},59:{n:"BrtStr",f:parsenoop},60:{n:"BrtColInfo",f:parsenoop},62:{n:"BrtCellRString",f:parsenoop},64:{n:"BrtDVal",f:parsenoop},65:{n:"BrtSxvcellNum",f:parsenoop},66:{n:"BrtSxvcellStr",f:parsenoop},67:{n:"BrtSxvcellBool",f:parsenoop},68:{n:"BrtSxvcellErr",f:parsenoop},69:{n:"BrtSxvcellDate",f:parsenoop},70:{n:"BrtSxvcellNil",f:parsenoop},128:{n:"BrtFileVersion",f:parsenoop},129:{n:"BrtBeginSheet",f:parsenoop},130:{n:"BrtEndSheet",f:parsenoop},131:{n:"BrtBeginBook",f:parsenoop},132:{n:"BrtEndBook",f:parsenoop},133:{n:"BrtBeginWsViews",f:parsenoop},134:{n:"BrtEndWsViews",f:parsenoop},135:{n:"BrtBeginBookViews",f:parsenoop},136:{n:"BrtEndBookViews",f:parsenoop},137:{n:"BrtBeginWsView",f:parsenoop},138:{n:"BrtEndWsView",f:parsenoop},139:{n:"BrtBeginCsViews",f:parsenoop},140:{n:"BrtEndCsViews",f:parsenoop},141:{n:"BrtBeginCsView",f:parsenoop},142:{n:"BrtEndCsView",f:parsenoop},143:{n:"BrtBeginBundleShs",f:parsenoop},144:{n:"BrtEndBundleShs",f:parsenoop},145:{n:"BrtBeginSheetData",f:parsenoop},146:{n:"BrtEndSheetData",f:parsenoop},147:{n:"BrtWsProp",f:parse_BrtWsProp},148:{n:"BrtWsDim",f:parse_BrtWsDim},151:{n:"BrtPane",f:parsenoop},152:{n:"BrtSel",f:parsenoop},153:{n:"BrtWbProp",f:parsenoop},154:{n:"BrtWbFactoid",f:parsenoop},155:{n:"BrtFileRecover",f:parsenoop},156:{n:"BrtBundleSh",f:parse_BrtBundleSh},157:{n:"BrtCalcProp",f:parsenoop},158:{n:"BrtBookView",f:parsenoop},159:{n:"BrtBeginSst",f:parse_BrtBeginSst},160:{n:"BrtEndSst",f:parsenoop},161:{n:"BrtBeginAFilter",f:parsenoop},162:{n:"BrtEndAFilter",f:parsenoop},163:{n:"BrtBeginFilterColumn",f:parsenoop},164:{n:"BrtEndFilterColumn",f:parsenoop},165:{n:"BrtBeginFilters",f:parsenoop},166:{n:"BrtEndFilters",f:parsenoop},167:{n:"BrtFilter",f:parsenoop},168:{n:"BrtColorFilter",f:parsenoop},169:{n:"BrtIconFilter",f:parsenoop},170:{n:"BrtTop10Filter",f:parsenoop},171:{n:"BrtDynamicFilter",f:parsenoop},172:{n:"BrtBeginCustomFilters",f:parsenoop},173:{n:"BrtEndCustomFilters",f:parsenoop},174:{n:"BrtCustomFilter",f:parsenoop},175:{n:"BrtAFilterDateGroupItem",f:parsenoop},176:{n:"BrtMergeCell",f:parsenoop},177:{n:"BrtBeginMergeCells",f:parsenoop},178:{n:"BrtEndMergeCells",f:parsenoop},179:{n:"BrtBeginPivotCacheDef",f:parsenoop},180:{n:"BrtEndPivotCacheDef",f:parsenoop},181:{n:"BrtBeginPCDFields",f:parsenoop},182:{n:"BrtEndPCDFields",f:parsenoop},183:{n:"BrtBeginPCDField",f:parsenoop},184:{n:"BrtEndPCDField",f:parsenoop},185:{n:"BrtBeginPCDSource",f:parsenoop},186:{n:"BrtEndPCDSource",f:parsenoop},187:{n:"BrtBeginPCDSRange",f:parsenoop},188:{n:"BrtEndPCDSRange",f:parsenoop},189:{n:"BrtBeginPCDFAtbl",f:parsenoop},190:{n:"BrtEndPCDFAtbl",f:parsenoop},191:{n:"BrtBeginPCDIRun",f:parsenoop},192:{n:"BrtEndPCDIRun",f:parsenoop},193:{n:"BrtBeginPivotCacheRecords",f:parsenoop},194:{n:"BrtEndPivotCacheRecords",f:parsenoop},195:{n:"BrtBeginPCDHierarchies",f:parsenoop},196:{n:"BrtEndPCDHierarchies",f:parsenoop},197:{n:"BrtBeginPCDHierarchy",f:parsenoop},198:{n:"BrtEndPCDHierarchy",f:parsenoop},199:{n:"BrtBeginPCDHFieldsUsage",f:parsenoop},200:{n:"BrtEndPCDHFieldsUsage",f:parsenoop},201:{n:"BrtBeginExtConnection",f:parsenoop},202:{n:"BrtEndExtConnection",f:parsenoop},203:{n:"BrtBeginECDbProps",f:parsenoop},204:{n:"BrtEndECDbProps",f:parsenoop},205:{n:"BrtBeginECOlapProps",f:parsenoop},206:{n:"BrtEndECOlapProps",f:parsenoop},207:{n:"BrtBeginPCDSConsol",f:parsenoop},208:{n:"BrtEndPCDSConsol",f:parsenoop},209:{n:"BrtBeginPCDSCPages",f:parsenoop},210:{n:"BrtEndPCDSCPages",f:parsenoop},211:{n:"BrtBeginPCDSCPage",f:parsenoop},212:{n:"BrtEndPCDSCPage",f:parsenoop},213:{n:"BrtBeginPCDSCPItem",f:parsenoop},214:{n:"BrtEndPCDSCPItem",f:parsenoop},215:{n:"BrtBeginPCDSCSets",f:parsenoop},216:{n:"BrtEndPCDSCSets",f:parsenoop},217:{n:"BrtBeginPCDSCSet",f:parsenoop},218:{n:"BrtEndPCDSCSet",f:parsenoop},219:{n:"BrtBeginPCDFGroup",f:parsenoop},220:{n:"BrtEndPCDFGroup",f:parsenoop},221:{n:"BrtBeginPCDFGItems",f:parsenoop},222:{n:"BrtEndPCDFGItems",f:parsenoop},223:{n:"BrtBeginPCDFGRange",f:parsenoop},224:{n:"BrtEndPCDFGRange",f:parsenoop},225:{n:"BrtBeginPCDFGDiscrete",f:parsenoop},226:{n:"BrtEndPCDFGDiscrete",f:parsenoop},227:{n:"BrtBeginPCDSDTupleCache",f:parsenoop},228:{n:"BrtEndPCDSDTupleCache",f:parsenoop},229:{n:"BrtBeginPCDSDTCEntries",f:parsenoop},230:{n:"BrtEndPCDSDTCEntries",f:parsenoop},231:{n:"BrtBeginPCDSDTCEMembers",f:parsenoop},232:{n:"BrtEndPCDSDTCEMembers",f:parsenoop},233:{n:"BrtBeginPCDSDTCEMember",f:parsenoop},234:{n:"BrtEndPCDSDTCEMember",f:parsenoop},235:{n:"BrtBeginPCDSDTCQueries",f:parsenoop},236:{n:"BrtEndPCDSDTCQueries",f:parsenoop},237:{n:"BrtBeginPCDSDTCQuery",f:parsenoop},238:{n:"BrtEndPCDSDTCQuery",f:parsenoop},239:{n:"BrtBeginPCDSDTCSets",f:parsenoop},240:{n:"BrtEndPCDSDTCSets",f:parsenoop},241:{n:"BrtBeginPCDSDTCSet",f:parsenoop},242:{n:"BrtEndPCDSDTCSet",f:parsenoop},243:{n:"BrtBeginPCDCalcItems",f:parsenoop},244:{n:"BrtEndPCDCalcItems",f:parsenoop},245:{n:"BrtBeginPCDCalcItem",f:parsenoop},246:{n:"BrtEndPCDCalcItem",f:parsenoop},247:{n:"BrtBeginPRule",f:parsenoop},248:{n:"BrtEndPRule",f:parsenoop},249:{n:"BrtBeginPRFilters",f:parsenoop},250:{n:"BrtEndPRFilters",f:parsenoop},251:{n:"BrtBeginPRFilter",f:parsenoop},252:{n:"BrtEndPRFilter",f:parsenoop},253:{n:"BrtBeginPNames",f:parsenoop},254:{n:"BrtEndPNames",f:parsenoop},255:{n:"BrtBeginPName",f:parsenoop},256:{n:"BrtEndPName",f:parsenoop},257:{n:"BrtBeginPNPairs",f:parsenoop},258:{n:"BrtEndPNPairs",f:parsenoop},259:{n:"BrtBeginPNPair",f:parsenoop},260:{n:"BrtEndPNPair",f:parsenoop},261:{n:"BrtBeginECWebProps",f:parsenoop},262:{n:"BrtEndECWebProps",f:parsenoop},263:{n:"BrtBeginEcWpTables",f:parsenoop},264:{n:"BrtEndECWPTables",f:parsenoop},265:{n:"BrtBeginECParams",f:parsenoop},266:{n:"BrtEndECParams",f:parsenoop},267:{n:"BrtBeginECParam",f:parsenoop},268:{n:"BrtEndECParam",f:parsenoop},269:{n:"BrtBeginPCDKPIs",f:parsenoop},270:{n:"BrtEndPCDKPIs",f:parsenoop},271:{n:"BrtBeginPCDKPI",f:parsenoop},272:{n:"BrtEndPCDKPI",f:parsenoop},273:{n:"BrtBeginDims",f:parsenoop},274:{n:"BrtEndDims",f:parsenoop},275:{n:"BrtBeginDim",f:parsenoop},276:{n:"BrtEndDim",f:parsenoop},277:{n:"BrtIndexPartEnd",f:parsenoop},278:{n:"BrtBeginStyleSheet",f:parsenoop},279:{n:"BrtEndStyleSheet",f:parsenoop},280:{n:"BrtBeginSXView",f:parsenoop},281:{n:"BrtEndSXVI",f:parsenoop},282:{n:"BrtBeginSXVI",f:parsenoop},283:{n:"BrtBeginSXVIs",f:parsenoop},284:{n:"BrtEndSXVIs",f:parsenoop},285:{n:"BrtBeginSXVD",f:parsenoop},286:{n:"BrtEndSXVD",f:parsenoop},287:{n:"BrtBeginSXVDs",f:parsenoop},288:{n:"BrtEndSXVDs",f:parsenoop},289:{n:"BrtBeginSXPI",f:parsenoop},290:{n:"BrtEndSXPI",f:parsenoop},291:{n:"BrtBeginSXPIs",f:parsenoop},292:{n:"BrtEndSXPIs",f:parsenoop},293:{n:"BrtBeginSXDI",f:parsenoop},294:{n:"BrtEndSXDI",f:parsenoop},295:{n:"BrtBeginSXDIs",f:parsenoop},296:{n:"BrtEndSXDIs",f:parsenoop},297:{n:"BrtBeginSXLI",f:parsenoop},298:{n:"BrtEndSXLI",f:parsenoop},299:{n:"BrtBeginSXLIRws",f:parsenoop},300:{n:"BrtEndSXLIRws",f:parsenoop},301:{n:"BrtBeginSXLICols",f:parsenoop},302:{n:"BrtEndSXLICols",f:parsenoop},303:{n:"BrtBeginSXFormat",f:parsenoop},304:{n:"BrtEndSXFormat",f:parsenoop},305:{n:"BrtBeginSXFormats",f:parsenoop},306:{n:"BrtEndSxFormats",f:parsenoop},307:{n:"BrtBeginSxSelect",f:parsenoop},308:{n:"BrtEndSxSelect",f:parsenoop},309:{n:"BrtBeginISXVDRws",f:parsenoop},310:{n:"BrtEndISXVDRws",f:parsenoop},311:{n:"BrtBeginISXVDCols",f:parsenoop},312:{n:"BrtEndISXVDCols",f:parsenoop},313:{n:"BrtEndSXLocation",f:parsenoop},314:{n:"BrtBeginSXLocation",f:parsenoop},315:{n:"BrtEndSXView",f:parsenoop},316:{n:"BrtBeginSXTHs",f:parsenoop},317:{n:"BrtEndSXTHs",f:parsenoop},318:{n:"BrtBeginSXTH",f:parsenoop},319:{n:"BrtEndSXTH",f:parsenoop},320:{n:"BrtBeginISXTHRws",f:parsenoop},321:{n:"BrtEndISXTHRws",f:parsenoop},322:{n:"BrtBeginISXTHCols",f:parsenoop},323:{n:"BrtEndISXTHCols",f:parsenoop},324:{n:"BrtBeginSXTDMPS",f:parsenoop},325:{n:"BrtEndSXTDMPs",f:parsenoop},326:{n:"BrtBeginSXTDMP",f:parsenoop},327:{n:"BrtEndSXTDMP",f:parsenoop},328:{n:"BrtBeginSXTHItems",f:parsenoop},329:{n:"BrtEndSXTHItems",f:parsenoop},330:{n:"BrtBeginSXTHItem",f:parsenoop},331:{n:"BrtEndSXTHItem",f:parsenoop},332:{n:"BrtBeginMetadata",f:parsenoop},333:{n:"BrtEndMetadata",f:parsenoop},334:{n:"BrtBeginEsmdtinfo",f:parsenoop},335:{n:"BrtMdtinfo",f:parsenoop},336:{n:"BrtEndEsmdtinfo",f:parsenoop},337:{n:"BrtBeginEsmdb",f:parsenoop},338:{n:"BrtEndEsmdb",f:parsenoop},339:{n:"BrtBeginEsfmd",f:parsenoop},340:{n:"BrtEndEsfmd",f:parsenoop},341:{n:"BrtBeginSingleCells",f:parsenoop},342:{n:"BrtEndSingleCells",f:parsenoop},343:{n:"BrtBeginList",f:parsenoop},344:{n:"BrtEndList",f:parsenoop},345:{n:"BrtBeginListCols",f:parsenoop},346:{n:"BrtEndListCols",f:parsenoop},347:{n:"BrtBeginListCol",f:parsenoop},348:{n:"BrtEndListCol",f:parsenoop},349:{n:"BrtBeginListXmlCPr",f:parsenoop},350:{n:"BrtEndListXmlCPr",f:parsenoop},351:{n:"BrtListCCFmla",f:parsenoop},352:{n:"BrtListTrFmla",f:parsenoop},353:{n:"BrtBeginExternals",f:parsenoop},354:{n:"BrtEndExternals",f:parsenoop},355:{n:"BrtSupBookSrc",f:parsenoop},357:{n:"BrtSupSelf",f:parsenoop},358:{n:"BrtSupSame",f:parsenoop},359:{n:"BrtSupTabs",f:parsenoop},360:{n:"BrtBeginSupBook",f:parsenoop},361:{n:"BrtPlaceholderName",f:parsenoop},362:{n:"BrtExternSheet",f:parsenoop},363:{n:"BrtExternTableStart",f:parsenoop},364:{n:"BrtExternTableEnd",f:parsenoop},366:{n:"BrtExternRowHdr",f:parsenoop},367:{n:"BrtExternCellBlank",f:parsenoop},368:{n:"BrtExternCellReal",f:parsenoop},369:{n:"BrtExternCellBool",f:parsenoop},370:{n:"BrtExternCellError",f:parsenoop},371:{n:"BrtExternCellString",f:parsenoop},372:{n:"BrtBeginEsmdx",f:parsenoop},373:{n:"BrtEndEsmdx",f:parsenoop},374:{n:"BrtBeginMdxSet",f:parsenoop},375:{n:"BrtEndMdxSet",f:parsenoop},376:{n:"BrtBeginMdxMbrProp",f:parsenoop},377:{n:"BrtEndMdxMbrProp",f:parsenoop},378:{n:"BrtBeginMdxKPI",f:parsenoop},379:{n:"BrtEndMdxKPI",f:parsenoop},380:{n:"BrtBeginEsstr",f:parsenoop},381:{n:"BrtEndEsstr",f:parsenoop},382:{n:"BrtBeginPRFItem",f:parsenoop},383:{n:"BrtEndPRFItem",f:parsenoop},384:{n:"BrtBeginPivotCacheIDs",f:parsenoop},385:{n:"BrtEndPivotCacheIDs",f:parsenoop},386:{n:"BrtBeginPivotCacheID",f:parsenoop},387:{n:"BrtEndPivotCacheID",f:parsenoop},388:{n:"BrtBeginISXVIs",f:parsenoop},389:{n:"BrtEndISXVIs",f:parsenoop},390:{n:"BrtBeginColInfos",f:parsenoop},391:{n:"BrtEndColInfos",f:parsenoop},392:{n:"BrtBeginRwBrk",f:parsenoop},393:{n:"BrtEndRwBrk",f:parsenoop},394:{n:"BrtBeginColBrk",f:parsenoop},395:{n:"BrtEndColBrk",f:parsenoop},396:{n:"BrtBrk",f:parsenoop},397:{n:"BrtUserBookView",f:parsenoop},398:{n:"BrtInfo",f:parsenoop},399:{n:"BrtCUsr",f:parsenoop},400:{n:"BrtUsr",f:parsenoop},401:{n:"BrtBeginUsers",f:parsenoop},403:{n:"BrtEOF",f:parsenoop},404:{n:"BrtUCR",f:parsenoop},405:{n:"BrtRRInsDel",f:parsenoop},406:{n:"BrtRREndInsDel",f:parsenoop},407:{n:"BrtRRMove",f:parsenoop},408:{n:"BrtRREndMove",f:parsenoop},409:{n:"BrtRRChgCell",f:parsenoop},410:{n:"BrtRREndChgCell",f:parsenoop},411:{n:"BrtRRHeader",f:parsenoop},412:{n:"BrtRRUserView",f:parsenoop},413:{n:"BrtRRRenSheet",f:parsenoop},414:{n:"BrtRRInsertSh",f:parsenoop},415:{n:"BrtRRDefName",f:parsenoop},416:{n:"BrtRRNote",f:parsenoop},417:{n:"BrtRRConflict",f:parsenoop},418:{n:"BrtRRTQSIF",f:parsenoop},419:{n:"BrtRRFormat",f:parsenoop},420:{n:"BrtRREndFormat",f:parsenoop},421:{n:"BrtRRAutoFmt",f:parsenoop},422:{n:"BrtBeginUserShViews",f:parsenoop},423:{n:"BrtBeginUserShView",f:parsenoop},424:{n:"BrtEndUserShView",f:parsenoop},425:{n:"BrtEndUserShViews",f:parsenoop},426:{n:"BrtArrFmla",f:parsenoop},427:{n:"BrtShrFmla",f:parsenoop},428:{n:"BrtTable",f:parsenoop},429:{n:"BrtBeginExtConnections",f:parsenoop},430:{n:"BrtEndExtConnections",f:parsenoop},431:{n:"BrtBeginPCDCalcMems",f:parsenoop},432:{n:"BrtEndPCDCalcMems",f:parsenoop},433:{n:"BrtBeginPCDCalcMem",f:parsenoop},434:{n:"BrtEndPCDCalcMem",f:parsenoop},435:{n:"BrtBeginPCDHGLevels",f:parsenoop},436:{n:"BrtEndPCDHGLevels",f:parsenoop},437:{n:"BrtBeginPCDHGLevel",f:parsenoop},438:{n:"BrtEndPCDHGLevel",f:parsenoop},439:{n:"BrtBeginPCDHGLGroups",f:parsenoop},440:{n:"BrtEndPCDHGLGroups",f:parsenoop},441:{n:"BrtBeginPCDHGLGroup",f:parsenoop},442:{n:"BrtEndPCDHGLGroup",f:parsenoop},443:{n:"BrtBeginPCDHGLGMembers",f:parsenoop},444:{n:"BrtEndPCDHGLGMembers",f:parsenoop},445:{n:"BrtBeginPCDHGLGMember",f:parsenoop},446:{n:"BrtEndPCDHGLGMember",f:parsenoop},447:{n:"BrtBeginQSI",f:parsenoop},448:{n:"BrtEndQSI",f:parsenoop},449:{n:"BrtBeginQSIR",f:parsenoop},450:{n:"BrtEndQSIR",f:parsenoop},451:{n:"BrtBeginDeletedNames",f:parsenoop},452:{n:"BrtEndDeletedNames",f:parsenoop},453:{n:"BrtBeginDeletedName",f:parsenoop},454:{n:"BrtEndDeletedName",f:parsenoop},455:{n:"BrtBeginQSIFs",f:parsenoop},456:{n:"BrtEndQSIFs",f:parsenoop},457:{n:"BrtBeginQSIF",f:parsenoop},458:{n:"BrtEndQSIF",f:parsenoop},459:{n:"BrtBeginAutoSortScope",f:parsenoop},460:{n:"BrtEndAutoSortScope",f:parsenoop},461:{n:"BrtBeginConditionalFormatting",f:parsenoop},462:{n:"BrtEndConditionalFormatting",f:parsenoop},463:{n:"BrtBeginCFRule",f:parsenoop},464:{n:"BrtEndCFRule",f:parsenoop},465:{n:"BrtBeginIconSet",f:parsenoop},466:{n:"BrtEndIconSet",f:parsenoop},467:{n:"BrtBeginDatabar",f:parsenoop},468:{n:"BrtEndDatabar",f:parsenoop},469:{n:"BrtBeginColorScale",f:parsenoop},470:{n:"BrtEndColorScale",f:parsenoop},471:{n:"BrtCFVO",f:parsenoop},472:{n:"BrtExternValueMeta",f:parsenoop},473:{n:"BrtBeginColorPalette",f:parsenoop},474:{n:"BrtEndColorPalette",f:parsenoop},475:{n:"BrtIndexedColor",f:parsenoop},476:{n:"BrtMargins",f:parsenoop},477:{n:"BrtPrintOptions",f:parsenoop},478:{n:"BrtPageSetup",f:parsenoop},479:{n:"BrtBeginHeaderFooter",f:parsenoop},480:{n:"BrtEndHeaderFooter",f:parsenoop},481:{n:"BrtBeginSXCrtFormat",f:parsenoop},482:{n:"BrtEndSXCrtFormat",f:parsenoop},483:{n:"BrtBeginSXCrtFormats",f:parsenoop},484:{n:"BrtEndSXCrtFormats",f:parsenoop},485:{n:"BrtWsFmtInfo",f:parsenoop},486:{n:"BrtBeginMgs",f:parsenoop},487:{n:"BrtEndMGs",f:parsenoop},488:{n:"BrtBeginMGMaps",f:parsenoop},489:{n:"BrtEndMGMaps",f:parsenoop},490:{n:"BrtBeginMG",f:parsenoop},491:{n:"BrtEndMG",f:parsenoop},492:{n:"BrtBeginMap",f:parsenoop},493:{n:"BrtEndMap",f:parsenoop},494:{n:"BrtHLink",f:parsenoop},495:{n:"BrtBeginDCon",f:parsenoop},496:{n:"BrtEndDCon",f:parsenoop},497:{n:"BrtBeginDRefs",f:parsenoop},498:{n:"BrtEndDRefs",f:parsenoop},499:{n:"BrtDRef",f:parsenoop},500:{n:"BrtBeginScenMan",f:parsenoop},501:{n:"BrtEndScenMan",f:parsenoop},502:{n:"BrtBeginSct",f:parsenoop},503:{n:"BrtEndSct",f:parsenoop},504:{n:"BrtSlc",f:parsenoop},505:{n:"BrtBeginDXFs",f:parsenoop},506:{n:"BrtEndDXFs",f:parsenoop},507:{n:"BrtDXF",f:parsenoop},508:{n:"BrtBeginTableStyles",f:parsenoop},509:{n:"BrtEndTableStyles",f:parsenoop},510:{n:"BrtBeginTableStyle",f:parsenoop},511:{n:"BrtEndTableStyle",f:parsenoop},512:{n:"BrtTableStyleElement",f:parsenoop},513:{n:"BrtTableStyleClient",f:parsenoop},514:{n:"BrtBeginVolDeps",f:parsenoop},515:{n:"BrtEndVolDeps",f:parsenoop},516:{n:"BrtBeginVolType",f:parsenoop},517:{n:"BrtEndVolType",f:parsenoop},518:{n:"BrtBeginVolMain",f:parsenoop},519:{n:"BrtEndVolMain",f:parsenoop},520:{n:"BrtBeginVolTopic",f:parsenoop},521:{n:"BrtEndVolTopic",f:parsenoop},522:{n:"BrtVolSubtopic",f:parsenoop},523:{n:"BrtVolRef",f:parsenoop},524:{n:"BrtVolNum",f:parsenoop},525:{n:"BrtVolErr",f:parsenoop},526:{n:"BrtVolStr",f:parsenoop},527:{n:"BrtVolBool",f:parsenoop},530:{n:"BrtBeginSortState",f:parsenoop},531:{n:"BrtEndSortState",f:parsenoop},532:{n:"BrtBeginSortCond",f:parsenoop},533:{n:"BrtEndSortCond",f:parsenoop},534:{n:"BrtBookProtection",f:parsenoop},535:{n:"BrtSheetProtection",f:parsenoop},536:{n:"BrtRangeProtection",f:parsenoop},537:{n:"BrtPhoneticInfo",f:parsenoop},538:{n:"BrtBeginECTxtWiz",f:parsenoop},539:{n:"BrtEndECTxtWiz",f:parsenoop},540:{n:"BrtBeginECTWFldInfoLst",f:parsenoop},541:{n:"BrtEndECTWFldInfoLst",f:parsenoop},542:{n:"BrtBeginECTwFldInfo",f:parsenoop},548:{n:"BrtFileSharing",f:parsenoop},549:{n:"BrtOleSize",f:parsenoop},550:{n:"BrtDrawing",f:parsenoop},551:{n:"BrtLegacyDrawing",f:parsenoop},552:{n:"BrtLegacyDrawingHF",f:parsenoop},553:{n:"BrtWebOpt",f:parsenoop},554:{n:"BrtBeginWebPubItems",f:parsenoop},555:{n:"BrtEndWebPubItems",f:parsenoop},556:{n:"BrtBeginWebPubItem",f:parsenoop},557:{n:"BrtEndWebPubItem",f:parsenoop},558:{n:"BrtBeginSXCondFmt",f:parsenoop},559:{n:"BrtEndSXCondFmt",f:parsenoop},560:{n:"BrtBeginSXCondFmts",f:parsenoop},561:{n:"BrtEndSXCondFmts",f:parsenoop},562:{n:"BrtBkHim",f:parsenoop},564:{n:"BrtColor",f:parsenoop},565:{n:"BrtBeginIndexedColors",f:parsenoop},566:{n:"BrtEndIndexedColors",f:parsenoop},569:{n:"BrtBeginMRUColors",f:parsenoop},570:{n:"BrtEndMRUColors",f:parsenoop},572:{n:"BrtMRUColor",f:parsenoop},573:{n:"BrtBeginDVals",f:parsenoop},574:{n:"BrtEndDVals",f:parsenoop},577:{n:"BrtSupNameStart",f:parsenoop},578:{n:"BrtSupNameValueStart",f:parsenoop},579:{n:"BrtSupNameValueEnd",f:parsenoop},580:{n:"BrtSupNameNum",f:parsenoop},581:{n:"BrtSupNameErr",f:parsenoop},582:{n:"BrtSupNameSt",f:parsenoop},583:{n:"BrtSupNameNil",f:parsenoop},584:{n:"BrtSupNameBool",f:parsenoop},585:{n:"BrtSupNameFmla",f:parsenoop},586:{n:"BrtSupNameBits",f:parsenoop},587:{n:"BrtSupNameEnd",f:parsenoop},588:{n:"BrtEndSupBook",f:parsenoop},589:{n:"BrtCellSmartTagProperty",f:parsenoop},590:{n:"BrtBeginCellSmartTag",f:parsenoop},591:{n:"BrtEndCellSmartTag",f:parsenoop},592:{n:"BrtBeginCellSmartTags",f:parsenoop},593:{n:"BrtEndCellSmartTags",f:parsenoop},594:{n:"BrtBeginSmartTags",f:parsenoop},595:{n:"BrtEndSmartTags",f:parsenoop},596:{n:"BrtSmartTagType",f:parsenoop},597:{n:"BrtBeginSmartTagTypes",f:parsenoop},598:{n:"BrtEndSmartTagTypes",f:parsenoop},599:{n:"BrtBeginSXFilters",f:parsenoop},600:{n:"BrtEndSXFilters",f:parsenoop},601:{n:"BrtBeginSXFILTER",f:parsenoop},602:{n:"BrtEndSXFilter",f:parsenoop},603:{n:"BrtBeginFills",f:parsenoop},604:{n:"BrtEndFills",f:parsenoop},605:{n:"BrtBeginCellWatches",f:parsenoop},606:{n:"BrtEndCellWatches",f:parsenoop},607:{n:"BrtCellWatch",f:parsenoop},608:{n:"BrtBeginCRErrs",f:parsenoop},609:{n:"BrtEndCRErrs",f:parsenoop},610:{n:"BrtCrashRecErr",f:parsenoop},611:{n:"BrtBeginFonts",f:parsenoop},612:{n:"BrtEndFonts",f:parsenoop},613:{n:"BrtBeginBorders",f:parsenoop},614:{n:"BrtEndBorders",f:parsenoop},615:{n:"BrtBeginFmts",f:parsenoop},616:{n:"BrtEndFmts",f:parsenoop},617:{n:"BrtBeginCellXFs",f:parsenoop},618:{n:"BrtEndCellXFs",f:parsenoop},619:{n:"BrtBeginStyles",f:parsenoop},620:{n:"BrtEndStyles",f:parsenoop},625:{n:"BrtBigName",f:parsenoop},626:{n:"BrtBeginCellStyleXFs",f:parsenoop},627:{n:"BrtEndCellStyleXFs",f:parsenoop},628:{n:"BrtBeginComments",f:parsenoop},629:{n:"BrtEndComments",f:parsenoop},630:{n:"BrtBeginCommentAuthors",f:parsenoop},631:{n:"BrtEndCommentAuthors",f:parsenoop},632:{n:"BrtCommentAuthor",f:parsenoop},633:{n:"BrtBeginCommentList",f:parsenoop},634:{n:"BrtEndCommentList",f:parsenoop},635:{n:"BrtBeginComment",f:parsenoop},636:{n:"BrtEndComment",f:parsenoop},637:{n:"BrtCommentText",f:parsenoop},638:{n:"BrtBeginOleObjects",f:parsenoop},639:{n:"BrtOleObject",f:parsenoop},640:{n:"BrtEndOleObjects",f:parsenoop},641:{n:"BrtBeginSxrules",f:parsenoop},642:{n:"BrtEndSxRules",f:parsenoop},643:{n:"BrtBeginActiveXControls",f:parsenoop},644:{n:"BrtActiveX",f:parsenoop},645:{n:"BrtEndActiveXControls",f:parsenoop},646:{n:"BrtBeginPCDSDTCEMembersSortBy",f:parsenoop},648:{n:"BrtBeginCellIgnoreECs",f:parsenoop},649:{n:"BrtCellIgnoreEC",f:parsenoop},650:{n:"BrtEndCellIgnoreECs",f:parsenoop},651:{n:"BrtCsProp",f:parsenoop},652:{n:"BrtCsPageSetup",f:parsenoop},653:{n:"BrtBeginUserCsViews",f:parsenoop},654:{n:"BrtEndUserCsViews",f:parsenoop},655:{n:"BrtBeginUserCsView",f:parsenoop},656:{n:"BrtEndUserCsView",f:parsenoop},657:{n:"BrtBeginPcdSFCIEntries",f:parsenoop},658:{n:"BrtEndPCDSFCIEntries",f:parsenoop},659:{n:"BrtPCDSFCIEntry",f:parsenoop},660:{n:"BrtBeginListParts",f:parsenoop},661:{n:"BrtListPart",f:parsenoop},662:{n:"BrtEndListParts",f:parsenoop},663:{n:"BrtSheetCalcProp",f:parsenoop},664:{n:"BrtBeginFnGroup",f:parsenoop},665:{n:"BrtFnGroup",f:parsenoop},666:{n:"BrtEndFnGroup",f:parsenoop},667:{n:"BrtSupAddin",f:parsenoop},668:{n:"BrtSXTDMPOrder",f:parsenoop},669:{n:"BrtCsProtection",f:parsenoop},671:{n:"BrtBeginWsSortMap",f:parsenoop},672:{n:"BrtEndWsSortMap",f:parsenoop},673:{n:"BrtBeginRRSort",f:parsenoop},674:{n:"BrtEndRRSort",f:parsenoop},675:{n:"BrtRRSortItem",f:parsenoop},676:{n:"BrtFileSharingIso",f:parsenoop},677:{n:"BrtBookProtectionIso",f:parsenoop},678:{n:"BrtSheetProtectionIso",f:parsenoop},679:{n:"BrtCsProtectionIso",f:parsenoop},680:{n:"BrtRangeProtectionIso",f:parsenoop},1024:{n:"BrtRwDescent",f:parsenoop},1025:{n:"BrtKnownFonts",f:parsenoop},1026:{n:"BrtBeginSXTupleSet",f:parsenoop},1027:{n:"BrtEndSXTupleSet",f:parsenoop},1028:{n:"BrtBeginSXTupleSetHeader",f:parsenoop},1029:{n:"BrtEndSXTupleSetHeader",f:parsenoop},1030:{n:"BrtSXTupleSetHeaderItem",f:parsenoop},1031:{n:"BrtBeginSXTupleSetData",f:parsenoop},1032:{n:"BrtEndSXTupleSetData",f:parsenoop},1033:{n:"BrtBeginSXTupleSetRow",f:parsenoop},1034:{n:"BrtEndSXTupleSetRow",f:parsenoop},1035:{n:"BrtSXTupleSetRowItem",f:parsenoop},1036:{n:"BrtNameExt",f:parsenoop},1037:{n:"BrtPCDH14",f:parsenoop},1038:{n:"BrtBeginPCDCalcMem14",f:parsenoop},1039:{n:"BrtEndPCDCalcMem14",f:parsenoop},1040:{n:"BrtSXTH14",f:parsenoop},1041:{n:"BrtBeginSparklineGroup",f:parsenoop},1042:{n:"BrtEndSparklineGroup",f:parsenoop},1043:{n:"BrtSparkline",f:parsenoop},1044:{n:"BrtSXDI14",f:parsenoop},1045:{n:"BrtWsFmtInfoEx14",f:parsenoop},1046:{n:"BrtBeginConditionalFormatting14",f:parsenoop},1047:{n:"BrtEndConditionalFormatting14",f:parsenoop},1048:{n:"BrtBeginCFRule14",f:parsenoop},1049:{n:"BrtEndCFRule14",f:parsenoop},1050:{n:"BrtCFVO14",f:parsenoop},1051:{n:"BrtBeginDatabar14",f:parsenoop},1052:{n:"BrtBeginIconSet14",f:parsenoop},1053:{n:"BrtDVal14",f:parsenoop},1054:{n:"BrtBeginDVals14",f:parsenoop},1055:{n:"BrtColor14",f:parsenoop},1056:{n:"BrtBeginSparklines",f:parsenoop},1057:{n:"BrtEndSparklines",f:parsenoop},1058:{n:"BrtBeginSparklineGroups",f:parsenoop},1059:{n:"BrtEndSparklineGroups",f:parsenoop},1061:{n:"BrtSXVD14",f:parsenoop},1062:{n:"BrtBeginSxview14",f:parsenoop},1063:{n:"BrtEndSxview14",f:parsenoop},1066:{n:"BrtBeginPCD14",f:parsenoop},1067:{n:"BrtEndPCD14",f:parsenoop},1068:{n:"BrtBeginExtConn14",f:parsenoop},1069:{n:"BrtEndExtConn14",f:parsenoop},1070:{n:"BrtBeginSlicerCacheIDs",f:parsenoop},1071:{n:"BrtEndSlicerCacheIDs",f:parsenoop},1072:{n:"BrtBeginSlicerCacheID",f:parsenoop},1073:{n:"BrtEndSlicerCacheID",f:parsenoop},1075:{n:"BrtBeginSlicerCache",f:parsenoop},1076:{n:"BrtEndSlicerCache",f:parsenoop},1077:{n:"BrtBeginSlicerCacheDef",f:parsenoop},1078:{n:"BrtEndSlicerCacheDef",f:parsenoop},1079:{n:"BrtBeginSlicersEx",f:parsenoop},1080:{n:"BrtEndSlicersEx",f:parsenoop},1081:{n:"BrtBeginSlicerEx",f:parsenoop},1082:{n:"BrtEndSlicerEx",f:parsenoop},1083:{n:"BrtBeginSlicer",f:parsenoop},1084:{n:"BrtEndSlicer",f:parsenoop},1085:{n:"BrtSlicerCachePivotTables",f:parsenoop},1086:{n:"BrtBeginSlicerCacheOlapImpl",f:parsenoop},1087:{n:"BrtEndSlicerCacheOlapImpl",f:parsenoop},1088:{n:"BrtBeginSlicerCacheLevelsData",f:parsenoop},1089:{n:"BrtEndSlicerCacheLevelsData",f:parsenoop},1090:{n:"BrtBeginSlicerCacheLevelData",f:parsenoop},1091:{n:"BrtEndSlicerCacheLevelData",f:parsenoop},1092:{n:"BrtBeginSlicerCacheSiRanges",f:parsenoop},1093:{n:"BrtEndSlicerCacheSiRanges",f:parsenoop},1094:{n:"BrtBeginSlicerCacheSiRange",f:parsenoop},1095:{n:"BrtEndSlicerCacheSiRange",f:parsenoop},1096:{n:"BrtSlicerCacheOlapItem",f:parsenoop},1097:{n:"BrtBeginSlicerCacheSelections",f:parsenoop},1098:{n:"BrtSlicerCacheSelection",f:parsenoop},1099:{n:"BrtEndSlicerCacheSelections",f:parsenoop},1100:{n:"BrtBeginSlicerCacheNative",f:parsenoop},1101:{n:"BrtEndSlicerCacheNative",f:parsenoop},1102:{n:"BrtSlicerCacheNativeItem",f:parsenoop},1103:{n:"BrtRangeProtection14",f:parsenoop},1104:{n:"BrtRangeProtectionIso14",f:parsenoop},1105:{n:"BrtCellIgnoreEC14",f:parsenoop},1111:{n:"BrtList14",f:parsenoop},1112:{n:"BrtCFIcon",f:parsenoop},1113:{n:"BrtBeginSlicerCachesPivotCacheIDs",f:parsenoop},1114:{n:"BrtEndSlicerCachesPivotCacheIDs",f:parsenoop},1115:{n:"BrtBeginSlicers",f:parsenoop},1116:{n:"BrtEndSlicers",f:parsenoop},1117:{n:"BrtWbProp14",f:parsenoop},1118:{n:"BrtBeginSXEdit",f:parsenoop},1119:{n:"BrtEndSXEdit",f:parsenoop},1120:{n:"BrtBeginSXEdits",f:parsenoop},1121:{n:"BrtEndSXEdits",f:parsenoop},1122:{n:"BrtBeginSXChange",f:parsenoop},1123:{n:"BrtEndSXChange",f:parsenoop},1124:{n:"BrtBeginSXChanges",f:parsenoop},1125:{n:"BrtEndSXChanges",f:parsenoop},1126:{n:"BrtSXTupleItems",f:parsenoop},1128:{n:"BrtBeginSlicerStyle",f:parsenoop},1129:{n:"BrtEndSlicerStyle",f:parsenoop},1130:{n:"BrtSlicerStyleElement",f:parsenoop},1131:{n:"BrtBeginStyleSheetExt14",f:parsenoop},1132:{n:"BrtEndStyleSheetExt14",f:parsenoop},1133:{n:"BrtBeginSlicerCachesPivotCacheID",f:parsenoop},1134:{n:"BrtEndSlicerCachesPivotCacheID",f:parsenoop},1135:{n:"BrtBeginConditionalFormattings",f:parsenoop},1136:{n:"BrtEndConditionalFormattings",f:parsenoop},1137:{n:"BrtBeginPCDCalcMemExt",f:parsenoop},1138:{n:"BrtEndPCDCalcMemExt",f:parsenoop},1139:{n:"BrtBeginPCDCalcMemsExt",f:parsenoop},1140:{n:"BrtEndPCDCalcMemsExt",f:parsenoop},1141:{n:"BrtPCDField14",f:parsenoop},1142:{n:"BrtBeginSlicerStyles",f:parsenoop},1143:{n:"BrtEndSlicerStyles",f:parsenoop},1144:{n:"BrtBeginSlicerStyleElements",f:parsenoop},1145:{n:"BrtEndSlicerStyleElements",f:parsenoop},1146:{n:"BrtCFRuleExt",f:parsenoop},1147:{n:"BrtBeginSXCondFmt14",f:parsenoop},1148:{n:"BrtEndSXCondFmt14",f:parsenoop},1149:{n:"BrtBeginSXCondFmts14",f:parsenoop},1150:{n:"BrtEndSXCondFmts14",f:parsenoop},1152:{n:"BrtBeginSortCond14",f:parsenoop},1153:{n:"BrtEndSortCond14",f:parsenoop},1154:{n:"BrtEndDVals14",f:parsenoop},1155:{n:"BrtEndIconSet14",f:parsenoop},1156:{n:"BrtEndDatabar14",f:parsenoop},1157:{n:"BrtBeginColorScale14",f:parsenoop},1158:{n:"BrtEndColorScale14",f:parsenoop},1159:{n:"BrtBeginSxrules14",f:parsenoop},1160:{n:"BrtEndSxrules14",f:parsenoop},1161:{n:"BrtBeginPRule14",f:parsenoop},1162:{n:"BrtEndPRule14",f:parsenoop},1163:{n:"BrtBeginPRFilters14",f:parsenoop},1164:{n:"BrtEndPRFilters14",f:parsenoop},1165:{n:"BrtBeginPRFilter14",f:parsenoop},1166:{n:"BrtEndPRFilter14",f:parsenoop},1167:{n:"BrtBeginPRFItem14",f:parsenoop},1168:{n:"BrtEndPRFItem14",f:parsenoop},1169:{n:"BrtBeginCellIgnoreECs14",f:parsenoop},1170:{n:"BrtEndCellIgnoreECs14",f:parsenoop},1171:{n:"BrtDxf14",f:parsenoop},1172:{n:"BrtBeginDxF14s",f:parsenoop},1173:{n:"BrtEndDxf14s",f:parsenoop},1177:{n:"BrtFilter14",f:parsenoop},1178:{n:"BrtBeginCustomFilters14",f:parsenoop},1180:{n:"BrtCustomFilter14",f:parsenoop},1181:{n:"BrtIconFilter14",f:parsenoop},1182:{n:"BrtPivotCacheConnectionName",f:parsenoop},2048:{n:"BrtBeginDecoupledPivotCacheIDs",f:parsenoop},2049:{n:"BrtEndDecoupledPivotCacheIDs",f:parsenoop},2050:{n:"BrtDecoupledPivotCacheID",f:parsenoop},2051:{n:"BrtBeginPivotTableRefs",f:parsenoop},2052:{n:"BrtEndPivotTableRefs",f:parsenoop},2053:{n:"BrtPivotTableRef",f:parsenoop},2054:{n:"BrtSlicerCacheBookPivotTables",f:parsenoop},2055:{n:"BrtBeginSxvcells",f:parsenoop},2056:{n:"BrtEndSxvcells",f:parsenoop},2057:{n:"BrtBeginSxRow",f:parsenoop},2058:{n:"BrtEndSxRow",f:parsenoop},2060:{n:"BrtPcdCalcMem15",f:parsenoop},2067:{n:"BrtQsi15",f:parsenoop},2068:{n:"BrtBeginWebExtensions",f:parsenoop},2069:{n:"BrtEndWebExtensions",f:parsenoop},2070:{n:"BrtWebExtension",f:parsenoop},2071:{n:"BrtAbsPath15",f:parsenoop},2072:{n:"BrtBeginPivotTableUISettings",f:parsenoop},2073:{n:"BrtEndPivotTableUISettings",f:parsenoop},2075:{n:"BrtTableSlicerCacheIDs",f:parsenoop},2076:{n:"BrtTableSlicerCacheID",f:parsenoop},2077:{n:"BrtBeginTableSlicerCache",f:parsenoop},2078:{n:"BrtEndTableSlicerCache",f:parsenoop},2079:{n:"BrtSxFilter15",f:parsenoop},2080:{n:"BrtBeginTimelineCachePivotCacheIDs",f:parsenoop},2081:{n:"BrtEndTimelineCachePivotCacheIDs",f:parsenoop},2082:{n:"BrtTimelineCachePivotCacheID",f:parsenoop},2083:{n:"BrtBeginTimelineCacheIDs",f:parsenoop},2084:{n:"BrtEndTimelineCacheIDs",f:parsenoop},2085:{n:"BrtBeginTimelineCacheID",f:parsenoop},2086:{n:"BrtEndTimelineCacheID",f:parsenoop},2087:{n:"BrtBeginTimelinesEx",f:parsenoop},2088:{n:"BrtEndTimelinesEx",f:parsenoop},2089:{n:"BrtBeginTimelineEx",f:parsenoop},2090:{n:"BrtEndTimelineEx",f:parsenoop},2091:{n:"BrtWorkBookPr15",f:parsenoop},2092:{n:"BrtPCDH15",f:parsenoop},2093:{n:"BrtBeginTimelineStyle",f:parsenoop},2094:{n:"BrtEndTimelineStyle",f:parsenoop},2095:{n:"BrtTimelineStyleElement",f:parsenoop},2096:{n:"BrtBeginTimelineStylesheetExt15",f:parsenoop},2097:{n:"BrtEndTimelineStylesheetExt15",f:parsenoop},2098:{n:"BrtBeginTimelineStyles",f:parsenoop},2099:{n:"BrtEndTimelineStyles",f:parsenoop},2100:{n:"BrtBeginTimelineStyleElements",f:parsenoop},2101:{n:"BrtEndTimelineStyleElements",f:parsenoop},2102:{n:"BrtDxf15",f:parsenoop},2103:{n:"BrtBeginDxfs15",f:parsenoop},2104:{n:"brtEndDxfs15",f:parsenoop},2105:{n:"BrtSlicerCacheHideItemsWithNoData",f:parsenoop},2106:{n:"BrtBeginItemUniqueNames",f:parsenoop},2107:{n:"BrtEndItemUniqueNames",f:parsenoop},2108:{n:"BrtItemUniqueName",f:parsenoop},2109:{n:"BrtBeginExtConn15",f:parsenoop},2110:{n:"BrtEndExtConn15",f:parsenoop},2111:{n:"BrtBeginOledbPr15",f:parsenoop},2112:{n:"BrtEndOledbPr15",f:parsenoop},2113:{n:"BrtBeginDataFeedPr15",f:parsenoop},2114:{n:"BrtEndDataFeedPr15",f:parsenoop},2115:{n:"BrtTextPr15",f:parsenoop},2116:{n:"BrtRangePr15",f:parsenoop},2117:{n:"BrtDbCommand15",f:parsenoop},2118:{n:"BrtBeginDbTables15",f:parsenoop},2119:{n:"BrtEndDbTables15",f:parsenoop},2120:{n:"BrtDbTable15",f:parsenoop},2121:{n:"BrtBeginDataModel",f:parsenoop},2122:{n:"BrtEndDataModel",f:parsenoop},2123:{n:"BrtBeginModelTables",f:parsenoop},2124:{n:"BrtEndModelTables",f:parsenoop},2125:{n:"BrtModelTable",f:parsenoop},2126:{n:"BrtBeginModelRelationships",f:parsenoop},2127:{n:"BrtEndModelRelationships",f:parsenoop},2128:{n:"BrtModelRelationship",f:parsenoop},2129:{n:"BrtBeginECTxtWiz15",f:parsenoop},2130:{n:"BrtEndECTxtWiz15",f:parsenoop},2131:{n:"BrtBeginECTWFldInfoLst15",f:parsenoop},2132:{n:"BrtEndECTWFldInfoLst15",f:parsenoop},2133:{n:"BrtBeginECTWFldInfo15",f:parsenoop},2134:{n:"BrtFieldListActiveItem",f:parsenoop},2135:{n:"BrtPivotCacheIdVersion",f:parsenoop},2136:{n:"BrtSXDI15",f:parsenoop},65535:{n:"",f:parsenoop}}; +function fixopts(opts){var defaults=[["cellNF",false],["cellHTML",true],["cellFormula",true],["sheetStubs",false],["bookDeps",false],["bookSheets",false],["bookProps",false],["bookFiles",false],["WTF",false]];defaults.forEach(function(d){if(typeof opts[d[0]]==="undefined")opts[d[0]]=d[1]})}function parseZip(zip,opts){opts=opts||{};fixopts(opts);reset_cp();var entries=Object.keys(zip.files);var keys=entries.filter(function(x){return x.substr(-1)!="/"}).sort();var dir=parseCT(getzipdata(zip,"[Content_Types].xml"));var xlsb=false;var sheets;if(dir.workbooks.length===0){var binname="xl/workbook.bin";if(!getzipfile(zip,binname))throw new Error("Could not find workbook entry");dir.workbooks.push(binname);xlsb=true}if(!opts.bookSheets&&!opts.bookProps){strs={};if(dir.sst)strs=parse_sst(getzipdata(zip,dir.sst.replace(/^\//,"")),dir.sst,opts);styles={};if(dir.style)styles=parse_sty(getzipdata(zip,dir.style.replace(/^\//,"")),dir.style)}var wb=parse_wb(getzipdata(zip,dir.workbooks[0].replace(/^\//,"")),dir.workbooks[0],opts);var props={},propdata="";try{propdata=dir.coreprops.length!==0?getzipdata(zip,dir.coreprops[0].replace(/^\//,"")):"";propdata+=dir.extprops.length!==0?getzipdata(zip,dir.extprops[0].replace(/^\//,"")):"";props=propdata!==""?parseProps(propdata):{}}catch(e){}var custprops={};if(!opts.bookSheets||opts.bookProps){if(dir.custprops.length!==0){propdata=getzipdata(zip,dir.custprops[0].replace(/^\//,""),true);if(propdata)custprops=parseCustomProps(propdata)}}var out={};if(opts.bookSheets||opts.bookProps){if(props.Worksheets&&props.SheetNames.length>0)sheets=props.SheetNames;else if(wb.Sheets)sheets=wb.Sheets.map(function(x){return x.name});if(opts.bookProps){out.Props=props;out.Custprops=custprops}if(typeof sheets!=="undefined")out.SheetNames=sheets;if(opts.bookSheets?out.SheetNames:opts.bookProps)return out}sheets={};var deps={};if(opts.bookDeps&&dir.calcchain)deps=parseDeps(getzipdata(zip,dir.calcchain.replace(/^\//,"")));var i=0;var sheetRels={};var path,relsPath;if(!props.Worksheets){var wbsheets=wb.Sheets;props.Worksheets=wbsheets.length;props.SheetNames=[];for(var j=0;j!=wbsheets.length;++j){props.SheetNames[j]=wbsheets[j].name}for(i=0;i!=props.Worksheets;++i){try{path="xl/worksheets/sheet"+(i+1)+(xlsb?".bin":".xml");relsPath=path.replace(/^(.*)(\/)([^\/]*)$/,"$1/_rels/$3.rels");sheets[props.SheetNames[i]]=parse_ws(getzipdata(zip,path),path,opts);sheetRels[props.SheetNames[i]]=parseRels(getzipdata(zip,relsPath,true),path)}catch(e){if(opts.WTF)throw e}}}else{for(i=0;i!=props.Worksheets;++i){try{path="xl/worksheets/sheet"+(i+1)+(xlsb?".bin":".xml");relsPath=path.replace(/^(.*)(\/)([^\/]*)$/,"$1/_rels/$3.rels");sheets[props.SheetNames[i]]=parse_ws(getzipdata(zip,path),path,opts);sheetRels[props.SheetNames[i]]=parseRels(getzipdata(zip,relsPath,true),path)}catch(e){if(opts.WTF)throw e}}}if(dir.comments)parse_comments(zip,dir.comments,sheets,sheetRels,opts);out={Directory:dir,Workbook:wb,Props:props,Custprops:custprops,Deps:deps,Sheets:sheets,SheetNames:props.SheetNames,Strings:strs,Styles:styles};if(opts.bookFiles){out.keys=keys,out.files=zip.files}return out}function readSync(data,options){var zip,d=data;var o=options||{};switch(o.type||"base64"){case"file":if(typeof Buffer!=="undefined"){zip=new jszip(d=_fs.readFileSync(data));break}d=_fs.readFileSync(data).toString("base64");case"base64":zip=new jszip(d,{base64:true});break;case"binary":zip=new jszip(d,{base64:false});break}return parseZip(zip,o)}function readFileSync(data,options){var o=options||{};o.type="file";return readSync(data,o)}XLSX.read=readSync;XLSX.readFile=readFileSync;XLSX.parseZip=parseZip;return this})(XLSX);var _chr=function(c){return String.fromCharCode(c)};function encode_col(col){var s="";for(++col;col;col=Math.floor((col-1)/26))s=_chr((col-1)%26+65)+s;return s}function encode_row(row){return""+(row+1)}function encode_cell(cell){return encode_col(cell.c)+encode_row(cell.r)}function decode_col(c){var d=0,i=0;for(;i!==c.length;++i)d=26*d+c.charCodeAt(i)-64;return d-1}function decode_row(rowstr){return Number(rowstr)-1}function split_cell(cstr){return cstr.replace(/(\$?[A-Z]*)(\$?[0-9]*)/,"$1,$2").split(",")}function decode_cell(cstr){var splt=split_cell(cstr);return{c:decode_col(splt[0]),r:decode_row(splt[1])}}function decode_range(range){var x=range.split(":").map(decode_cell);return{s:x[0],e:x[x.length-1]}}function encode_range(range){return encode_cell(range.s)+":"+encode_cell(range.e)}function sheet_to_row_object_array(sheet,opts){var val,row,r,hdr={},isempty,R,C;var out=[];opts=opts||{};if(!sheet||!sheet["!ref"])return out;r=XLSX.utils.decode_range(sheet["!ref"]);for(R=r.s.r,C=r.s.c;C<=r.e.c;++C){val=sheet[encode_cell({c:C,r:R})];if(!val)continue;if(val.w)hdr[C]=val.w;else switch(val.t){case"s":case"str":hdr[C]=val.v;break;case"n":hdr[C]=val.v;break}}for(R=r.s.r+1;R<=r.e.r;++R){isempty=true;row=Object.create({__rowNum__:R});for(C=r.s.c;C<=r.e.c;++C){val=sheet[encode_cell({c:C,r:R})];if(!val||!val.t)continue;if(typeof val.w!=="undefined"&&!opts.raw){row[hdr[C]]=val.w;isempty=false}else switch(val.t){case"s":case"str":case"b":case"n":if(typeof val.v!=="undefined"){row[hdr[C]]=val.v;isempty=false}break;case"e":break;default:throw"unrecognized type "+val.t}}if(!isempty)out.push(row)}return out}function sheet_to_csv(sheet,opts){var stringify=function stringify(val){if(!val.t)return"";if(typeof val.w!=="undefined")return val.w;switch(val.t){case"n":return String(val.v);case"s":case"str":return typeof val.v!=="undefined"?val.v:"";case"b":return val.v?"TRUE":"FALSE";case"e":return val.v;default:throw"unrecognized type "+val.t}};var out="",txt="";opts=opts||{};if(!sheet||!sheet["!ref"])return out;var r=XLSX.utils.decode_range(sheet["!ref"]);var fs=opts.FS||",",rs=opts.RS||"\n";for(var R=r.s.r;R<=r.e.r;++R){var row=[];for(var C=r.s.c;C<=r.e.c;++C){var val=sheet[XLSX.utils.encode_cell({c:C,r:R})];if(!val){row.push("");continue}txt=String(stringify(val));if(txt.indexOf(fs)!==-1||txt.indexOf(rs)!==-1||txt.indexOf('"')!==-1)txt='"'+txt.replace(/"/g,'""')+'"';row.push(txt)}out+=row.join(fs)+rs}return out}var make_csv=sheet_to_csv;function get_formulae(ws){var cmds=[];for(var y in ws)if(y[0]!=="!"&&ws.hasOwnProperty(y)){var x=ws[y];var val="";if(x.f)val=x.f;else if(typeof x.w!=="undefined")val="'"+x.w;else if(typeof x.v==="undefined")continue;else val=x.v;cmds.push(y+"="+val)}return cmds}XLSX.utils={encode_col:encode_col,encode_row:encode_row,encode_cell:encode_cell,encode_range:encode_range,decode_col:decode_col,decode_row:decode_row,split_cell:split_cell,decode_cell:decode_cell,decode_range:decode_range,sheet_to_csv:sheet_to_csv,make_csv:sheet_to_csv,get_formulae:get_formulae,sheet_to_row_object_array:sheet_to_row_object_array};if(typeof require!=="undefined"&&typeof exports!=="undefined"){exports.read=XLSX.read;exports.readFile=XLSX.readFile;exports.utils=XLSX.utils;exports.version=XLSX.version} +//# sourceMappingURL=dist/xlsx.min.map \ No newline at end of file diff --git a/dist/xlsx.min.map b/dist/xlsx.min.map new file mode 100644 index 0000000..0bfa3bb --- /dev/null +++ b/dist/xlsx.min.map @@ -0,0 +1 @@ +{"version":3,"file":"dist/xlsx.min.js","sources":["xlsx.js"],"names":["SSF","make_ssf","_strrev","x","String","split","reverse","join","fill","c","l","Array","pad","v","d","t","length","rpad","version","opts_fmt","fixopts","o","y","undefined","opts","date1904","output","mode","table_fmt",1,2,3,4,9,10,11,12,13,14,15,16,17,18,19,20,21,22,37,38,39,40,45,46,47,48,49,56,65535,"days","months","frac","D","mixed","sgn","B","P_2","P_1","P","Q_2","Q_1","Q","A","Math","floor","q","general_fmt","V","toPrecision","pow","toFixed","substr","replace","toExponential","Error","_general","parse_date_code","date","time","dow","dout","out","T","u","Date","setDate","getDate","getFullYear","getMonth","getDay","m","S","M","H","write_date","type","fmt","val","round","commaify","s","write_num","ffmt","mul","indexOf","idx","match","period","ee","Number","fakee","$$","$1","$2","$3","r","rr","ff","aval","sign","den","rnd","base","myn","myd","min","max","split_fmt","in_str","i","j","push","slice","_split","eval_fmt","flen","lst","dt","hr","toLowerCase","w","jj","map","_eval","choose_fmt","table","format","f","_choose","_table","load","get_table","load_table","tbl","XLSX","current_codepage","current_cptable","cptable","module","require","reset_cp","_getchar","fromCharCode","getdata","data","name","charCodeAt","asNodeBuffer","Buffer","asBinary","_data","getContent","prototype","call","getzipfile","zip","file","files","getzipdata","safe","e","_fs","jszip","JSZip","exports","attregexg","attregex","parsexmltag","tag","words","z","0","evert","obj","Object","keys","forEach","k","hasOwnProperty","encodings",""","'",">","<","&","rencoding","rencstr","unescapexml","text","RegExp","_chr","parseInt","escapexml","parsexmlbool","value","utf8read","orig","c1","c2","c3","matchtag","g","parseVector","h","matches","baseType","size","res","isval","readIEEE754","buf","isLE","nl","ml","el","eMax","eBias","bits","NaN","Infinity","__toBuffer","hexlify","this","toString","bufs","concat","__readUInt8","b","readUInt8","__readUInt16LE","readUInt16LE","__readInt16LE","__readUInt32LE","readUInt32LE","__readInt32LE","readInt32LE","__readDoubleLE","readDoubleLE","ReadShift","vv","loc","prep_blob","blob","pos","read_shift","bind","read","parsenoop","recordhopper","cb","tmpbyte","cntbyte","RT","R","RecordEnum","parse_StrRun","ich","ifnt","parse_RichStr","start","flags","fRichStr","fExtStr","str","parse_XLWideString","rgsStrRun","dwSizeStrRun","parse_Cell","col","iStyleRef","fPhShow","parse_CodeName","parse_RelID","parse_XLNullableWideString","parse_RkNumber","fX100","fInt","RK","parse_UncheckedRfX","cell","cchCharacters","parse_Xnum","BErr",7,23,29,36,42,43,255,"RBErr","parse_rs","tregex","rpregex","parse_rpr","rpr","intro","outro","font","sz","strike","rgb","color","family","style","parse_r","terms","rs","parse_si","html","cellHTML","parse_sst_xml","sst","filter","Count","count","Unique","uniqueCount","parse_BrtBeginSst","parse_sst_bin","n","styles","parseNumFmts","NumberFmt","formatCode","numFmtId","parseCXfs","CellXf","parse_sty_xml","parse_BrtFmt","ifmt","stFmtCode","parse_BrtXF","ixfeParent","ixfe","parse_sty_bin","state","pass","ct2type","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml","application/vnd.ms-excel.sheet.macroEnabled.main+xml","application/vnd.ms-excel.sheet.binary.macroEnabled.main","application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml","application/vnd.ms-excel.worksheet","application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml","application/vnd.ms-excel.styles","application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml","application/vnd.ms-excel.sharedStrings","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml","application/vnd.openxmlformats-package.core-properties+xml","application/vnd.openxmlformats-officedocument.extended-properties+xml","application/vnd.openxmlformats-officedocument.custom-properties+xml","application/vnd.openxmlformats-officedocument.theme+xml","application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml","foo","XMLNS_CT","parseProps","p","Company","strings","bools","xtra","xtracp","xtradc","xtradcterms","cur","HeadingPairs","TitlesOfParts","widx","Worksheets","parts","SheetNames","Creator","LastModifiedBy","CreatedDate","ModifiedDate","parseCustomProps","toks","substring","parseFloat","console","warn","parseDeps","ctext","parseCT","ct","workbooks","sheets","calcchains","themes","coreprops","extprops","custprops","strs","comments","xmlns","Extension","ContentType","PartName","calcchain","parseRels","currentFilePath","charAt","rels","resolveRelativePathIntoAbsolute","to","toksFrom","pop","toksTo","reversed","tokTo","shift","rel","Type","Target","Id","TargetMode","canonictarget","parse_comments_xml","authors","commentList","trim","index","comment","author","authorId","ref","guid","textMatch","rt","parse_comments","dirComments","sheetRels","canonicalpath","sheetNames","sheetName","insertCommentsIntoSheet","sheet","range","decode_range","thisCell","decode_cell","encoded","encode_range","a","parse_CellParsedFormula","cce","_ssfopts","parse_ws_xml","refguess","sidx","row","cells","cref","cref_cell","sheetStubs","is","epoch","parse","UTC","raw","fmtid","cf","cellNF","WTF","parse_BrtRowHdr","parse_BrtWsDim","parse_BrtWsProp","parse_BrtCellBlank","parse_BrtCellBool","fBool","parse_BrtCellError","parse_BrtCellIsst","isst","parse_BrtCellReal","parse_BrtCellRk","parse_BrtCellSt","parse_BrtFmlaBool","cellFormula","formula","parse_BrtFmlaError","parse_BrtFmlaNum","parse_BrtFmlaString","parse_ws_bin","encode_cell","WBPropsDef","allowRefreshQuery","autoCompressPictures","backupFile","checkCompatibility","codeName","dateCompatibility","filterPrivacy","hidePivotFieldList","promptedSolutions","publishItems","refreshAllConnections","saveExternalLinkValues","showBorderUnselectedTables","showInkAnnotation","showObjects","showPivotChartFilter","WBViewDef","activeTab","autoFilterDateGrouping","firstSheet","minimized","showHorizontalScroll","showSheetTabs","showVerticalScroll","tabRatio","visibility","SheetDef","CalcPrDef","calcCompleted","calcMode","calcOnSave","concurrentCalc","fullCalcOnLoad","fullPrecision","iterate","iterateCount","iterateDelta","refMode","CustomWBViewDef","autoUpdate","changesSavedWin","includeHiddenRowCol","includePrintSettings","maximized","onlySync","personalView","showComments","showFormulaBar","showStatusbar","xWindow","yWindow","XMLNS_WB","parse_wb_xml","wb","AppVersion","WBProps","WBView","Sheets","CalcPr","parse_BrtBundleSh","hsState","iTabID","strRelID","parse_wb_bin","parse_wb","parse_ws","parse_sty","parse_sst",5,6,8,24,25,26,27,28,30,31,32,33,34,35,44,50,51,52,53,54,55,57,58,59,60,62,64,65,66,67,68,69,70,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,357,358,359,360,361,362,363,364,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,530,531,532,533,534,535,536,537,538,539,540,541,542,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,564,565,566,569,570,572,573,574,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,671,672,673,674,675,676,677,678,679,680,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1061,1062,1063,1066,1067,1068,1069,1070,1071,1072,1073,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1177,1178,1180,1181,1182,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2060,2067,2068,2069,2070,2071,2072,2073,2075,2076,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,"defaults","parseZip","entries","sort","dir","xlsb","binname","bookSheets","bookProps","props","propdata","Props","Custprops","deps","bookDeps","path","relsPath","wbsheets","Directory","Workbook","Deps","Strings","Styles","bookFiles","readSync","options","readFileSync","base64","readFile","encode_col","encode_row","decode_col","decode_row","rowstr","split_cell","cstr","splt","sheet_to_row_object_array","hdr","isempty","C","utils","create","__rowNum__","sheet_to_csv","stringify","txt","fs","FS","RS","make_csv","get_formulae","ws","cmds"],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index 197621e..a14e054 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xlsx", - "version": "0.5.7", + "version": "0.5.8", "author": "sheetjs", "description": "XLSB / XLSX / XLSM parser", "keywords": [ "xlsx", "xlsb", "xlsm", "office", "excel", "spreadsheet" ], diff --git a/test.js b/test.js index e43ec86..05380ed 100644 --- a/test.js +++ b/test.js @@ -63,6 +63,12 @@ function parsetest(x, wb) { } : null); }); }); + if(!fs.existsSync(dir + '2013/' + x + '.xlsb')) return; + describe(x + '.xlsb from 2013', function() { + it('should parse', function() { + var xlsb = XLSX.readFile(dir + '2013/' + x + '.xlsb', opts); + }); + }); } describe('should parse test files', function() { @@ -163,12 +169,28 @@ describe('options', function() { assert(typeof wb.Sheets === 'undefined'); }); it('should not generate deps by default', function() { + var wb = XLSX.readFile(dir+'formula_stress_test.xlsx'); + assert(typeof wb.Deps === 'undefined' || !(wb.Deps.length>0)); + }); + it('bookDeps should generate deps', function() { var wb = XLSX.readFile(dir+'formula_stress_test.xlsx', {bookDeps:true}); assert(typeof wb.Deps !== 'undefined' && wb.Deps.length > 0); }); - it('bookDeps should generate deps', function() { + it('should not generate files or keys by default', function() { var wb = XLSX.readFile(dir+'formula_stress_test.xlsx'); - assert(typeof wb.Deps === 'undefined' || !(wb.Deps.length>0)); + assert(typeof wb.files === 'undefined'); + assert(typeof wb.keys === 'undefined'); + wb = XLSX.readFile(dir+'formula_stress_test.xlsb'); + assert(typeof wb.files === 'undefined'); + assert(typeof wb.keys === 'undefined'); + }); + it('bookFiles should generate files and keys', function() { + var wb = XLSX.readFile(dir+'formula_stress_test.xlsx', {bookFiles:true}); + assert(typeof wb.files !== 'undefined'); + assert(typeof wb.keys !== 'undefined'); + wb = XLSX.readFile(dir+'formula_stress_test.xlsb', {bookFiles:true}); + assert(typeof wb.files !== 'undefined'); + assert(typeof wb.keys !== 'undefined'); }); }); }); diff --git a/tests/files b/tests/files index 09abbe1..15d10e8 160000 --- a/tests/files +++ b/tests/files @@ -1 +1 @@ -Subproject commit 09abbe1b28237722d93a8510f42c71094c1244fd +Subproject commit 15d10e8eba67bafd07a406b3345c9309739b5da1 diff --git a/xlsx.js b/xlsx.js index 93808f9..d1ebfe5 100644 --- a/xlsx.js +++ b/xlsx.js @@ -9,7 +9,7 @@ var _strrev = function(x) { return String(x).split("").reverse().join("");}; function fill(c,l) { return new Array(l+1).join(c); } function pad(v,d,c){var t=String(v);return t.length>=d?t:(fill(c||0,d-t.length)+t);} function rpad(v,d,c){var t=String(v);return t.length>=d?t:(t+fill(c||0,d-t.length));} -SSF.version = '0.5.7'; +SSF.version = '0.5.8'; /* Options */ var opts_fmt = {}; function fixopts(o){for(var y in opts_fmt) if(o[y]===undefined) o[y]=opts_fmt[y];} @@ -116,7 +116,7 @@ var general_fmt = function(v) { return o.replace("e","E").replace(/\.0*$/,"").replace(/\.([0-9]*[^0])0*$/,".$1").replace(/(E[+-])([0-9])$/,"$1"+"0"+"$2"); } if(typeof v === 'string') return v; - throw "unsupported value in General format: " + v; + throw new Error("unsupported value in General format: " + v); }; SSF._general = general_fmt; var parse_date_code = function parse_date_code(v,opts) { @@ -233,7 +233,7 @@ var write_num = function(type, fmt, val) { return o.replace("e","E"); } if(fmt[0] === "$") return "$"+write_num(type,fmt.substr(fmt[1]==' '?2:1),val); - var r, ff, aval = val < 0 ? -val : val, sign = val < 0 ? "-" : ""; + var r, rr, ff, aval = val < 0 ? -val : val, sign = val < 0 ? "-" : ""; if((r = fmt.match(/# (\?+)([ ]?)\/([ ]?)(\d+)/))) { var den = Number(r[4]), rnd = Math.round(aval * den), base = Math.floor(rnd/den); var myn = (rnd - base*den), myd = den; @@ -246,8 +246,17 @@ var write_num = function(type, fmt, val) { o = Math.round(val * Math.pow(10,r[1].length)); return String(o/Math.pow(10,r[1].length)).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.([0-9]*)$/,function($$, $1) { return "." + $1 + fill("0", r[1].length-$1.length); }); } + if((r = fmt.match(/^(0*)\.(#*)$/))) { + o = Math.round(val*Math.pow(10,r[2].length)); + return String(o * Math.pow(10,-r[2].length)).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^([-]?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":"."); + } + if((r = fmt.match(/^#,##0([.]?)$/))) return sign + commaify(String(Math.round(aval))); + if((r = fmt.match(/^#,##0\.([#0]*0)$/))) { + rr = Math.round((val-Math.floor(val))*Math.pow(10,r[1].length)); + return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(rr,r[1].length,0); + } if((r = fmt.match(/^# ([?]+)([ ]?)\/([ ]?)([?]+)/))) { - var rr = Math.min(Math.max(r[1].length, r[4].length),7); + rr = Math.min(Math.max(r[1].length, r[4].length),7); ff = frac(aval, Math.pow(10,rr)-1, true); return sign + (ff[0]||(ff[1] ? "" : "0")) + " " + (ff[1] ? pad(ff[1],rr," ") + r[2] + "/" + r[3] + rpad(ff[2],rr," "): fill(" ", 2*rr+1 + r[2].length + r[3].length)); } @@ -256,16 +265,6 @@ var write_num = function(type, fmt, val) { case "#.##": o = Math.round(val*100); return String(o/100).replace(/^([^\.]+)$/,"$1.").replace(/^0\.$/,"."); case "#,###": var x = commaify(String(Math.round(aval))); return x !== "0" ? sign + x : ""; - case "#,##0": return sign + commaify(String(Math.round(aval))); - case "#,##0.0": r = Math.round((val-Math.floor(val))*10); return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(r,1,"0"); - case "#,##0.00": r = Math.round((val-Math.floor(val))*100); return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(r,2,"0"); - case "#,##0.000": r = Math.round((val-Math.floor(val))*1000); return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(r,3,0); - case "#,##0.0000": r = Math.round((val-Math.floor(val))*10000); return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(r,4,0); - case "#,##0.00000": r = Math.round((val-Math.floor(val))*Math.pow(10,5)); return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(r,5,0); - case "#,##0.000000": r = Math.round((val-Math.floor(val))*Math.pow(10,6)); return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(r,6,0); - case "#,##0.0000000": r = Math.round((val-Math.floor(val))*Math.pow(10,7)); return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(r,7,0); - case "#,##0.00000000": r = Math.round((val-Math.floor(val))*Math.pow(10,8)); return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(r,8,0); - case "#,##0.000000000": r = Math.round((val-Math.floor(val))*Math.pow(10,9)); return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(r,9,0); default: } throw new Error("unsupported format |" + fmt + "|"); @@ -282,7 +281,7 @@ function split_fmt(fmt) { j = i+1; } out.push(fmt.slice(j)); - if(in_str !=-1) throw "Format |" + fmt + "| unterminated string at " + in_str; + if(in_str !=-1) throw new Error("Format |" + fmt + "| unterminated string at " + in_str); return out; } SSF._split = split_fmt; @@ -295,7 +294,7 @@ function eval_fmt(fmt, v, opts, flen) { switch((c = fmt[i])) { case 'G': /* General */ if(fmt.substr(i, i+6).toLowerCase() !== "general") - throw 'unrecognized character ' + fmt[i] + ' in ' + fmt; + throw new Error('unrecognized character ' + fmt[i] + ' in ' +fmt); out.push({t:'G',v:'General'}); i+=7; break; case '"': /* Literal text */ for(o="";fmt[++i] !== '"' && i < fmt.length;) o += fmt[i]; @@ -338,7 +337,7 @@ function eval_fmt(fmt, v, opts, flen) { } else { o=""; } break; /* Numbers */ - case '0': case '#': + case '0': case '#': case '.': o = c; while("0#?.,E+-%".indexOf(c=fmt[++i]) > -1) o += c; out.push({t:'n', v:o}); break; case '?': @@ -424,7 +423,7 @@ SSF.load_table = function(tbl) { for(var i=0; i!=0x0188; ++i) if(tbl[i]) SSF.loa make_ssf(SSF); var XLSX = {}; (function(XLSX){ -XLSX.version = '0.5.7'; +XLSX.version = '0.5.8'; var current_codepage, current_cptable, cptable; if(typeof module !== "undefined" && typeof require !== 'undefined') { if(typeof cptable === 'undefined') cptable = require('codepage'); @@ -982,7 +981,7 @@ function parse_sty_bin(data) { for(var y in SSF._table) styles.NumberFmt[y] = SSF._table[y]; styles.CellXf = []; - var state = ""; + var state = ""; /* TODO: this should be a stack */ var pass = false; recordhopper(data, function(val, R, RT) { switch(R.n) { @@ -1001,8 +1000,14 @@ function parse_sty_bin(data) { case 'BrtStyle': break; /* TODO */ case 'BrtRowHdr': break; /* TODO */ case 'BrtCellMeta': break; /* ?? */ + case 'BrtDXF': break; /* TODO */ + case 'BrtMRUColor': break; /* TODO */ + case 'BrtIndexedColor': break; /* TODO */ case 'BrtBeginStyleSheet': break; case 'BrtEndStyleSheet': break; + case 'BrtBeginTableStyle': break; + case 'BrtTableStyleElement': break; + case 'BrtEndTableStyle': break; case 'BrtBeginFmts': state = "FMTS"; break; case 'BrtEndFmts': state = ""; break; case 'BrtBeginFonts': state = "FONTS"; break; @@ -1023,6 +1028,12 @@ function parse_sty_bin(data) { case 'BrtEndDXFs': state = ""; break; case 'BrtBeginTableStyles': state = "TABLESTYLES"; break; case 'BrtEndTableStyles': state = ""; break; + case 'BrtBeginColorPalette': state = "COLORPALETTE"; break; + case 'BrtBeginIndexedColors': state = "INDEXEDCOLORS"; break; + case 'BrtEndIndexedColors': state = ""; break; + case 'BrtBeginMRUColors': state = "MRUCOLORS"; break; + case 'BrtEndMRUColors': state = ""; break; + case 'BrtEndColorPalette': state = ""; break; case 'BrtFRTBegin': pass = true; break; case 'BrtFRTEnd': pass = false; break; //default: if(!pass) throw new Error("Unexpected record " + RT + " " + R.n); @@ -1797,6 +1808,11 @@ var parse_wb_bin = function(data) { case 'BrtBeginBook': break; case 'BrtFileVersion': break; case 'BrtWbProp': break; + case 'BrtACBegin': break; + case 'BrtAbsPath15': break; + case 'BrtACEnd': break; + /*case 'BrtBookProtectionIso': break;*/ + case 'BrtBookProtection': break; case 'BrtBeginBookViews': break; case 'BrtBookView': break; case 'BrtEndBookViews': break; @@ -1806,15 +1822,22 @@ var parse_wb_bin = function(data) { case 'BrtEndFnGroup': break; case 'BrtBeginExternals': break; case 'BrtSupSelf': break; + case 'BrtSupBookSrc': break; case 'BrtExternSheet': break; case 'BrtEndExternals': break; case 'BrtName': break; case 'BrtCalcProp': break; + case 'BrtUserBookView': break; case 'BrtBeginPivotCacheIDs': break; case 'BrtBeginPivotCacheID': break; case 'BrtEndPivotCacheID': break; case 'BrtEndPivotCacheIDs': break; + case 'BrtWebOpt': break; case 'BrtFileRecover': break; + /*case 'BrtBeginWebPubItems': break; + case 'BrtBeginWebPubItem': break; + case 'BrtEndWebPubItem': break; + case 'BrtEndWebPubItems': break;*/ case 'BrtFRTBegin': pass = true; break; case 'BrtFRTEnd': pass = false; break; case 'BrtEndBook': break; @@ -2679,6 +2702,7 @@ function fixopts(opts) { ['bookDeps', false], /* parse calculation chains */ ['bookSheets', false], /* only try to get sheet names (no Sheets) */ ['bookProps', false], /* only try to get properties (no Sheets) */ + ['bookFiles', false], /* include raw file structure (keys, files) */ ['WTF', false] /* WTF mode (throws errors) */ ]; @@ -2771,7 +2795,7 @@ function parseZip(zip, opts) { if(dir.comments) parse_comments(zip, dir.comments, sheets, sheetRels, opts); - return { + out = { Directory: dir, Workbook: wb, Props: props, @@ -2781,9 +2805,12 @@ function parseZip(zip, opts) { SheetNames: props.SheetNames, Strings: strs, Styles: styles, - keys: keys, - files: zip.files }; + if(opts.bookFiles) { + out.keys = keys, + out.files = zip.files + } + return out; } function readSync(data, options) { var zip, d = data; @@ -2850,7 +2877,7 @@ function sheet_to_row_object_array(sheet, opts){ if(typeof val.w !== 'undefined' && !opts.raw) { row[hdr[C]] = val.w; isempty = false; } else switch(val.t){ case 's': case 'str': case 'b': case 'n': - if(val.v !== undefined) { + if(typeof val.v !== 'undefined') { row[hdr[C]] = val.v; isempty = false; } @@ -2881,6 +2908,7 @@ function sheet_to_csv(sheet, opts) { if(!sheet || !sheet["!ref"]) return out; var r = XLSX.utils.decode_range(sheet["!ref"]); var fs = opts.FS||",", rs = opts.RS||"\n"; + for(var R = r.s.r; R <= r.e.r; ++R) { var row = []; for(var C = r.s.c; C <= r.e.c; ++C) { @@ -2903,8 +2931,8 @@ function get_formulae(ws) { var x = ws[y]; var val = ""; if(x.f) val = x.f; + else if(typeof x.w !== 'undefined') val = "'" + x.w; else if(typeof x.v === 'undefined') continue; - else if(typeof x.v === 'number') val = x.v; else val = x.v; cmds.push(y + "=" + val); }