js-xlsx-rails 0.3.6 → 0.5.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/js-xlsx-rails/version.rb +1 -1
- data/vendor/assets/javascripts/xlsx.js +2288 -556
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66379200976256434030eaaeb88355646d0de3b7
|
4
|
+
data.tar.gz: 08dc7533fb309907a1dbde5da940e2de6576fdc5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb6cefae64cb7a569e8d4b74e92b1bec0a7c26a178a3b9196c37253acad6ad4bd0e87aaccdf9e06cc71075fc77cefb436741a290f600f2ec4bd251b7a896917d
|
7
|
+
data.tar.gz: 9b7cde709b414eb1d3db65b34740494d96c2504bd7e54acb5c5ea71a848218f6f328f8150941751339de9d9b822f76cb799a09eaa848ddad654ed49ded8fd4eb
|
@@ -1,15 +1,15 @@
|
|
1
|
-
/* xlsx.js (C) 2013 SheetJS -- http://sheetjs.com */
|
1
|
+
/* xlsx.js (C) 2013-2014 SheetJS -- http://sheetjs.com */
|
2
2
|
/* vim: set ts=2: */
|
3
3
|
/*jshint eqnull:true */
|
4
4
|
/* Spreadsheet Format -- jump to XLSX for the XLSX code */
|
5
|
-
/* ssf.js (C) 2013 SheetJS -- http://sheetjs.com */
|
5
|
+
/* ssf.js (C) 2013-2014 SheetJS -- http://sheetjs.com */
|
6
6
|
var SSF = {};
|
7
7
|
var make_ssf = function(SSF){
|
8
|
-
|
9
|
-
var _strrev = function(x) { return String(x).reverse(); };
|
8
|
+
var _strrev = function(x) { return String(x).split("").reverse().join("");};
|
10
9
|
function fill(c,l) { return new Array(l+1).join(c); }
|
11
10
|
function pad(v,d,c){var t=String(v);return t.length>=d?t:(fill(c||0,d-t.length)+t);}
|
12
11
|
function rpad(v,d,c){var t=String(v);return t.length>=d?t:(t+fill(c||0,d-t.length));}
|
12
|
+
SSF.version = '0.5.8';
|
13
13
|
/* Options */
|
14
14
|
var opts_fmt = {};
|
15
15
|
function fixopts(o){for(var y in opts_fmt) if(o[y]===undefined) o[y]=opts_fmt[y];}
|
@@ -18,6 +18,7 @@ opts_fmt.date1904 = 0;
|
|
18
18
|
opts_fmt.output = "";
|
19
19
|
opts_fmt.mode = "";
|
20
20
|
var table_fmt = {
|
21
|
+
0: 'General',
|
21
22
|
1: '0',
|
22
23
|
2: '0.00',
|
23
24
|
3: '#,##0',
|
@@ -44,7 +45,9 @@ var table_fmt = {
|
|
44
45
|
46: '[h]:mm:ss',
|
45
46
|
47: 'mmss.0',
|
46
47
|
48: '##0.0E+0',
|
47
|
-
49: '@'
|
48
|
+
49: '@',
|
49
|
+
56: '"上午/下午 "hh"時"mm"分"ss"秒 "',
|
50
|
+
65535: 'General'
|
48
51
|
};
|
49
52
|
var days = [
|
50
53
|
['Sun', 'Sunday'],
|
@@ -74,12 +77,12 @@ var frac = function frac(x, D, mixed) {
|
|
74
77
|
var B = x * sgn;
|
75
78
|
var P_2 = 0, P_1 = 1, P = 0;
|
76
79
|
var Q_2 = 1, Q_1 = 0, Q = 0;
|
77
|
-
var A = B
|
80
|
+
var A = Math.floor(B);
|
78
81
|
while(Q_1 < D) {
|
79
|
-
A = B
|
82
|
+
A = Math.floor(B);
|
80
83
|
P = A * P_1 + P_2;
|
81
84
|
Q = A * Q_1 + Q_2;
|
82
|
-
if((B - A) < 0.
|
85
|
+
if((B - A) < 0.0000000005) break;
|
83
86
|
B = 1 / (B - A);
|
84
87
|
P_2 = P_1; P_1 = P;
|
85
88
|
Q_2 = Q_1; Q_1 = Q;
|
@@ -87,6 +90,7 @@ var frac = function frac(x, D, mixed) {
|
|
87
90
|
if(Q > D) { Q = Q_1; P = P_1; }
|
88
91
|
if(Q > D) { Q = Q_2; P = P_2; }
|
89
92
|
if(!mixed) return [0, sgn * P, Q];
|
93
|
+
if(Q===0) throw "Unexpected state: "+P+" "+P_1+" "+P_2+" "+Q+" "+Q_1+" "+Q_2;
|
90
94
|
var q = Math.floor(sgn * P/Q);
|
91
95
|
return [q, sgn*P - q*Q, Q];
|
92
96
|
};
|
@@ -100,25 +104,26 @@ var general_fmt = function(v) {
|
|
100
104
|
else if(V >= 0.0001 && V < 0.001) o = v.toPrecision(6);
|
101
105
|
else if(V >= Math.pow(10,10) && V < Math.pow(10,11)) o = v.toFixed(10).substr(0,12);
|
102
106
|
else if(V > Math.pow(10,-9) && V < Math.pow(10,11)) {
|
103
|
-
o = v.toFixed(12).replace(/(\.[0-9]*[1-9])0*$/,"$1").replace(/\.$/,"");
|
107
|
+
o = v.toFixed(12).replace(/(\.[0-9]*[1-9])0*$/,"$1").replace(/\.$/,"");
|
104
108
|
if(o.length > 11+(v<0?1:0)) o = v.toPrecision(10);
|
105
109
|
if(o.length > 11+(v<0?1:0)) o = v.toExponential(5);
|
106
|
-
}
|
110
|
+
}
|
107
111
|
else {
|
108
112
|
o = v.toFixed(11).replace(/(\.[0-9]*[1-9])0*$/,"$1");
|
109
|
-
if(o.length > 11 + (v<0?1:0)) o = v.toPrecision(6);
|
113
|
+
if(o.length > 11 + (v<0?1:0)) o = v.toPrecision(6);
|
110
114
|
}
|
111
115
|
o = o.replace(/(\.[0-9]*[1-9])0+e/,"$1e").replace(/\.0*e/,"e");
|
112
116
|
return o.replace("e","E").replace(/\.0*$/,"").replace(/\.([0-9]*[^0])0*$/,".$1").replace(/(E[+-])([0-9])$/,"$1"+"0"+"$2");
|
113
117
|
}
|
114
118
|
if(typeof v === 'string') return v;
|
115
|
-
throw "unsupported value in General format: " + v;
|
119
|
+
throw new Error("unsupported value in General format: " + v);
|
116
120
|
};
|
117
121
|
SSF._general = general_fmt;
|
118
122
|
var parse_date_code = function parse_date_code(v,opts) {
|
119
|
-
var date = Math.floor(v), time = Math.
|
123
|
+
var date = Math.floor(v), time = Math.floor(86400 * (v - date)+1e-6), dow=0;
|
120
124
|
var dout=[], out={D:date, T:time, u:86400*(v-date)-time}; fixopts(opts = (opts||{}));
|
121
125
|
if(opts.date1904) date += 1462;
|
126
|
+
if(date > 2958465) return null;
|
122
127
|
if(date === 60) {dout = [1900,2,29]; dow=3;}
|
123
128
|
else if(date === 0) {dout = [1900,1,0]; dow=6;}
|
124
129
|
else {
|
@@ -128,7 +133,7 @@ var parse_date_code = function parse_date_code(v,opts) {
|
|
128
133
|
d.setDate(d.getDate() + date - 1);
|
129
134
|
dout = [d.getFullYear(), d.getMonth()+1,d.getDate()];
|
130
135
|
dow = d.getDay();
|
131
|
-
if(opts.mode === 'excel' && date < 60) dow = (dow + 6) % 7;
|
136
|
+
if(/* opts.mode === 'excel' && */ date < 60) dow = (dow + 6) % 7;
|
132
137
|
}
|
133
138
|
out.y = dout[0]; out.m = dout[1]; out.d = dout[2];
|
134
139
|
out.S = time % 60; time = Math.floor(time / 60);
|
@@ -138,61 +143,63 @@ var parse_date_code = function parse_date_code(v,opts) {
|
|
138
143
|
return out;
|
139
144
|
};
|
140
145
|
SSF.parse_date_code = parse_date_code;
|
146
|
+
/*jshint -W086 */
|
141
147
|
var write_date = function(type, fmt, val) {
|
142
148
|
if(val < 0) return "";
|
149
|
+
var o;
|
143
150
|
switch(type) {
|
144
151
|
case 'y': switch(fmt) { /* year */
|
145
152
|
case 'y': case 'yy': return pad(val.y % 100,2);
|
146
|
-
default: return val.y;
|
147
|
-
}
|
153
|
+
default: return pad(val.y % 10000,4);
|
154
|
+
}
|
148
155
|
case 'm': switch(fmt) { /* month */
|
149
156
|
case 'm': return val.m;
|
150
157
|
case 'mm': return pad(val.m,2);
|
151
158
|
case 'mmm': return months[val.m-1][1];
|
152
|
-
case 'mmmm': return months[val.m-1][2];
|
153
159
|
case 'mmmmm': return months[val.m-1][0];
|
154
|
-
default:
|
155
|
-
}
|
160
|
+
default: return months[val.m-1][2];
|
161
|
+
}
|
156
162
|
case 'd': switch(fmt) { /* day */
|
157
163
|
case 'd': return val.d;
|
158
164
|
case 'dd': return pad(val.d,2);
|
159
165
|
case 'ddd': return days[val.q][0];
|
160
|
-
|
161
|
-
|
162
|
-
} break;
|
166
|
+
default: return days[val.q][1];
|
167
|
+
}
|
163
168
|
case 'h': switch(fmt) { /* 12-hour */
|
164
169
|
case 'h': return 1+(val.H+11)%12;
|
165
170
|
case 'hh': return pad(1+(val.H+11)%12, 2);
|
166
171
|
default: throw 'bad hour format: ' + fmt;
|
167
|
-
}
|
172
|
+
}
|
168
173
|
case 'H': switch(fmt) { /* 24-hour */
|
169
174
|
case 'h': return val.H;
|
170
175
|
case 'hh': return pad(val.H, 2);
|
171
176
|
default: throw 'bad hour format: ' + fmt;
|
172
|
-
}
|
177
|
+
}
|
173
178
|
case 'M': switch(fmt) { /* minutes */
|
174
179
|
case 'm': return val.M;
|
175
180
|
case 'mm': return pad(val.M, 2);
|
176
181
|
default: throw 'bad minute format: ' + fmt;
|
177
|
-
}
|
182
|
+
}
|
178
183
|
case 's': switch(fmt) { /* seconds */
|
179
|
-
case 's': return val.S;
|
180
|
-
case 'ss': return pad(val.S, 2);
|
181
|
-
case 'ss.0':
|
184
|
+
case 's': return Math.round(val.S+val.u);
|
185
|
+
case 'ss': return pad(Math.round(val.S+val.u), 2);
|
186
|
+
case 'ss.0': o = pad(Math.round(10*(val.S+val.u)),3); return o.substr(0,2)+"." + o.substr(2);
|
187
|
+
case 'ss.00': o = pad(Math.round(100*(val.S+val.u)),4); return o.substr(0,2)+"." + o.substr(2);
|
188
|
+
case 'ss.000': o = pad(Math.round(1000*(val.S+val.u)),5); return o.substr(0,2)+"." + o.substr(2);
|
182
189
|
default: throw 'bad second format: ' + fmt;
|
183
|
-
}
|
190
|
+
}
|
184
191
|
case 'Z': switch(fmt) {
|
185
|
-
case '[h]':
|
192
|
+
case '[h]': case '[hh]': o = val.D*24+val.H; break;
|
193
|
+
case '[m]': case '[mm]': o = (val.D*24+val.H)*60+val.M; break;
|
194
|
+
case '[s]': case '[ss]': o = ((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u); break;
|
186
195
|
default: throw 'bad abstime format: ' + fmt;
|
187
|
-
}
|
196
|
+
} return fmt.length === 3 ? o : pad(o, 2);
|
188
197
|
/* TODO: handle the ECMA spec format ee -> yy */
|
189
198
|
case 'e': { return val.y; } break;
|
190
|
-
case 'A': return (val.h>=12 ? 'P' : 'A') + fmt.substr(1);
|
191
|
-
default: throw 'bad format type ' + type + ' in ' + fmt;
|
192
199
|
}
|
193
200
|
};
|
194
|
-
|
195
|
-
var commaify = function(s) { return s
|
201
|
+
/*jshint +W086 */
|
202
|
+
var commaify = function(s) { return _strrev(_strrev(s).replace(/.../g,"$&,")).replace(/^,/,""); };
|
196
203
|
var write_num = function(type, fmt, val) {
|
197
204
|
if(type === '(') {
|
198
205
|
var ffmt = fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");
|
@@ -204,37 +211,60 @@ var write_num = function(type, fmt, val) {
|
|
204
211
|
if(mul !== 0) return write_num(type, fmt, val * Math.pow(10,2*mul)) + fill("%",mul);
|
205
212
|
if(fmt.indexOf("E") > -1) {
|
206
213
|
var idx = fmt.indexOf("E") - fmt.indexOf(".") - 1;
|
207
|
-
if(fmt
|
208
|
-
|
209
|
-
|
214
|
+
if(fmt.match(/^#+0.0E\+0$/)) {
|
215
|
+
var period = fmt.indexOf("."); if(period === -1) period=fmt.indexOf('E');
|
216
|
+
var ee = (Number(val.toExponential(0).substr(2+(val<0))))%period;
|
217
|
+
if(ee < 0) ee += period;
|
218
|
+
o = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);
|
219
|
+
if(!o.match(/[Ee]/)) {
|
220
|
+
var fakee = (Number(val.toExponential(0).substr(2+(val<0))));
|
221
|
+
if(o.indexOf(".") === -1) o = o[0] + "." + o.substr(1) + "E+" + (fakee - o.length+ee);
|
222
|
+
else o += "E+" + (fakee - ee);
|
223
|
+
while(o.substr(0,2) === "0.") {
|
224
|
+
o = o[0] + o.substr(2,period) + "." + o.substr(2+period);
|
225
|
+
o = o.replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.");
|
226
|
+
}
|
227
|
+
o = o.replace(/\+-/,"-");
|
228
|
+
}
|
229
|
+
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"; });
|
210
230
|
} else o = val.toExponential(idx);
|
211
231
|
if(fmt.match(/E\+00$/) && o.match(/e[+-][0-9]$/)) o = o.substr(0,o.length-1) + "0" + o[o.length-1];
|
212
232
|
if(fmt.match(/E\-/) && o.match(/e\+/)) o = o.replace(/e\+/,"e");
|
213
233
|
return o.replace("e","E");
|
214
234
|
}
|
215
|
-
|
216
|
-
var r, ff, aval = val < 0 ? -val : val, sign = val < 0 ? "-" : "";
|
217
|
-
if((r = fmt.match(/# (\?+) \/ (\d+)/))) {
|
218
|
-
var den = Number(r[
|
235
|
+
if(fmt[0] === "$") return "$"+write_num(type,fmt.substr(fmt[1]==' '?2:1),val);
|
236
|
+
var r, rr, ff, aval = val < 0 ? -val : val, sign = val < 0 ? "-" : "";
|
237
|
+
if((r = fmt.match(/# (\?+)([ ]?)\/([ ]?)(\d+)/))) {
|
238
|
+
var den = Number(r[4]), rnd = Math.round(aval * den), base = Math.floor(rnd/den);
|
219
239
|
var myn = (rnd - base*den), myd = den;
|
220
|
-
return sign + (base?base:"") + " " + (myn === 0 ? fill(" ", r[1].length + 1 + r[
|
240
|
+
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));
|
241
|
+
}
|
242
|
+
if(fmt.match(/^#+0+$/)) fmt = fmt.replace(/#/g,"");
|
243
|
+
if(fmt.match(/^00+$/)) return (val<0?"-":"")+pad(Math.round(aval),fmt.length);
|
244
|
+
if(fmt.match(/^[#?]+$/)) return String(Math.round(val)).replace(/^0$/,"");
|
245
|
+
if((r = fmt.match(/^#*0+\.(0+)/))) {
|
246
|
+
o = Math.round(val * Math.pow(10,r[1].length));
|
247
|
+
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); });
|
248
|
+
}
|
249
|
+
if((r = fmt.match(/^(0*)\.(#*)$/))) {
|
250
|
+
o = Math.round(val*Math.pow(10,r[2].length));
|
251
|
+
return String(o * Math.pow(10,-r[2].length)).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^([-]?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".");
|
252
|
+
}
|
253
|
+
if((r = fmt.match(/^#,##0([.]?)$/))) return sign + commaify(String(Math.round(aval)));
|
254
|
+
if((r = fmt.match(/^#,##0\.([#0]*0)$/))) {
|
255
|
+
rr = Math.round((val-Math.floor(val))*Math.pow(10,r[1].length));
|
256
|
+
return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + pad(rr,r[1].length,0);
|
257
|
+
}
|
258
|
+
if((r = fmt.match(/^# ([?]+)([ ]?)\/([ ]?)([?]+)/))) {
|
259
|
+
rr = Math.min(Math.max(r[1].length, r[4].length),7);
|
260
|
+
ff = frac(aval, Math.pow(10,rr)-1, true);
|
261
|
+
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));
|
221
262
|
}
|
222
|
-
if(fmt.match(/^00*$/)) return (val<0?"-":"")+pad(Math.round(Math.abs(val)), fmt.length);
|
223
|
-
if(fmt.match(/^####*$/)) return "dafuq";
|
224
263
|
switch(fmt) {
|
225
|
-
case "0": return Math.round(val);
|
226
|
-
case "
|
227
|
-
return String(o/
|
228
|
-
case "
|
229
|
-
return String(o/100).replace(/^([^\.]+)$/,"$1.00").replace(/\.$/,".00").replace(/\.([0-9])$/,".$1"+"0");
|
230
|
-
case "0.000": o = Math.round(val*1000);
|
231
|
-
return String(o/1000).replace(/^([^\.]+)$/,"$1.000").replace(/\.$/,".000").replace(/\.([0-9])$/,".$1"+"00").replace(/\.([0-9][0-9])$/,".$1"+"0");
|
232
|
-
case "#,##0": return sign + commaify(String(Math.round(aval)));
|
233
|
-
case "#,##0.0": r = Math.round((val-Math.floor(val))*10); return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + r;
|
234
|
-
case "#,##0.00": r = Math.round((val-Math.floor(val))*100); return val < 0 ? "-" + write_num(type, fmt, -val) : commaify(String(Math.floor(val))) + "." + (r < 10 ? "0"+r:r);
|
235
|
-
case "# ? / ?": ff = frac(aval, 9, true); return sign + (ff[0]||"") + " " + (ff[1] === 0 ? " " : ff[1] + "/" + ff[2]);
|
236
|
-
case "# ?? / ??": ff = frac(aval, 99, true); return sign + (ff[0]||"") + " " + (ff[1] ? pad(ff[1],2," ") + "/" + rpad(ff[2],2," ") : " ");
|
237
|
-
case "# ??? / ???": ff = frac(aval, 999, true); return sign + (ff[0]||"") + " " + (ff[1] ? pad(ff[1],3," ") + "/" + rpad(ff[2],3," ") : " ");
|
264
|
+
case "0": case "#0": return Math.round(val);
|
265
|
+
case "#.##": o = Math.round(val*100);
|
266
|
+
return String(o/100).replace(/^([^\.]+)$/,"$1.").replace(/^0\.$/,".");
|
267
|
+
case "#,###": var x = commaify(String(Math.round(aval))); return x !== "0" ? sign + x : "";
|
238
268
|
default:
|
239
269
|
}
|
240
270
|
throw new Error("unsupported format |" + fmt + "|");
|
@@ -251,7 +281,7 @@ function split_fmt(fmt) {
|
|
251
281
|
j = i+1;
|
252
282
|
}
|
253
283
|
out.push(fmt.slice(j));
|
254
|
-
if(in_str !=-1) throw "Format |" + fmt + "| unterminated string at " + in_str;
|
284
|
+
if(in_str !=-1) throw new Error("Format |" + fmt + "| unterminated string at " + in_str);
|
255
285
|
return out;
|
256
286
|
}
|
257
287
|
SSF._split = split_fmt;
|
@@ -262,6 +292,10 @@ function eval_fmt(fmt, v, opts, flen) {
|
|
262
292
|
/* Tokenize */
|
263
293
|
while(i < fmt.length) {
|
264
294
|
switch((c = fmt[i])) {
|
295
|
+
case 'G': /* General */
|
296
|
+
if(fmt.substr(i, i+6).toLowerCase() !== "general")
|
297
|
+
throw new Error('unrecognized character ' + fmt[i] + ' in ' +fmt);
|
298
|
+
out.push({t:'G',v:'General'}); i+=7; break;
|
265
299
|
case '"': /* Literal text */
|
266
300
|
for(o="";fmt[++i] !== '"' && i < fmt.length;) o += fmt[i];
|
267
301
|
out.push({t:'t', v:o}); ++i; break;
|
@@ -271,28 +305,39 @@ function eval_fmt(fmt, v, opts, flen) {
|
|
271
305
|
case '@': /* Text Placeholder */
|
272
306
|
out.push({t:'T', v:v}); ++i; break;
|
273
307
|
/* Dates */
|
308
|
+
case 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':
|
309
|
+
c = c.toLowerCase();
|
310
|
+
/* falls through */
|
274
311
|
case 'm': case 'd': case 'y': case 'h': case 's': case 'e':
|
275
312
|
if(v < 0) return "";
|
276
313
|
if(!dt) dt = parse_date_code(v, opts);
|
277
|
-
|
314
|
+
if(!dt) return "";
|
315
|
+
o = fmt[i]; while((fmt[++i]||"").toLowerCase() === c) o+=c;
|
278
316
|
if(c === 's' && fmt[i] === '.' && fmt[i+1] === '0') { o+='.'; while(fmt[++i] === '0') o+= '0'; }
|
279
317
|
if(c === 'm' && lst.toLowerCase() === 'h') c = 'M'; /* m = minute */
|
280
318
|
if(c === 'h') c = hr;
|
319
|
+
o = o.toLowerCase();
|
281
320
|
q={t:c, v:o}; out.push(q); lst = c; break;
|
282
321
|
case 'A':
|
283
322
|
if(!dt) dt = parse_date_code(v, opts);
|
323
|
+
if(!dt) return "";
|
284
324
|
q={t:c,v:"A"};
|
285
325
|
if(fmt.substr(i, 3) === "A/P") {q.v = dt.H >= 12 ? "P" : "A"; q.t = 'T'; hr='h';i+=3;}
|
286
326
|
else if(fmt.substr(i,5) === "AM/PM") { q.v = dt.H >= 12 ? "PM" : "AM"; q.t = 'T'; i+=5; hr='h'; }
|
287
|
-
else q.t = "t";
|
327
|
+
else { q.t = "t"; i++; }
|
288
328
|
out.push(q); lst = c; break;
|
289
329
|
case '[': /* TODO: Fix this -- ignore all conditionals and formatting */
|
290
330
|
o = c;
|
291
|
-
while(fmt[i++] !== ']') o += fmt[i];
|
292
|
-
if(o
|
331
|
+
while(fmt[i++] !== ']' && i < fmt.length) o += fmt[i];
|
332
|
+
if(o.substr(-1) !== ']') throw 'unterminated "[" block: |' + o + '|';
|
333
|
+
if(o.match(/\[[HhMmSs]*\]/)) {
|
334
|
+
if(!dt) dt = parse_date_code(v, opts);
|
335
|
+
if(!dt) return "";
|
336
|
+
out.push({t:'Z', v:o.toLowerCase()});
|
337
|
+
} else { o=""; }
|
293
338
|
break;
|
294
339
|
/* Numbers */
|
295
|
-
case '0': case '#':
|
340
|
+
case '0': case '#': case '.':
|
296
341
|
o = c; while("0#?.,E+-%".indexOf(c=fmt[++i]) > -1) o += c;
|
297
342
|
out.push({t:'n', v:o}); break;
|
298
343
|
case '?':
|
@@ -305,7 +350,7 @@ function eval_fmt(fmt, v, opts, flen) {
|
|
305
350
|
out.push({t:'D', v:o}); break;
|
306
351
|
case ' ': out.push({t:c,v:c}); ++i; break;
|
307
352
|
default:
|
308
|
-
if("
|
353
|
+
if(",$-+/():!^&'~{}<>=€".indexOf(c) === -1)
|
309
354
|
throw 'unrecognized character ' + fmt[i] + ' in ' + fmt;
|
310
355
|
out.push({t:'t', v:c}); ++i; break;
|
311
356
|
}
|
@@ -323,45 +368,48 @@ function eval_fmt(fmt, v, opts, flen) {
|
|
323
368
|
/* replace fields */
|
324
369
|
for(i=0; i < out.length; ++i) {
|
325
370
|
switch(out[i].t) {
|
326
|
-
case 't': case 'T': case ' ': break;
|
327
|
-
case 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case '
|
371
|
+
case 't': case 'T': case ' ': case 'D': break;
|
372
|
+
case 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case 'e': case 'Z':
|
328
373
|
out[i].v = write_date(out[i].t, out[i].v, dt);
|
329
374
|
out[i].t = 't'; break;
|
330
|
-
case 'n': case '(':
|
375
|
+
case 'n': case '(': case '?':
|
331
376
|
var jj = i+1;
|
332
|
-
while(out[jj] && ("?
|
333
|
-
|
377
|
+
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 == '?')))) {
|
378
|
+
out[i].v += out[jj].v;
|
334
379
|
delete out[jj]; ++jj;
|
335
380
|
}
|
336
|
-
out[i].v = write_num(out[i].t, out[i].v, v);
|
381
|
+
out[i].v = write_num(out[i].t, out[i].v, (flen >1 && v < 0 && i>0 && out[i-1].v == "-" ? -v:v));
|
337
382
|
out[i].t = 't';
|
338
|
-
i = jj; break;
|
339
|
-
|
383
|
+
i = jj-1; break;
|
384
|
+
case 'G': out[i].t = 't'; out[i].v = general_fmt(v,opts); break;
|
340
385
|
}
|
341
386
|
}
|
342
|
-
|
343
387
|
return out.map(function(x){return x.v;}).join("");
|
344
388
|
}
|
345
389
|
SSF._eval = eval_fmt;
|
346
390
|
function choose_fmt(fmt, v, o) {
|
347
|
-
if(typeof fmt === 'number') fmt = table_fmt[fmt];
|
391
|
+
if(typeof fmt === 'number') fmt = ((o&&o.table) ? o.table : table_fmt)[fmt];
|
348
392
|
if(typeof fmt === "string") fmt = split_fmt(fmt);
|
349
393
|
var l = fmt.length;
|
394
|
+
if(l<4 && fmt[l-1].indexOf("@")>-1) --l;
|
350
395
|
switch(fmt.length) {
|
351
|
-
case 1: fmt = [fmt[0], fmt[0], fmt[0], "@"]; break;
|
352
|
-
case 2: fmt = [fmt[0], fmt[fmt[1]
|
396
|
+
case 1: fmt = fmt[0].indexOf("@")>-1 ? ["General", "General", "General", fmt[0]] : [fmt[0], fmt[0], fmt[0], "@"]; break;
|
397
|
+
case 2: fmt = fmt[1].indexOf("@")>-1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], "@"]; break;
|
398
|
+
case 3: fmt = fmt[2].indexOf("@")>-1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], "@"]; break;
|
353
399
|
case 4: break;
|
354
400
|
default: throw "cannot find right format for |" + fmt + "|";
|
355
401
|
}
|
356
402
|
if(typeof v !== "number") return [fmt.length, fmt[3]];
|
357
403
|
return [l, v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2]];
|
358
404
|
}
|
359
|
-
|
360
405
|
var format = function format(fmt,v,o) {
|
361
406
|
fixopts(o = (o||{}));
|
362
|
-
if(fmt ===
|
363
|
-
if(typeof fmt === 'number') fmt = table_fmt[fmt];
|
407
|
+
if(typeof fmt === "string" && fmt.toLowerCase() === "general") return general_fmt(v, o);
|
408
|
+
if(typeof fmt === 'number') fmt = (o.table || table_fmt)[fmt];
|
364
409
|
var f = choose_fmt(fmt, v, o);
|
410
|
+
if(f[1].toLowerCase() === "general") return general_fmt(v,o);
|
411
|
+
if(v === true) v = "TRUE"; if(v === false) v = "FALSE";
|
412
|
+
if(v === "" || typeof v === "undefined") return "";
|
365
413
|
return eval_fmt(f[1], v, o, f[0]);
|
366
414
|
};
|
367
415
|
|
@@ -369,19 +417,75 @@ SSF._choose = choose_fmt;
|
|
369
417
|
SSF._table = table_fmt;
|
370
418
|
SSF.load = function(fmt, idx) { table_fmt[idx] = fmt; };
|
371
419
|
SSF.format = format;
|
420
|
+
SSF.get_table = function() { return table_fmt; };
|
421
|
+
SSF.load_table = function(tbl) { for(var i=0; i!=0x0188; ++i) if(tbl[i]) SSF.load(tbl[i], i); };
|
372
422
|
};
|
373
423
|
make_ssf(SSF);
|
374
424
|
var XLSX = {};
|
375
425
|
(function(XLSX){
|
426
|
+
XLSX.version = '0.5.10-b';
|
427
|
+
var current_codepage, current_cptable, cptable;
|
428
|
+
if(typeof module !== "undefined" && typeof require !== 'undefined') {
|
429
|
+
if(typeof cptable === 'undefined') cptable = require('codepage');
|
430
|
+
current_codepage = 1252; current_cptable = cptable[1252];
|
431
|
+
}
|
432
|
+
function reset_cp() {
|
433
|
+
current_codepage = 1252; if(typeof cptable !== 'undefined') current_cptable = cptable[1252];
|
434
|
+
}
|
435
|
+
function _getchar(x) { return String.fromCharCode(x); }
|
436
|
+
|
437
|
+
function getdata(data) {
|
438
|
+
if(!data) return null;
|
439
|
+
if(data.data) return data.name.substr(-4) !== ".bin" ? data.data : data.data.split("").map(function(x) { return x.charCodeAt(0); });
|
440
|
+
if(data.asNodeBuffer && typeof Buffer !== 'undefined' && data.name.substr(-4)===".bin") return data.asNodeBuffer();
|
441
|
+
if(data.asBinary && data.name.substr(-4) !== ".bin") return data.asBinary();
|
442
|
+
if(data._data && data._data.getContent) {
|
443
|
+
/* TODO: something far more intelligent */
|
444
|
+
if(data.name.substr(-4) === ".bin") return Array.prototype.slice.call(data._data.getContent());
|
445
|
+
return Array.prototype.slice.call(data._data.getContent(),0).map(function(x) { return String.fromCharCode(x); }).join("");
|
446
|
+
}
|
447
|
+
return null;
|
448
|
+
}
|
449
|
+
|
450
|
+
function getzipfile(zip, file) {
|
451
|
+
var f = file; if(zip.files[f]) return zip.files[f];
|
452
|
+
f = file.toLowerCase(); if(zip.files[f]) return zip.files[f];
|
453
|
+
f = f.replace(/\//g,'\\'); if(zip.files[f]) return zip.files[f];
|
454
|
+
throw new Error("Cannot find file " + file + " in zip");
|
455
|
+
}
|
456
|
+
|
457
|
+
function getzipdata(zip, file, safe) {
|
458
|
+
if(!safe) return getdata(getzipfile(zip, file));
|
459
|
+
if(!file) return null;
|
460
|
+
try { return getzipdata(zip, file); } catch(e) { return null; }
|
461
|
+
}
|
462
|
+
|
463
|
+
var _fs, jszip;
|
464
|
+
if(typeof JSZip !== 'undefined') jszip = JSZip;
|
465
|
+
if (typeof exports !== 'undefined') {
|
466
|
+
if (typeof module !== 'undefined' && module.exports) {
|
467
|
+
if(typeof Buffer !== 'undefined' && typeof jszip === 'undefined') jszip = require('jszip');
|
468
|
+
if(typeof jszip === 'undefined') jszip = require('./jszip').JSZip;
|
469
|
+
_fs = require('fs');
|
470
|
+
}
|
471
|
+
}
|
472
|
+
var attregexg=/(\w+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;
|
473
|
+
var attregex=/(\w+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;
|
376
474
|
function parsexmltag(tag) {
|
377
475
|
var words = tag.split(/\s+/);
|
378
476
|
var z = {'0': words[0]};
|
379
477
|
if(words.length === 1) return z;
|
380
|
-
(tag.match(
|
381
|
-
function(x){var y=x.match(
|
478
|
+
(tag.match(attregexg) || []).map(
|
479
|
+
function(x){var y=x.match(attregex); z[y[1].replace(/^[a-zA-Z]*:/,"")] = y[2].substr(1,y[2].length-2); });
|
382
480
|
return z;
|
383
481
|
}
|
384
482
|
|
483
|
+
function evert(obj) {
|
484
|
+
var o = {};
|
485
|
+
Object.keys(obj).forEach(function(k) { if(obj.hasOwnProperty(k)) o[obj[k]] = k; });
|
486
|
+
return o;
|
487
|
+
}
|
488
|
+
|
385
489
|
var encodings = {
|
386
490
|
'"': '"',
|
387
491
|
''': "'",
|
@@ -389,6 +493,8 @@ var encodings = {
|
|
389
493
|
'<': '<',
|
390
494
|
'&': '&'
|
391
495
|
};
|
496
|
+
var rencoding = evert(encodings);
|
497
|
+
var rencstr = "&<>'\"".split("");
|
392
498
|
|
393
499
|
// TODO: CP remap (need to read file version to determine OS)
|
394
500
|
function unescapexml(text){
|
@@ -396,6 +502,12 @@ function unescapexml(text){
|
|
396
502
|
for(var y in encodings) s = s.replace(new RegExp(y,'g'), encodings[y]);
|
397
503
|
return s.replace(/_x([0-9a-fA-F]*)_/g,function(m,c) {return _chr(parseInt(c,16));});
|
398
504
|
}
|
505
|
+
function escapexml(text){
|
506
|
+
var s = text + '';
|
507
|
+
rencstr.forEach(function(y){s=s.replace(new RegExp(y,'g'), rencoding[y]);});
|
508
|
+
return s;
|
509
|
+
}
|
510
|
+
|
399
511
|
|
400
512
|
function parsexmlbool(value, tag) {
|
401
513
|
switch(value) {
|
@@ -406,20 +518,20 @@ function parsexmlbool(value, tag) {
|
|
406
518
|
}
|
407
519
|
|
408
520
|
var utf8read = function(orig) {
|
409
|
-
var out =
|
521
|
+
var out = [], i = 0, c = 0, c1 = 0, c2 = 0, c3 = 0;
|
410
522
|
while (i < orig.length) {
|
411
523
|
c = orig.charCodeAt(i++);
|
412
|
-
if (c < 128) out
|
524
|
+
if (c < 128) out.push(_chr(c));
|
413
525
|
else {
|
414
526
|
c2 = orig.charCodeAt(i++);
|
415
|
-
if (c>191 && c<224) out
|
527
|
+
if (c>191 && c<224) out.push(_chr((c & 31) << 6 | c2 & 63));
|
416
528
|
else {
|
417
529
|
c3 = orig.charCodeAt(i++);
|
418
|
-
out
|
530
|
+
out.push(_chr((c & 15) << 12 | (c2 & 63) << 6 | c3 & 63));
|
419
531
|
}
|
420
532
|
}
|
421
533
|
}
|
422
|
-
return out;
|
534
|
+
return out.join("");
|
423
535
|
};
|
424
536
|
|
425
537
|
// matches <foo>...</foo> extracts content
|
@@ -439,327 +551,524 @@ function parseVector(data) {
|
|
439
551
|
}
|
440
552
|
|
441
553
|
function isval(x) { return typeof x !== "undefined" && x !== null; }
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
var
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
/* 18.8.36 shadow CT_BooleanProperty */
|
460
|
-
/* ** not required . */
|
461
|
-
case '<shadow': break;
|
462
|
-
|
463
|
-
/* 18.4.1 charset CT_IntProperty TODO */
|
464
|
-
case '<charset': break;
|
465
|
-
|
466
|
-
/* 18.4.2 outline CT_BooleanProperty TODO */
|
467
|
-
case '<outline': break;
|
468
|
-
|
469
|
-
/* 18.4.5 rFont CT_FontName */
|
470
|
-
case '<rFont': font.name = y.val; break;
|
471
|
-
|
472
|
-
/* 18.4.11 sz CT_FontSize */
|
473
|
-
case '<sz': font.sz = y.val; break;
|
474
|
-
|
475
|
-
/* 18.4.10 strike CT_BooleanProperty */
|
476
|
-
case '<strike':
|
477
|
-
if(!y.val) break;
|
478
|
-
/* falls through */
|
479
|
-
case '<strike/>': font.strike = 1; break;
|
480
|
-
case '</strike>': break;
|
481
|
-
|
482
|
-
/* 18.4.13 u CT_UnderlineProperty */
|
483
|
-
case '<u':
|
484
|
-
if(!y.val) break;
|
485
|
-
/* falls through */
|
486
|
-
case '<u/>': font.u = 1; break;
|
487
|
-
case '</u>': break;
|
488
|
-
|
489
|
-
/* 18.8.2 b */
|
490
|
-
case '<b':
|
491
|
-
if(!y.val) break;
|
492
|
-
/* falls through */
|
493
|
-
case '<b/>': font.b = 1; break;
|
494
|
-
case '</b>': break;
|
495
|
-
|
496
|
-
/* 18.8.26 i */
|
497
|
-
case '<i':
|
498
|
-
if(!y.val) break;
|
499
|
-
/* falls through */
|
500
|
-
case '<i/>': font.i = 1; break;
|
501
|
-
case '</i>': break;
|
502
|
-
|
503
|
-
/* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */
|
504
|
-
case '<color':
|
505
|
-
if(y.rgb) font.color = y.rgb.substr(2,6);
|
506
|
-
break;
|
554
|
+
function readIEEE754(buf, idx, isLE, nl, ml) {
|
555
|
+
if(isLE === undefined) isLE = true;
|
556
|
+
if(!nl) nl = 8;
|
557
|
+
if(!ml && nl === 8) ml = 52;
|
558
|
+
var e, m, el = nl * 8 - ml - 1, eMax = (1 << el) - 1, eBias = eMax >> 1;
|
559
|
+
var bits = -7, d = isLE ? -1 : 1, i = isLE ? (nl - 1) : 0, s = buf[idx + i];
|
560
|
+
|
561
|
+
i += d;
|
562
|
+
e = s & ((1 << (-bits)) - 1); s >>>= (-bits); bits += el;
|
563
|
+
for (; bits > 0; e = e * 256 + buf[idx + i], i += d, bits -= 8);
|
564
|
+
m = e & ((1 << (-bits)) - 1); e >>>= (-bits); bits += ml;
|
565
|
+
for (; bits > 0; m = m * 256 + buf[idx + i], i += d, bits -= 8);
|
566
|
+
if (e === eMax) return m ? NaN : ((s ? -1 : 1) * Infinity);
|
567
|
+
else if (e === 0) e = 1 - eBias;
|
568
|
+
else { m = m + Math.pow(2, ml); e = e - eBias; }
|
569
|
+
return (s ? -1 : 1) * m * Math.pow(2, e - ml);
|
570
|
+
}
|
507
571
|
|
508
|
-
|
509
|
-
|
572
|
+
var __toBuffer;
|
573
|
+
if(typeof Buffer !== "undefined") {
|
574
|
+
Buffer.prototype.hexlify= function() { return this.toString('hex'); };
|
575
|
+
__toBuffer = function(bufs) { return Buffer.concat(bufs[0]); };
|
576
|
+
} else {
|
577
|
+
__toBuffer = function(bufs) {
|
578
|
+
var x = [];
|
579
|
+
for(var i = 0; i != bufs[0].length; ++i) { x = x.concat(bufs[0][i]); }
|
580
|
+
return x;
|
581
|
+
};
|
582
|
+
}
|
510
583
|
|
511
|
-
|
512
|
-
|
584
|
+
var __readUInt8 = function(b, idx) { return b.readUInt8 ? b.readUInt8(idx) : b[idx]; };
|
585
|
+
var __readUInt16LE = function(b, idx) { return b.readUInt16LE ? b.readUInt16LE(idx) : b[idx+1]*(1<<8)+b[idx]; };
|
586
|
+
var __readInt16LE = function(b, idx) { var u = __readUInt16LE(b,idx); if(!(u & 0x8000)) return u; return (0xffff - u + 1) * -1; };
|
587
|
+
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]; };
|
588
|
+
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; };
|
589
|
+
var __readDoubleLE = function(b, idx) { return b.readDoubleLE ? b.readDoubleLE(idx) : readIEEE754(b, idx||0);};
|
590
|
+
|
591
|
+
|
592
|
+
function ReadShift(size, t) {
|
593
|
+
var o = "", oo = [], w, vv, i, loc; t = t || 'u';
|
594
|
+
if(size === 'ieee754') { size = 8; t = 'f'; }
|
595
|
+
switch(size) {
|
596
|
+
case 1: o = __readUInt8(this, this.l); break;
|
597
|
+
case 2: o=(t==='u' ? __readUInt16LE : __readInt16LE)(this, this.l); break;
|
598
|
+
case 4: o = __readUInt32LE(this, this.l); break;
|
599
|
+
case 8: if(t === 'f') { o = __readDoubleLE(this, this.l); break; }
|
600
|
+
/* falls through */
|
601
|
+
case 16: o = this.toString('hex', this.l,this.l+size); break;
|
602
|
+
|
603
|
+
/* sbcs and dbcs support continue records in the SST way TODO codepages */
|
604
|
+
/* TODO: DBCS http://msdn.microsoft.com/en-us/library/cc194788.aspx */
|
605
|
+
case 'dbcs': size = 2*t; loc = this.l;
|
606
|
+
for(i = 0; i != t; ++i) {
|
607
|
+
oo.push(_getchar(__readUInt16LE(this, loc)));
|
608
|
+
loc+=2;
|
609
|
+
} o = oo.join(""); break;
|
610
|
+
|
611
|
+
case 'sbcs': size = t; o = ""; loc = this.l;
|
612
|
+
for(i = 0; i != t; ++i) {
|
613
|
+
o += _getchar(__readUInt8(this, loc));
|
614
|
+
loc+=1;
|
615
|
+
} break;
|
616
|
+
}
|
617
|
+
this.l+=size; return o;
|
618
|
+
}
|
513
619
|
|
514
|
-
|
515
|
-
|
620
|
+
function prep_blob(blob, pos) {
|
621
|
+
blob.read_shift = ReadShift.bind(blob);
|
622
|
+
blob.l = pos || 0;
|
623
|
+
var read = ReadShift.bind(blob);
|
624
|
+
return [read];
|
625
|
+
}
|
516
626
|
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
var t = r.match(tregex);
|
534
|
-
if(!isval(t)) return "";
|
535
|
-
terms[1] = t[1];
|
536
|
-
|
537
|
-
var rpr = r.match(rpregex);
|
538
|
-
if(isval(rpr)) parse_rpr(rpr[1], terms[0], terms[2]);
|
539
|
-
return terms[0].join("") + terms[1].replace(/\r\n/g,'<br/>') + terms[2].join("");
|
540
|
-
}
|
541
|
-
return function(rs) {
|
542
|
-
return rs.replace(/<r>/g,"").split(/<\/r>/).map(parse_r).join("");
|
543
|
-
};
|
544
|
-
})();
|
545
|
-
|
546
|
-
/* 18.4.8 si CT_Rst */
|
547
|
-
var parse_si = function(x) {
|
548
|
-
var z = {};
|
549
|
-
if(!x) return z;
|
550
|
-
var y;
|
551
|
-
/* 18.4.12 t ST_Xstring (Plaintext String) */
|
552
|
-
if(x[1] === 't') {
|
553
|
-
z.t = utf8read(unescapexml(x.replace(/<[^>]*>/g,"")));
|
554
|
-
z.raw = x;
|
555
|
-
z.r = z.t;
|
556
|
-
}
|
557
|
-
/* 18.4.4 r CT_RElt (Rich Text Run) */
|
558
|
-
else if((y = x.match(/<r>/))) {
|
559
|
-
z.raw = x;
|
560
|
-
/* TODO: properly parse (note: no other valid child can have body text) */
|
561
|
-
z.t = utf8read(unescapexml(x.replace(/<[^>]*>/gm,"")));
|
562
|
-
z.r = parse_rs(x);
|
563
|
-
}
|
564
|
-
/* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */
|
565
|
-
/* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */
|
566
|
-
return z;
|
567
|
-
};
|
627
|
+
function parsenoop(blob, length) { blob.l += length; }
|
628
|
+
/* [MS-XLSB] 2.1.4 Record */
|
629
|
+
var recordhopper = function(data, cb, opts) {
|
630
|
+
var tmpbyte, cntbyte, length;
|
631
|
+
prep_blob(data, data.l || 0);
|
632
|
+
while(data.l < data.length) {
|
633
|
+
var RT = data.read_shift(1);
|
634
|
+
if(RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F)<<7);
|
635
|
+
var R = RecordEnum[RT] || RecordEnum[0xFFFF];
|
636
|
+
tmpbyte = data.read_shift(1);
|
637
|
+
length = tmpbyte & 0x7F;
|
638
|
+
for(cntbyte = 1; cntbyte <4 && (tmpbyte & 0x80); ++cntbyte) length += ((tmpbyte = data.read_shift(1)) & 0x7F)<<(7*cntbyte);
|
639
|
+
var d = R.f(data, length, opts);
|
640
|
+
if(cb(d, R, RT)) return;
|
641
|
+
}
|
642
|
+
};
|
568
643
|
|
644
|
+
/* [MS-XLSB] 2.5.143 */
|
645
|
+
var parse_StrRun = function(data, length) {
|
646
|
+
return { ich: data.read_shift(2), ifnt: data.read_shift(2) };
|
647
|
+
};
|
569
648
|
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
649
|
+
/* [MS-XLSB] 2.1.7.121 */
|
650
|
+
var parse_RichStr = function(data, length) {
|
651
|
+
var start = data.l;
|
652
|
+
var flags = data.read_shift(1);
|
653
|
+
var fRichStr = flags & 1, fExtStr = flags & 2;
|
654
|
+
var str = parse_XLWideString(data);
|
655
|
+
var rgsStrRun = [];
|
656
|
+
var z = {
|
657
|
+
t: str,
|
658
|
+
r:"<t>" + escapexml(str) + "</t>",
|
659
|
+
h: str
|
579
660
|
};
|
580
|
-
|
661
|
+
if(fRichStr) {
|
662
|
+
/* TODO: formatted string */
|
663
|
+
var dwSizeStrRun = data.read_shift(4);
|
664
|
+
for(var i = 0; i != dwSizeStrRun; ++i) rgsStrRun.push(parse_StrRun(data));
|
665
|
+
}
|
666
|
+
if(fExtStr) {
|
667
|
+
/* TODO: phonetic string */
|
668
|
+
}
|
669
|
+
data.l = start + length;
|
670
|
+
return z;
|
671
|
+
};
|
581
672
|
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
673
|
+
/* [MS-XLSB] 2.5.9 */
|
674
|
+
function parse_Cell(data) {
|
675
|
+
var col = data.read_shift(4);
|
676
|
+
var iStyleRef = data.read_shift(2);
|
677
|
+
iStyleRef += data.read_shift(1) <<16;
|
678
|
+
var fPhShow = data.read_shift(1);
|
679
|
+
return { c:col, iStyleRef: iStyleRef };
|
680
|
+
}
|
681
|
+
|
682
|
+
/* [MS-XLSB] 2.5.21 */
|
683
|
+
var parse_CodeName = function(data, length) { return parse_XLWideString(data, length); };
|
684
|
+
|
685
|
+
/* [MS-XLSB] 2.5.114 */
|
686
|
+
var parse_RelID = function(data, length) { return parse_XLNullableWideString(data, length); };
|
687
|
+
|
688
|
+
/* [MS-XLSB] 2.5.122 */
|
689
|
+
function parse_RkNumber(data) {
|
690
|
+
var b = data.slice(data.l, data.l+4);
|
691
|
+
var fX100 = b[0] & 1, fInt = b[0] & 2;
|
692
|
+
data.l+=4;
|
693
|
+
b[0] &= ~3;
|
694
|
+
var RK = fInt === 0 ? __readDoubleLE([0,0,0,0,b[0],b[1],b[2],b[3]],0) : __readInt32LE(b,0)>>2;
|
695
|
+
return fX100 ? RK/100 : RK;
|
696
|
+
}
|
697
|
+
|
698
|
+
/* [MS-XLSB] 2.5.153 */
|
699
|
+
var parse_UncheckedRfX = function(data) {
|
700
|
+
var cell = {s: {}, e: {}};
|
701
|
+
cell.s.r = data.read_shift(4);
|
702
|
+
cell.e.r = data.read_shift(4);
|
703
|
+
cell.s.c = data.read_shift(4);
|
704
|
+
cell.e.c = data.read_shift(4);
|
705
|
+
return cell;
|
592
706
|
};
|
593
707
|
|
594
|
-
/*
|
595
|
-
var
|
596
|
-
|
597
|
-
|
598
|
-
backupFile: '0',
|
599
|
-
checkCompatibility: '0',
|
600
|
-
codeName: '',
|
601
|
-
date1904: '0',
|
602
|
-
dateCompatibility: '1',
|
603
|
-
//defaultThemeVersion: '0',
|
604
|
-
filterPrivacy: '0',
|
605
|
-
hidePivotFieldList: '0',
|
606
|
-
promptedSolutions: '0',
|
607
|
-
publishItems: '0',
|
608
|
-
refreshAllConnections: false,
|
609
|
-
saveExternalLinkValues: '1',
|
610
|
-
showBorderUnselectedTables: '1',
|
611
|
-
showInkAnnotation: '1',
|
612
|
-
showObjects: 'all',
|
613
|
-
showPivotChartFilter: '0'
|
614
|
-
//updateLinks: 'userSet'
|
708
|
+
/* [MS-XLSB] 2.5.166 */
|
709
|
+
var parse_XLNullableWideString = function(data) {
|
710
|
+
var cchCharacters = data.read_shift(4);
|
711
|
+
return cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? "" : data.read_shift('dbcs', cchCharacters);
|
615
712
|
};
|
616
713
|
|
617
|
-
/*
|
618
|
-
var
|
619
|
-
|
620
|
-
|
621
|
-
firstSheet: '0',
|
622
|
-
minimized: '0',
|
623
|
-
showHorizontalScroll: '1',
|
624
|
-
showSheetTabs: '1',
|
625
|
-
showVerticalScroll: '1',
|
626
|
-
tabRatio: '600',
|
627
|
-
visibility: 'visible'
|
628
|
-
//window{Height,Width}, {x,y}Window
|
714
|
+
/* [MS-XLSB] 2.5.168 */
|
715
|
+
var parse_XLWideString = function(data) {
|
716
|
+
var cchCharacters = data.read_shift(4);
|
717
|
+
return cchCharacters === 0 ? "" : data.read_shift('dbcs', cchCharacters);
|
629
718
|
};
|
630
719
|
|
631
|
-
/*
|
632
|
-
|
633
|
-
|
720
|
+
/* [MS-XLSB] 2.5.171 */
|
721
|
+
function parse_Xnum(data, length) { return data.read_shift('ieee754'); }
|
722
|
+
|
723
|
+
/* [MS-XLSB] 2.5.198.2 */
|
724
|
+
var BErr = {
|
725
|
+
0x00: "#NULL!",
|
726
|
+
0x07: "#DIV/0!",
|
727
|
+
0x0F: "#VALUE!",
|
728
|
+
0x17: "#REF!",
|
729
|
+
0x1D: "#NAME?",
|
730
|
+
0x24: "#NUM!",
|
731
|
+
0x2A: "#N/A",
|
732
|
+
0x2B: "#GETTING_DATA",
|
733
|
+
0xFF: "#WTF?"
|
634
734
|
};
|
735
|
+
var RBErr = evert(BErr);
|
635
736
|
|
636
|
-
/*
|
637
|
-
var
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
737
|
+
/* Parse a list of <r> tags */
|
738
|
+
var parse_rs = (function() {
|
739
|
+
var tregex = matchtag("t"), rpregex = matchtag("rPr");
|
740
|
+
/* 18.4.7 rPr CT_RPrElt */
|
741
|
+
var parse_rpr = function(rpr, intro, outro) {
|
742
|
+
var font = {};
|
743
|
+
(rpr.match(/<[^>]*>/g)||[]).forEach(function(x) {
|
744
|
+
var y = parsexmltag(x);
|
745
|
+
switch(y[0]) {
|
746
|
+
/* 18.8.12 condense CT_BooleanProperty */
|
747
|
+
/* ** not required . */
|
748
|
+
case '<condense': break;
|
749
|
+
/* 18.8.17 extend CT_BooleanProperty */
|
750
|
+
/* ** not required . */
|
751
|
+
case '<extend': break;
|
752
|
+
/* 18.8.36 shadow CT_BooleanProperty */
|
753
|
+
/* ** not required . */
|
754
|
+
case '<shadow':
|
755
|
+
/* falls through */
|
756
|
+
case '<shadow/>': break;
|
757
|
+
|
758
|
+
/* 18.4.1 charset CT_IntProperty TODO */
|
759
|
+
case '<charset': break;
|
760
|
+
|
761
|
+
/* 18.4.2 outline CT_BooleanProperty TODO */
|
762
|
+
case '<outline':
|
763
|
+
/* falls through */
|
764
|
+
case '<outline/>': break;
|
765
|
+
|
766
|
+
/* 18.4.5 rFont CT_FontName */
|
767
|
+
case '<rFont': font.name = y.val; break;
|
768
|
+
|
769
|
+
/* 18.4.11 sz CT_FontSize */
|
770
|
+
case '<sz': font.sz = y.val; break;
|
771
|
+
|
772
|
+
/* 18.4.10 strike CT_BooleanProperty */
|
773
|
+
case '<strike':
|
774
|
+
if(!y.val) break;
|
775
|
+
/* falls through */
|
776
|
+
case '<strike/>': font.strike = 1; break;
|
777
|
+
case '</strike>': break;
|
778
|
+
|
779
|
+
/* 18.4.13 u CT_UnderlineProperty */
|
780
|
+
case '<u':
|
781
|
+
if(!y.val) break;
|
782
|
+
/* falls through */
|
783
|
+
case '<u/>': font.u = 1; break;
|
784
|
+
case '</u>': break;
|
785
|
+
|
786
|
+
/* 18.8.2 b */
|
787
|
+
case '<b':
|
788
|
+
if(!y.val) break;
|
789
|
+
/* falls through */
|
790
|
+
case '<b/>': font.b = 1; break;
|
791
|
+
case '</b>': break;
|
792
|
+
|
793
|
+
/* 18.8.26 i */
|
794
|
+
case '<i':
|
795
|
+
if(!y.val) break;
|
796
|
+
/* falls through */
|
797
|
+
case '<i/>': font.i = 1; break;
|
798
|
+
case '</i>': break;
|
799
|
+
|
800
|
+
/* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */
|
801
|
+
case '<color':
|
802
|
+
if(y.rgb) font.color = y.rgb.substr(2,6);
|
803
|
+
break;
|
804
|
+
|
805
|
+
/* 18.8.18 family ST_FontFamily */
|
806
|
+
case '<family': font.family = y.val; break;
|
807
|
+
|
808
|
+
/* 18.4.14 vertAlign CT_VerticalAlignFontProperty TODO */
|
809
|
+
case '<vertAlign': break;
|
810
|
+
|
811
|
+
/* 18.8.35 scheme CT_FontScheme TODO */
|
812
|
+
case '<scheme': break;
|
813
|
+
|
814
|
+
default:
|
815
|
+
if(y[0][2] !== '/') throw 'Unrecognized rich format ' + y[0];
|
816
|
+
}
|
817
|
+
});
|
818
|
+
/* TODO: These should be generated styles, not inline */
|
819
|
+
var style = [];
|
820
|
+
if(font.b) style.push("font-weight: bold;");
|
821
|
+
if(font.i) style.push("font-style: italic;");
|
822
|
+
intro.push('<span style="' + style.join("") + '">');
|
823
|
+
outro.push("</span>");
|
824
|
+
};
|
825
|
+
|
826
|
+
/* 18.4.4 r CT_RElt */
|
827
|
+
function parse_r(r) {
|
828
|
+
var terms = [[],"",[]];
|
829
|
+
/* 18.4.12 t ST_Xstring */
|
830
|
+
var t = r.match(tregex);
|
831
|
+
if(!isval(t)) return "";
|
832
|
+
terms[1] = t[1];
|
833
|
+
|
834
|
+
var rpr = r.match(rpregex);
|
835
|
+
if(isval(rpr)) parse_rpr(rpr[1], terms[0], terms[2]);
|
836
|
+
return terms[0].join("") + terms[1].replace(/\r\n/g,'<br/>') + terms[2].join("");
|
837
|
+
}
|
838
|
+
return function(rs) {
|
839
|
+
return rs.replace(/<r>/g,"").split(/<\/r>/).map(parse_r).join("");
|
840
|
+
};
|
841
|
+
})();
|
842
|
+
|
843
|
+
/* 18.4.8 si CT_Rst */
|
844
|
+
var parse_si = function(x, opts) {
|
845
|
+
var html = opts ? opts.cellHTML : true;
|
846
|
+
var z = {};
|
847
|
+
if(!x) return null;
|
848
|
+
var y;
|
849
|
+
/* 18.4.12 t ST_Xstring (Plaintext String) */
|
850
|
+
if(x[1] === 't') {
|
851
|
+
z.t = utf8read(unescapexml(x.substr(x.indexOf(">")+1).split(/<\/t>/)[0]));
|
852
|
+
z.r = x;
|
853
|
+
if(html) z.h = z.t;
|
854
|
+
}
|
855
|
+
/* 18.4.4 r CT_RElt (Rich Text Run) */
|
856
|
+
else if((y = x.match(/<r>/))) {
|
857
|
+
z.r = x;
|
858
|
+
/* TODO: properly parse (note: no other valid child can have body text) */
|
859
|
+
z.t = utf8read(unescapexml(x.replace(/<[^>]*>/gm,"")));
|
860
|
+
if(html) z.h = parse_rs(x);
|
861
|
+
}
|
862
|
+
/* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */
|
863
|
+
/* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */
|
864
|
+
return z;
|
648
865
|
};
|
649
866
|
|
650
|
-
/* 18.
|
651
|
-
var
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
showComments: 'commIndicator',
|
661
|
-
showFormulaBar: 'true',
|
662
|
-
showHorizontalScroll: 'true',
|
663
|
-
showObjects: 'all',
|
664
|
-
showSheetTabs: 'true',
|
665
|
-
showStatusbar: 'true',
|
666
|
-
showVerticalScroll: 'true',
|
667
|
-
tabRatio: '600',
|
668
|
-
xWindow: '0',
|
669
|
-
yWindow: '0'
|
867
|
+
/* 18.4 Shared String Table */
|
868
|
+
var parse_sst_xml = function(data, opts) {
|
869
|
+
var s = [];
|
870
|
+
/* 18.4.9 sst CT_Sst */
|
871
|
+
var sst = data.match(new RegExp("<sst([^>]*)>([\\s\\S]*)<\/sst>","m"));
|
872
|
+
if(isval(sst)) {
|
873
|
+
s = sst[2].replace(/<(?:si|sstItem)>/g,"").split(/<\/(?:si|sstItem)>/).map(function(x) { return parse_si(x, opts); }).filter(function(x) { return x; });
|
874
|
+
sst = parsexmltag(sst[1]); s.Count = sst.count; s.Unique = sst.uniqueCount;
|
875
|
+
}
|
876
|
+
return s;
|
670
877
|
};
|
671
878
|
|
672
|
-
|
673
|
-
var
|
879
|
+
/* [MS-XLSB] 2.4.219 BrtBeginSst */
|
880
|
+
var parse_BrtBeginSst = function(data, length) {
|
881
|
+
return [data.read_shift(4), data.read_shift(4)];
|
882
|
+
};
|
674
883
|
|
675
|
-
|
884
|
+
/* [MS-XLSB] 2.1.7.45 Shared Strings */
|
885
|
+
var parse_sst_bin = function(data) {
|
886
|
+
var s = [];
|
887
|
+
recordhopper(data, function(val, R) {
|
888
|
+
switch(R.n) {
|
889
|
+
case 'BrtBeginSst': s.Count = val[0]; s.Unique = val[1]; break;
|
890
|
+
case 'BrtSSTItem': s.push(val); break;
|
891
|
+
case 'BrtEndSst': return true;
|
892
|
+
default: throw new Error("Unexpected record " + R.n);
|
893
|
+
}
|
894
|
+
});
|
895
|
+
return s;
|
896
|
+
};
|
676
897
|
var styles = {}; // shared styles
|
677
|
-
var _ssfopts = {}; // spreadsheet formatting options
|
678
898
|
|
679
|
-
/* 18.
|
680
|
-
function
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
899
|
+
/* 18.8.31 numFmts CT_NumFmts */
|
900
|
+
function parseNumFmts(t) {
|
901
|
+
styles.NumberFmt = [];
|
902
|
+
for(var y in SSF._table) styles.NumberFmt[y] = SSF._table[y];
|
903
|
+
t[0].match(/<[^>]*>/g).forEach(function(x) {
|
904
|
+
var y = parsexmltag(x);
|
905
|
+
switch(y[0]) {
|
906
|
+
case '<numFmts': case '</numFmts>': case '<numFmts/>': break;
|
907
|
+
case '<numFmt': {
|
908
|
+
var f=unescapexml(y.formatCode), i=parseInt(y.numFmtId,10);
|
909
|
+
styles.NumberFmt[i] = f; if(i>0) SSF.load(f,i);
|
910
|
+
} break;
|
911
|
+
default: throw 'unrecognized ' + y[0] + ' in numFmts';
|
912
|
+
}
|
913
|
+
});
|
914
|
+
}
|
688
915
|
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
916
|
+
/* 18.8.10 cellXfs CT_CellXfs */
|
917
|
+
function parseCXfs(t) {
|
918
|
+
styles.CellXf = [];
|
919
|
+
t[0].match(/<[^>]*>/g).forEach(function(x) {
|
920
|
+
var y = parsexmltag(x);
|
921
|
+
switch(y[0]) {
|
922
|
+
case '<cellXfs': case '<cellXfs/>': case '</cellXfs>': break;
|
696
923
|
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
924
|
+
/* 18.8.45 xf CT_Xf */
|
925
|
+
case '<xf': delete y[0];
|
926
|
+
if(y.numFmtId) y.numFmtId = parseInt(y.numFmtId, 10);
|
927
|
+
styles.CellXf.push(y); break;
|
928
|
+
case '</xf>': break;
|
701
929
|
|
702
|
-
|
703
|
-
|
704
|
-
cells.forEach(function(c, idx) { if(c === "" || c.trim() === "") return;
|
705
|
-
var cref = c.match(/r="([^"]*)"/);
|
706
|
-
c = "<c" + c;
|
707
|
-
if(cref && cref.length == 2) {
|
708
|
-
var cref_cell = decode_cell(cref[1]);
|
709
|
-
idx = cref_cell.c;
|
710
|
-
}
|
711
|
-
if(refguess.s.c > idx) refguess.s.c = idx;
|
712
|
-
if(refguess.e.c < idx) refguess.e.c = idx;
|
713
|
-
var cell = parsexmltag((c.match(/<c[^>]*>/)||[c])[0]); delete cell[0];
|
714
|
-
var d = c.substr(c.indexOf('>')+1);
|
715
|
-
var p = {};
|
716
|
-
q.forEach(function(f){var x=d.match(matchtag(f));if(x)p[f]=unescapexml(x[1]);});
|
930
|
+
/* 18.8.1 alignment CT_CellAlignment */
|
931
|
+
case '<alignment': break;
|
717
932
|
|
718
|
-
/*
|
719
|
-
|
720
|
-
else p.t = (cell.t ? cell.t : "n"); // default is "n" in schema
|
721
|
-
switch(p.t) {
|
722
|
-
case 'n': p.v = parseFloat(p.v); break;
|
723
|
-
case 's': {
|
724
|
-
sidx = parseInt(p.v, 10);
|
725
|
-
p.v = strs[sidx].t;
|
726
|
-
p.r = strs[sidx].r;
|
727
|
-
} break;
|
728
|
-
case 'str': if(p.v) p.v = utf8read(p.v); break; // normal string
|
729
|
-
case 'inlineStr':
|
730
|
-
p.t = 'str'; p.v = unescapexml((d.match(matchtag('t'))||["",""])[1]);
|
731
|
-
break; // inline string
|
732
|
-
case 'b':
|
733
|
-
switch(p.v) {
|
734
|
-
case '0': case 'FALSE': case "false": case false: p.v=false; break;
|
735
|
-
case '1': case 'TRUE': case "true": case true: p.v=true; break;
|
736
|
-
default: throw "Unrecognized boolean: " + p.v;
|
737
|
-
} break;
|
738
|
-
/* in case of error, stick value in .raw */
|
739
|
-
case 'e': p.raw = p.v; p.v = undefined; break;
|
740
|
-
default: throw "Unrecognized cell type: " + p.t;
|
741
|
-
}
|
933
|
+
/* 18.8.33 protection CT_CellProtection */
|
934
|
+
case '<protection': case '</protection>': case '<protection/>': break;
|
742
935
|
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
try {
|
750
|
-
p.v = SSF.format(cf.numFmtId,p.v,_ssfopts);
|
751
|
-
p.t = 'str';
|
752
|
-
} catch(e) { p.v = p.raw; }
|
753
|
-
}
|
754
|
-
}
|
936
|
+
case '<extLst': case '</extLst>': break;
|
937
|
+
case '<ext': break;
|
938
|
+
default: throw 'unrecognized ' + y[0] + ' in cellXfs';
|
939
|
+
}
|
940
|
+
});
|
941
|
+
}
|
755
942
|
|
756
|
-
|
757
|
-
|
943
|
+
/* 18.8 Styles CT_Stylesheet*/
|
944
|
+
function parse_sty_xml(data) {
|
945
|
+
/* 18.8.39 styleSheet CT_Stylesheet */
|
946
|
+
var t;
|
947
|
+
|
948
|
+
/* numFmts CT_NumFmts ? */
|
949
|
+
if((t=data.match(/<numFmts([^>]*)>.*<\/numFmts>/))) parseNumFmts(t);
|
950
|
+
|
951
|
+
/* fonts CT_Fonts ? */
|
952
|
+
/* fills CT_Fills ? */
|
953
|
+
/* borders CT_Borders ? */
|
954
|
+
/* cellStyleXfs CT_CellStyleXfs ? */
|
955
|
+
|
956
|
+
/* cellXfs CT_CellXfs ? */
|
957
|
+
if((t=data.match(/<cellXfs([^>]*)>.*<\/cellXfs>/))) parseCXfs(t);
|
958
|
+
|
959
|
+
/* dxfs CT_Dxfs ? */
|
960
|
+
/* tableStyles CT_TableStyles ? */
|
961
|
+
/* colors CT_Colors ? */
|
962
|
+
/* extLst CT_ExtensionList ? */
|
963
|
+
|
964
|
+
return styles;
|
965
|
+
}
|
966
|
+
function parse_BrtFmt(data, length) {
|
967
|
+
var ifmt = data.read_shift(2);
|
968
|
+
var stFmtCode = parse_XLWideString(data,length-2);
|
969
|
+
return [ifmt, stFmtCode];
|
970
|
+
}
|
971
|
+
|
972
|
+
function parse_BrtXF(data, length) {
|
973
|
+
var ixfeParent = data.read_shift(2);
|
974
|
+
var ifmt = data.read_shift(2);
|
975
|
+
parsenoop(data, length-4);
|
976
|
+
return {ixfe:ixfeParent, ifmt:ifmt };
|
977
|
+
}
|
978
|
+
|
979
|
+
function parse_sty_bin(data) {
|
980
|
+
styles.NumberFmt = [];
|
981
|
+
for(var y in SSF._table) styles.NumberFmt[y] = SSF._table[y];
|
982
|
+
|
983
|
+
styles.CellXf = [];
|
984
|
+
var state = ""; /* TODO: this should be a stack */
|
985
|
+
var pass = false;
|
986
|
+
recordhopper(data, function(val, R, RT) {
|
987
|
+
switch(R.n) {
|
988
|
+
case 'BrtFmt':
|
989
|
+
styles.NumberFmt[val[0]] = val[1]; SSF.load(val[1], val[0]);
|
990
|
+
break;
|
991
|
+
case 'BrtFont': break; /* TODO */
|
992
|
+
case 'BrtKnownFonts': break; /* TODO */
|
993
|
+
case 'BrtFill': break; /* TODO */
|
994
|
+
case 'BrtBorder': break; /* TODO */
|
995
|
+
case 'BrtXF':
|
996
|
+
if(state === "CELLXFS") {
|
997
|
+
styles.CellXf.push(val);
|
998
|
+
}
|
999
|
+
break; /* TODO */
|
1000
|
+
case 'BrtStyle': break; /* TODO */
|
1001
|
+
case 'BrtRowHdr': break; /* TODO */
|
1002
|
+
case 'BrtCellMeta': break; /* ?? */
|
1003
|
+
case 'BrtDXF': break; /* TODO */
|
1004
|
+
case 'BrtMRUColor': break; /* TODO */
|
1005
|
+
case 'BrtIndexedColor': break; /* TODO */
|
1006
|
+
case 'BrtBeginStyleSheet': break;
|
1007
|
+
case 'BrtEndStyleSheet': break;
|
1008
|
+
case 'BrtBeginTableStyle': break;
|
1009
|
+
case 'BrtTableStyleElement': break;
|
1010
|
+
case 'BrtEndTableStyle': break;
|
1011
|
+
case 'BrtBeginFmts': state = "FMTS"; break;
|
1012
|
+
case 'BrtEndFmts': state = ""; break;
|
1013
|
+
case 'BrtBeginFonts': state = "FONTS"; break;
|
1014
|
+
case 'BrtEndFonts': state = ""; break;
|
1015
|
+
case 'BrtACBegin': state = "ACFONTS"; break;
|
1016
|
+
case 'BrtACEnd': state = ""; break;
|
1017
|
+
case 'BrtBeginFills': state = "FILLS"; break;
|
1018
|
+
case 'BrtEndFills': state = ""; break;
|
1019
|
+
case 'BrtBeginBorders': state = "BORDERS"; break;
|
1020
|
+
case 'BrtEndBorders': state = ""; break;
|
1021
|
+
case 'BrtBeginCellStyleXFs': state = "CELLSTYLEXFS"; break;
|
1022
|
+
case 'BrtEndCellStyleXFs': state = ""; break;
|
1023
|
+
case 'BrtBeginCellXFs': state = "CELLXFS"; break;
|
1024
|
+
case 'BrtEndCellXFs': state = ""; break;
|
1025
|
+
case 'BrtBeginStyles': state = "STYLES"; break;
|
1026
|
+
case 'BrtEndStyles': state = ""; break;
|
1027
|
+
case 'BrtBeginDXFs': state = "DXFS"; break;
|
1028
|
+
case 'BrtEndDXFs': state = ""; break;
|
1029
|
+
case 'BrtBeginTableStyles': state = "TABLESTYLES"; break;
|
1030
|
+
case 'BrtEndTableStyles': state = ""; break;
|
1031
|
+
case 'BrtBeginColorPalette': state = "COLORPALETTE"; break;
|
1032
|
+
case 'BrtBeginIndexedColors': state = "INDEXEDCOLORS"; break;
|
1033
|
+
case 'BrtEndIndexedColors': state = ""; break;
|
1034
|
+
case 'BrtBeginMRUColors': state = "MRUCOLORS"; break;
|
1035
|
+
case 'BrtEndMRUColors': state = ""; break;
|
1036
|
+
case 'BrtEndColorPalette': state = ""; break;
|
1037
|
+
case 'BrtFRTBegin': pass = true; break;
|
1038
|
+
case 'BrtFRTEnd': pass = false; break;
|
1039
|
+
//default: if(!pass) throw new Error("Unexpected record " + RT + " " + R.n);
|
1040
|
+
}
|
758
1041
|
});
|
759
|
-
|
760
|
-
return s;
|
1042
|
+
return styles;
|
761
1043
|
}
|
762
1044
|
|
1045
|
+
var ct2type = {
|
1046
|
+
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": "workbooks", /*XLSX*/
|
1047
|
+
"application/vnd.ms-excel.sheet.macroEnabled.main+xml":"workbooks", /*XLSM*/
|
1048
|
+
"application/vnd.ms-excel.sheet.binary.macroEnabled.main":"workbooks", /*XLSB*/
|
1049
|
+
|
1050
|
+
"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":"sheets", /*XLS[XM]*/
|
1051
|
+
"application/vnd.ms-excel.worksheet":"sheets", /*XLSB*/
|
1052
|
+
|
1053
|
+
"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":"styles", /*XLS[XM]*/
|
1054
|
+
"application/vnd.ms-excel.styles":"styles", /*XLSB*/
|
1055
|
+
|
1056
|
+
"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml": "strs", /*XLS[XM]*/
|
1057
|
+
"application/vnd.ms-excel.sharedStrings": "strs", /*XLSB*/
|
1058
|
+
|
1059
|
+
"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml": "calcchains", /*XLS[XM]*/
|
1060
|
+
//"application/vnd.ms-excel.calcChain": "calcchains", /*XLSB*/
|
1061
|
+
|
1062
|
+
"application/vnd.openxmlformats-package.core-properties+xml": "coreprops",
|
1063
|
+
"application/vnd.openxmlformats-officedocument.extended-properties+xml": "extprops",
|
1064
|
+
"application/vnd.openxmlformats-officedocument.custom-properties+xml": "custprops",
|
1065
|
+
"application/vnd.openxmlformats-officedocument.theme+xml":"themes",
|
1066
|
+
"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": "comments",
|
1067
|
+
"foo": "bar"
|
1068
|
+
};
|
1069
|
+
|
1070
|
+
var XMLNS_CT = 'http://schemas.openxmlformats.org/package/2006/content-types';
|
1071
|
+
|
763
1072
|
function parseProps(data) {
|
764
1073
|
var p = { Company:'' }, q = {};
|
765
1074
|
var strings = ["Application", "DocSecurity", "Company", "AppVersion"];
|
@@ -785,11 +1094,11 @@ function parseProps(data) {
|
|
785
1094
|
var j = 0, widx = 0;
|
786
1095
|
for(var i = 0; i !== v.length; ++i) {
|
787
1096
|
switch(v[i].v) {
|
788
|
-
case "Worksheets": widx = j; p.Worksheets = +v[++i]; break;
|
1097
|
+
case "Worksheets": widx = j; p.Worksheets = +(v[++i].v); break;
|
789
1098
|
case "Named Ranges": ++i; break; // TODO: Handle Named Ranges
|
790
1099
|
}
|
791
1100
|
}
|
792
|
-
var parts = parseVector(q.TitlesOfParts).map(utf8read);
|
1101
|
+
var parts = parseVector(q.TitlesOfParts).map(function(x) { return utf8read(x.v); });
|
793
1102
|
p.SheetNames = parts.slice(widx, widx + p.Worksheets);
|
794
1103
|
}
|
795
1104
|
p.Creator = q["dc:creator"];
|
@@ -799,6 +1108,46 @@ function parseProps(data) {
|
|
799
1108
|
return p;
|
800
1109
|
}
|
801
1110
|
|
1111
|
+
/* 15.2.12.2 Custom File Properties Part */
|
1112
|
+
function parseCustomProps(data) {
|
1113
|
+
var p = {}, name;
|
1114
|
+
data.match(/<[^>]+>([^<]*)/g).forEach(function(x) {
|
1115
|
+
var y = parsexmltag(x);
|
1116
|
+
switch(y[0]) {
|
1117
|
+
case '<property': name = y.name; break;
|
1118
|
+
case '</property>': name = null; break;
|
1119
|
+
default: if (x.indexOf('<vt:') === 0) {
|
1120
|
+
var toks = x.split('>');
|
1121
|
+
var type = toks[0].substring(4), text = toks[1];
|
1122
|
+
/* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */
|
1123
|
+
switch(type) {
|
1124
|
+
case 'lpstr': case 'lpwstr': case 'bstr': case 'lpwstr':
|
1125
|
+
p[name] = unescapexml(text);
|
1126
|
+
break;
|
1127
|
+
case 'bool':
|
1128
|
+
p[name] = parsexmlbool(text, '<vt:bool>');
|
1129
|
+
break;
|
1130
|
+
case 'i1': case 'i2': case 'i4': case 'i8': case 'int': case 'uint':
|
1131
|
+
p[name] = parseInt(text, 10);
|
1132
|
+
break;
|
1133
|
+
case 'r4': case 'r8': case 'decimal':
|
1134
|
+
p[name] = parseFloat(text);
|
1135
|
+
break;
|
1136
|
+
case 'filetime': case 'date':
|
1137
|
+
p[name] = text; // should we make this into a date?
|
1138
|
+
break;
|
1139
|
+
case 'cy': case 'error':
|
1140
|
+
p[name] = unescapexml(text);
|
1141
|
+
break;
|
1142
|
+
default:
|
1143
|
+
console.warn('Unexpected', x, type, toks);
|
1144
|
+
}
|
1145
|
+
}
|
1146
|
+
}
|
1147
|
+
});
|
1148
|
+
return p;
|
1149
|
+
}
|
1150
|
+
|
802
1151
|
/* 18.6 Calculation Chain */
|
803
1152
|
function parseDeps(data) {
|
804
1153
|
var d = [];
|
@@ -817,11 +1166,10 @@ function parseDeps(data) {
|
|
817
1166
|
}
|
818
1167
|
|
819
1168
|
var ctext = {};
|
820
|
-
|
821
1169
|
function parseCT(data) {
|
822
1170
|
if(!data || !data.match) return data;
|
823
1171
|
var ct = { workbooks: [], sheets: [], calcchains: [], themes: [], styles: [],
|
824
|
-
coreprops: [], extprops: [], strs:[], xmlns: "" };
|
1172
|
+
coreprops: [], extprops: [], custprops: [], strs:[], comments: [], xmlns: "" };
|
825
1173
|
(data.match(/<[^>]*>/g)||[]).forEach(function(x) {
|
826
1174
|
var y = parsexmltag(x);
|
827
1175
|
switch(y[0]) {
|
@@ -842,8 +1190,519 @@ function parseCT(data) {
|
|
842
1190
|
}
|
843
1191
|
|
844
1192
|
|
1193
|
+
|
1194
|
+
/* 9.3.2 OPC Relationships Markup */
|
1195
|
+
function parseRels(data, currentFilePath) {
|
1196
|
+
if (!data) return data;
|
1197
|
+
if (currentFilePath.charAt(0) !== '/') {
|
1198
|
+
currentFilePath = '/'+currentFilePath;
|
1199
|
+
}
|
1200
|
+
var rels = {};
|
1201
|
+
|
1202
|
+
var resolveRelativePathIntoAbsolute = function (to) {
|
1203
|
+
var toksFrom = currentFilePath.split('/');
|
1204
|
+
toksFrom.pop(); // folder path
|
1205
|
+
var toksTo = to.split('/');
|
1206
|
+
var reversed = [];
|
1207
|
+
while (toksTo.length !== 0) {
|
1208
|
+
var tokTo = toksTo.shift();
|
1209
|
+
if (tokTo === '..') {
|
1210
|
+
toksFrom.pop();
|
1211
|
+
} else if (tokTo !== '.') {
|
1212
|
+
toksFrom.push(tokTo);
|
1213
|
+
}
|
1214
|
+
}
|
1215
|
+
return toksFrom.join('/');
|
1216
|
+
};
|
1217
|
+
|
1218
|
+
data.match(/<[^>]*>/g).forEach(function(x) {
|
1219
|
+
var y = parsexmltag(x);
|
1220
|
+
/* 9.3.2.2 OPC_Relationships */
|
1221
|
+
if (y[0] === '<Relationship') {
|
1222
|
+
var rel = {}; rel.Type = y.Type; rel.Target = y.Target; rel.Id = y.Id; rel.TargetMode = y.TargetMode;
|
1223
|
+
var canonictarget = resolveRelativePathIntoAbsolute(y.Target);
|
1224
|
+
rels[canonictarget] = rel;
|
1225
|
+
}
|
1226
|
+
});
|
1227
|
+
|
1228
|
+
return rels;
|
1229
|
+
}
|
1230
|
+
|
1231
|
+
|
1232
|
+
/* 18.7.3 CT_Comment */
|
1233
|
+
function parse_comments_xml(data, opts) {
|
1234
|
+
if(data.match(/<comments *\/>/)) return [];
|
1235
|
+
var authors = [];
|
1236
|
+
var commentList = [];
|
1237
|
+
data.match(/<authors>([^\u2603]*)<\/authors>/m)[1].split('</author>').forEach(function(x) {
|
1238
|
+
if(x === "" || x.trim() === "") return;
|
1239
|
+
authors.push(x.match(/<author[^>]*>(.*)/)[1]);
|
1240
|
+
});
|
1241
|
+
data.match(/<commentList>([^\u2603]*)<\/commentList>/m)[1].split('</comment>').forEach(function(x, index) {
|
1242
|
+
if(x === "" || x.trim() === "") return;
|
1243
|
+
var y = parsexmltag(x.match(/<comment[^>]*>/)[0]);
|
1244
|
+
var comment = { author: y.authorId && authors[y.authorId] ? authors[y.authorId] : undefined, ref: y.ref, guid: y.guid };
|
1245
|
+
var cell = decode_cell(y.ref);
|
1246
|
+
if(opts.sheetRows && opts.sheetRows <= cell.r) return;
|
1247
|
+
var textMatch = x.match(/<text>([^\u2603]*)<\/text>/m);
|
1248
|
+
if (!textMatch || !textMatch[1]) return; // a comment may contain an empty text tag.
|
1249
|
+
var rt = parse_si(textMatch[1]);
|
1250
|
+
comment.r = rt.r;
|
1251
|
+
comment.t = rt.t;
|
1252
|
+
if(opts.cellHTML) comment.h = rt.h;
|
1253
|
+
commentList.push(comment);
|
1254
|
+
});
|
1255
|
+
return commentList;
|
1256
|
+
}
|
1257
|
+
|
1258
|
+
function parse_comments(zip, dirComments, sheets, sheetRels, opts) {
|
1259
|
+
for(var i = 0; i != dirComments.length; ++i) {
|
1260
|
+
var canonicalpath=dirComments[i];
|
1261
|
+
var comments=parse_comments_xml(getzipdata(zip, canonicalpath.replace(/^\//,''), true), opts);
|
1262
|
+
if(!comments || !comments.length) continue;
|
1263
|
+
// find the sheets targeted by these comments
|
1264
|
+
var sheetNames = Object.keys(sheets);
|
1265
|
+
for(var j = 0; j != sheetNames.length; ++j) {
|
1266
|
+
var sheetName = sheetNames[j];
|
1267
|
+
var rels = sheetRels[sheetName];
|
1268
|
+
if(rels) {
|
1269
|
+
var rel = rels[canonicalpath];
|
1270
|
+
if(rel) insertCommentsIntoSheet(sheetName, sheets[sheetName], comments);
|
1271
|
+
}
|
1272
|
+
}
|
1273
|
+
}
|
1274
|
+
}
|
1275
|
+
|
1276
|
+
function insertCommentsIntoSheet(sheetName, sheet, comments) {
|
1277
|
+
comments.forEach(function(comment) {
|
1278
|
+
var cell = sheet[comment.ref];
|
1279
|
+
if (!cell) {
|
1280
|
+
cell = {};
|
1281
|
+
sheet[comment.ref] = cell;
|
1282
|
+
var range = decode_range(sheet["!ref"]);
|
1283
|
+
var thisCell = decode_cell(comment.ref);
|
1284
|
+
if(range.s.r > thisCell.r) range.s.r = thisCell.r;
|
1285
|
+
if(range.e.r < thisCell.r) range.e.r = thisCell.r;
|
1286
|
+
if(range.s.c > thisCell.c) range.s.c = thisCell.c;
|
1287
|
+
if(range.e.c < thisCell.c) range.e.c = thisCell.c;
|
1288
|
+
var encoded = encode_range(range);
|
1289
|
+
if (encoded !== sheet["!ref"]) sheet["!ref"] = encoded;
|
1290
|
+
}
|
1291
|
+
|
1292
|
+
if (!cell.c) cell.c = [];
|
1293
|
+
var o = {a: comment.author, t: comment.t, r: comment.r};
|
1294
|
+
if(comment.h) o.h = comment.h;
|
1295
|
+
cell.c.push(o);
|
1296
|
+
});
|
1297
|
+
}
|
1298
|
+
|
1299
|
+
/* [MS-XLSB] 2.5.97.4 CellParsedFormula TODO: use similar logic to js-xls */
|
1300
|
+
var parse_CellParsedFormula = function(data, length) {
|
1301
|
+
var cce = data.read_shift(4);
|
1302
|
+
return parsenoop(data, length-4);
|
1303
|
+
};
|
1304
|
+
var strs = {}; // shared strings
|
1305
|
+
var _ssfopts = {}; // spreadsheet formatting options
|
1306
|
+
|
1307
|
+
/* 18.3 Worksheets */
|
1308
|
+
function parse_ws_xml(data, opts) {
|
1309
|
+
if(!data) return data;
|
1310
|
+
/* 18.3.1.99 worksheet CT_Worksheet */
|
1311
|
+
var s = {};
|
1312
|
+
|
1313
|
+
/* 18.3.1.35 dimension CT_SheetDimension ? */
|
1314
|
+
var ref = data.match(/<dimension ref="([^"]*)"\s*\/>/);
|
1315
|
+
if(ref && ref.length == 2 && ref[1].indexOf(":") !== -1) s["!ref"] = ref[1];
|
1316
|
+
|
1317
|
+
var refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} };
|
1318
|
+
var q = ["v","f"];
|
1319
|
+
var sidx = 0;
|
1320
|
+
/* 18.3.1.80 sheetData CT_SheetData ? */
|
1321
|
+
if(!data.match(/<sheetData *\/>/))
|
1322
|
+
data.match(/<sheetData>([^\u2603]*)<\/sheetData>/m)[1].split("</row>").forEach(function(x) {
|
1323
|
+
if(x === "" || x.trim() === "") return;
|
1324
|
+
|
1325
|
+
/* 18.3.1.73 row CT_Row */
|
1326
|
+
var row = parsexmltag(x.match(/<row[^>]*>/)[0]);
|
1327
|
+
if(opts.sheetRows && opts.sheetRows < +row.r) return;
|
1328
|
+
if(refguess.s.r > row.r - 1) refguess.s.r = row.r - 1;
|
1329
|
+
if(refguess.e.r < row.r - 1) refguess.e.r = row.r - 1;
|
1330
|
+
/* 18.3.1.4 c CT_Cell */
|
1331
|
+
var cells = x.substr(x.indexOf('>')+1).split(/<c /);
|
1332
|
+
cells.forEach(function(c, idx) { if(c === "" || c.trim() === "") return;
|
1333
|
+
var cref = c.match(/r=["']([^"']*)["']/);
|
1334
|
+
c = "<c " + c;
|
1335
|
+
if(cref && cref.length == 2) idx = decode_cell(cref[1]).c;
|
1336
|
+
var cell = parsexmltag((c.match(/<c[^>]*>/)||[c])[0]); delete cell[0];
|
1337
|
+
var d = c.substr(c.indexOf('>')+1);
|
1338
|
+
var p = {};
|
1339
|
+
q.forEach(function(f){var x=d.match(matchtag(f));if(x)p[f]=unescapexml(x[1]);});
|
1340
|
+
|
1341
|
+
/* SCHEMA IS ACTUALLY INCORRECT HERE. IF A CELL HAS NO T, EMIT "" */
|
1342
|
+
if(cell.t === undefined && p.v === undefined) {
|
1343
|
+
if(!opts.sheetStubs) return;
|
1344
|
+
p.t = "str"; p.v = undefined;
|
1345
|
+
}
|
1346
|
+
else p.t = (cell.t ? cell.t : "n"); // default is "n" in schema
|
1347
|
+
if(refguess.s.c > idx) refguess.s.c = idx;
|
1348
|
+
if(refguess.e.c < idx) refguess.e.c = idx;
|
1349
|
+
/* 18.18.11 t ST_CellType */
|
1350
|
+
switch(p.t) {
|
1351
|
+
case 'n': p.v = parseFloat(p.v); break;
|
1352
|
+
case 's': {
|
1353
|
+
sidx = parseInt(p.v, 10);
|
1354
|
+
p.v = strs[sidx].t;
|
1355
|
+
p.r = strs[sidx].r;
|
1356
|
+
if(opts.cellHTML) p.h = strs[sidx].h;
|
1357
|
+
} break;
|
1358
|
+
case 'str': if(p.v) p.v = utf8read(p.v); break;
|
1359
|
+
case 'inlineStr':
|
1360
|
+
var is = d.match(/<is>(.*)<\/is>/);
|
1361
|
+
is = is ? parse_si(is[1]) : {t:"",r:""};
|
1362
|
+
p.t = 'str'; p.v = is.t;
|
1363
|
+
break; // inline string
|
1364
|
+
case 'b': if(typeof p.v !== 'boolean') p.v = parsexmlbool(p.v); break;
|
1365
|
+
case 'd': /* TODO: date1904 logic */
|
1366
|
+
var epoch = Date.parse(p.v);
|
1367
|
+
p.v = (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
|
1368
|
+
p.t = 'n';
|
1369
|
+
break;
|
1370
|
+
/* in case of error, stick value in .raw */
|
1371
|
+
case 'e': p.raw = RBErr[p.v]; break;
|
1372
|
+
}
|
1373
|
+
|
1374
|
+
/* formatting */
|
1375
|
+
var fmtid = 0;
|
1376
|
+
if(cell.s && styles.CellXf) {
|
1377
|
+
var cf = styles.CellXf[cell.s];
|
1378
|
+
if(cf && cf.numFmtId) fmtid = cf.numFmtId;
|
1379
|
+
}
|
1380
|
+
try {
|
1381
|
+
p.w = SSF.format(fmtid,p.v,_ssfopts);
|
1382
|
+
if(opts.cellNF) p.z = SSF._table[fmtid];
|
1383
|
+
} catch(e) { if(opts.WTF) throw e; }
|
1384
|
+
s[cell.r] = p;
|
1385
|
+
});
|
1386
|
+
});
|
1387
|
+
if(!s["!ref"]) s["!ref"] = encode_range(refguess);
|
1388
|
+
if(opts.sheetRows) {
|
1389
|
+
var tmpref = decode_range(s["!ref"]);
|
1390
|
+
if(opts.sheetRows < +tmpref.e.r) {
|
1391
|
+
tmpref.e.r = opts.sheetRows - 1;
|
1392
|
+
if(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;
|
1393
|
+
if(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;
|
1394
|
+
if(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;
|
1395
|
+
if(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;
|
1396
|
+
s["!fullref"] = s["!ref"];
|
1397
|
+
s["!ref"] = encode_range(tmpref);
|
1398
|
+
}
|
1399
|
+
}
|
1400
|
+
return s;
|
1401
|
+
}
|
1402
|
+
|
1403
|
+
|
1404
|
+
/* [MS-XLSB] 2.4.718 BrtRowHdr */
|
1405
|
+
var parse_BrtRowHdr = function(data, length) {
|
1406
|
+
var z = {};
|
1407
|
+
z.r = data.read_shift(4);
|
1408
|
+
data.l += length-4;
|
1409
|
+
return z;
|
1410
|
+
};
|
1411
|
+
|
1412
|
+
/* [MS-XLSB] 2.4.812 BrtWsDim */
|
1413
|
+
var parse_BrtWsDim = parse_UncheckedRfX;
|
1414
|
+
|
1415
|
+
/* [MS-XLSB] 2.4.815 BrtWsProp */
|
1416
|
+
var parse_BrtWsProp = function(data, length) {
|
1417
|
+
var z = {};
|
1418
|
+
/* TODO: pull flags */
|
1419
|
+
data.l += 19;
|
1420
|
+
z.name = parse_CodeName(data, length - 19);
|
1421
|
+
return z;
|
1422
|
+
};
|
1423
|
+
|
1424
|
+
/* [MS-XLSB] 2.4.303 BrtCellBlank */
|
1425
|
+
var parse_BrtCellBlank = parsenoop;
|
1426
|
+
|
1427
|
+
/* [MS-XLSB] 2.4.304 BrtCellBool */
|
1428
|
+
var parse_BrtCellBool = function(data, length) {
|
1429
|
+
var cell = parse_Cell(data);
|
1430
|
+
var fBool = data.read_shift(1);
|
1431
|
+
return [cell, fBool, 'b'];
|
1432
|
+
};
|
1433
|
+
|
1434
|
+
/* [MS-XLSB] 2.4.305 BrtCellError */
|
1435
|
+
var parse_BrtCellError = function(data, length) {
|
1436
|
+
var cell = parse_Cell(data);
|
1437
|
+
var fBool = data.read_shift(1);
|
1438
|
+
return [cell, fBool, 'e'];
|
1439
|
+
};
|
1440
|
+
|
1441
|
+
/* [MS-XLSB] 2.4.308 BrtCellIsst */
|
1442
|
+
var parse_BrtCellIsst = function(data, length) {
|
1443
|
+
var cell = parse_Cell(data);
|
1444
|
+
var isst = data.read_shift(4);
|
1445
|
+
return [cell, isst, 's'];
|
1446
|
+
};
|
1447
|
+
|
1448
|
+
/* [MS-XLSB] 2.4.310 BrtCellReal */
|
1449
|
+
var parse_BrtCellReal = function(data, length) {
|
1450
|
+
var cell = parse_Cell(data);
|
1451
|
+
var value = parse_Xnum(data);
|
1452
|
+
return [cell, value, 'n'];
|
1453
|
+
};
|
1454
|
+
|
1455
|
+
/* [MS-XLSB] 2.4.311 BrtCellRk */
|
1456
|
+
var parse_BrtCellRk = function(data, length) {
|
1457
|
+
var cell = parse_Cell(data);
|
1458
|
+
var value = parse_RkNumber(data);
|
1459
|
+
return [cell, value, 'n'];
|
1460
|
+
};
|
1461
|
+
|
1462
|
+
/* [MS-XLSB] 2.4.314 BrtCellSt */
|
1463
|
+
var parse_BrtCellSt = function(data, length) {
|
1464
|
+
var cell = parse_Cell(data);
|
1465
|
+
var value = parse_XLWideString(data);
|
1466
|
+
return [cell, value, 'str'];
|
1467
|
+
};
|
1468
|
+
|
1469
|
+
/* [MS-XLSB] 2.4.647 BrtFmlaBool */
|
1470
|
+
var parse_BrtFmlaBool = function(data, length, opts) {
|
1471
|
+
var cell = parse_Cell(data);
|
1472
|
+
var value = data.read_shift(1);
|
1473
|
+
var o = [cell, value, 'b'];
|
1474
|
+
if(opts.cellFormula) {
|
1475
|
+
var formula = parse_CellParsedFormula(data, length-9);
|
1476
|
+
o[3] = ""; /* TODO */
|
1477
|
+
}
|
1478
|
+
else data.l += length-9;
|
1479
|
+
return o;
|
1480
|
+
};
|
1481
|
+
|
1482
|
+
/* [MS-XLSB] 2.4.648 BrtFmlaError */
|
1483
|
+
var parse_BrtFmlaError = function(data, length, opts) {
|
1484
|
+
var cell = parse_Cell(data);
|
1485
|
+
var value = data.read_shift(1);
|
1486
|
+
var o = [cell, value, 'e'];
|
1487
|
+
if(opts.cellFormula) {
|
1488
|
+
var formula = parse_CellParsedFormula(data, length-9);
|
1489
|
+
o[3] = ""; /* TODO */
|
1490
|
+
}
|
1491
|
+
else data.l += length-9;
|
1492
|
+
return o;
|
1493
|
+
};
|
1494
|
+
|
1495
|
+
/* [MS-XLSB] 2.4.649 BrtFmlaNum */
|
1496
|
+
var parse_BrtFmlaNum = function(data, length, opts) {
|
1497
|
+
var cell = parse_Cell(data);
|
1498
|
+
var value = parse_Xnum(data);
|
1499
|
+
var o = [cell, value, 'n'];
|
1500
|
+
if(opts.cellFormula) {
|
1501
|
+
var formula = parse_CellParsedFormula(data, length - 16);
|
1502
|
+
o[3] = ""; /* TODO */
|
1503
|
+
}
|
1504
|
+
else data.l += length-16;
|
1505
|
+
return o;
|
1506
|
+
};
|
1507
|
+
|
1508
|
+
/* [MS-XLSB] 2.4.650 BrtFmlaString */
|
1509
|
+
var parse_BrtFmlaString = function(data, length, opts) {
|
1510
|
+
var start = data.l;
|
1511
|
+
var cell = parse_Cell(data);
|
1512
|
+
var value = parse_XLWideString(data);
|
1513
|
+
var o = [cell, value, 'str'];
|
1514
|
+
if(opts.cellFormula) {
|
1515
|
+
var formula = parse_CellParsedFormula(data, start + length - data.l);
|
1516
|
+
o[3] = ""; /* TODO */
|
1517
|
+
}
|
1518
|
+
else data.l = start + length;
|
1519
|
+
return o;
|
1520
|
+
};
|
1521
|
+
|
1522
|
+
/* [MS-XLSB] 2.1.7.61 Worksheet */
|
1523
|
+
var parse_ws_bin = function(data, opts) {
|
1524
|
+
if(!data) return data;
|
1525
|
+
var s = {};
|
1526
|
+
|
1527
|
+
var ref;
|
1528
|
+
var refguess = {s: {r:1000000, c:1000000}, e: {r:0, c:0} };
|
1529
|
+
|
1530
|
+
var pass = false, end = false;
|
1531
|
+
var row, p, cf;
|
1532
|
+
recordhopper(data, function(val, R) {
|
1533
|
+
if(end) return;
|
1534
|
+
switch(R.n) {
|
1535
|
+
case 'BrtWsDim': ref = val; break;
|
1536
|
+
case 'BrtRowHdr':
|
1537
|
+
row = val;
|
1538
|
+
if(opts.sheetRows && opts.sheetRows <= row.r) end=true;
|
1539
|
+
break;
|
1540
|
+
|
1541
|
+
case 'BrtFmlaBool':
|
1542
|
+
case 'BrtFmlaError':
|
1543
|
+
case 'BrtFmlaNum':
|
1544
|
+
case 'BrtFmlaString':
|
1545
|
+
case 'BrtCellBool':
|
1546
|
+
case 'BrtCellError':
|
1547
|
+
case 'BrtCellIsst':
|
1548
|
+
case 'BrtCellReal':
|
1549
|
+
case 'BrtCellRk':
|
1550
|
+
p = {t:val[2]};
|
1551
|
+
switch(val[2]) {
|
1552
|
+
case 'n': p.v = val[1]; break;
|
1553
|
+
case 's': p.v = strs[val[1]].t; p.r = strs[val[1]].r; break;
|
1554
|
+
case 'b': p.v = val[1] ? true : false; break;
|
1555
|
+
case 'e': p.raw = val[1]; p.v = BErr[p.raw]; break;
|
1556
|
+
case 'str': p.v = utf8read(val[1]); break;
|
1557
|
+
}
|
1558
|
+
if(opts.cellFormula && val.length > 3) p.f = val[3];
|
1559
|
+
if((cf = styles.CellXf[val[0].iStyleRef])) try {
|
1560
|
+
p.w = SSF.format(cf.ifmt,p.v,_ssfopts);
|
1561
|
+
if(opts.cellNF) p.z = SSF._table[cf.ifmt];
|
1562
|
+
} catch(e) { if(opts.WTF) throw e; }
|
1563
|
+
s[encode_cell({c:val[0].c,r:row.r})] = p;
|
1564
|
+
if(refguess.s.r > row.r) refguess.s.r = row.r;
|
1565
|
+
if(refguess.s.c > val[0].c) refguess.s.c = val[0].c;
|
1566
|
+
if(refguess.e.r < row.r) refguess.e.r = row.r;
|
1567
|
+
if(refguess.e.c < val[0].c) refguess.e.c = val[0].c;
|
1568
|
+
break;
|
1569
|
+
|
1570
|
+
case 'BrtCellBlank': break; // (blank cell)
|
1571
|
+
|
1572
|
+
case 'BrtArrFmla': break; // TODO
|
1573
|
+
case 'BrtShrFmla': break; // TODO
|
1574
|
+
case 'BrtBeginSheet': break;
|
1575
|
+
case 'BrtWsProp': break; // TODO
|
1576
|
+
case 'BrtSheetCalcProp': break; // TODO
|
1577
|
+
case 'BrtBeginWsViews': break; // TODO
|
1578
|
+
case 'BrtBeginWsView': break; // TODO
|
1579
|
+
case 'BrtEndWsView': break; // TODO
|
1580
|
+
case 'BrtEndWsViews': break; // TODO
|
1581
|
+
case 'BrtSel': break; // TODO
|
1582
|
+
case 'BrtACBegin': break; // TODO
|
1583
|
+
case 'BrtACEnd': break; // TODO
|
1584
|
+
case 'BrtWsFmtInfoEx14': break; // TODO
|
1585
|
+
case 'BrtWsFmtInfo': break; // TODO
|
1586
|
+
case 'BrtBeginColInfos': break; // TODO
|
1587
|
+
case 'BrtColInfo': break; // TODO
|
1588
|
+
case 'BrtEndColInfos': break; // TODO
|
1589
|
+
case 'BrtBeginSheetData': break; // TODO
|
1590
|
+
case 'BrtEndSheetData': break; // TODO
|
1591
|
+
case 'BrtSheetProtection': break; // TODO
|
1592
|
+
case 'BrtPrintOptions': break; // TODO
|
1593
|
+
case 'BrtMargins': break; // TODO
|
1594
|
+
case 'BrtPageSetup': break; // TODO
|
1595
|
+
case 'BrtFRTBegin': pass = true; break;
|
1596
|
+
case 'BrtFRTEnd': pass = false; break;
|
1597
|
+
case 'BrtEndSheet': break; // TODO
|
1598
|
+
case 'BrtBeginMergeCells': break; // TODO
|
1599
|
+
case 'BrtMergeCell': break; // TODO
|
1600
|
+
case 'BrtEndMergeCells': break; // TODO
|
1601
|
+
case 'BrtLegacyDrawing': break; // TODO
|
1602
|
+
//default: if(!pass) throw new Error("Unexpected record " + R.n);
|
1603
|
+
}
|
1604
|
+
}, opts);
|
1605
|
+
s["!ref"] = encode_range(ref);
|
1606
|
+
if(opts.sheetRows) {
|
1607
|
+
var tmpref = decode_range(s["!ref"]);
|
1608
|
+
if(opts.sheetRows < +tmpref.e.r) {
|
1609
|
+
tmpref.e.r = opts.sheetRows - 1;
|
1610
|
+
if(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;
|
1611
|
+
if(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;
|
1612
|
+
if(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;
|
1613
|
+
if(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;
|
1614
|
+
s["!fullref"] = s["!ref"];
|
1615
|
+
s["!ref"] = encode_range(tmpref);
|
1616
|
+
}
|
1617
|
+
}
|
1618
|
+
return s;
|
1619
|
+
};
|
1620
|
+
|
1621
|
+
/* 18.2.28 (CT_WorkbookProtection) Defaults */
|
1622
|
+
var WBPropsDef = {
|
1623
|
+
allowRefreshQuery: '0',
|
1624
|
+
autoCompressPictures: '1',
|
1625
|
+
backupFile: '0',
|
1626
|
+
checkCompatibility: '0',
|
1627
|
+
codeName: '',
|
1628
|
+
date1904: '0',
|
1629
|
+
dateCompatibility: '1',
|
1630
|
+
//defaultThemeVersion: '0',
|
1631
|
+
filterPrivacy: '0',
|
1632
|
+
hidePivotFieldList: '0',
|
1633
|
+
promptedSolutions: '0',
|
1634
|
+
publishItems: '0',
|
1635
|
+
refreshAllConnections: false,
|
1636
|
+
saveExternalLinkValues: '1',
|
1637
|
+
showBorderUnselectedTables: '1',
|
1638
|
+
showInkAnnotation: '1',
|
1639
|
+
showObjects: 'all',
|
1640
|
+
showPivotChartFilter: '0'
|
1641
|
+
//updateLinks: 'userSet'
|
1642
|
+
};
|
1643
|
+
|
1644
|
+
/* 18.2.30 (CT_BookView) Defaults */
|
1645
|
+
var WBViewDef = {
|
1646
|
+
activeTab: '0',
|
1647
|
+
autoFilterDateGrouping: '1',
|
1648
|
+
firstSheet: '0',
|
1649
|
+
minimized: '0',
|
1650
|
+
showHorizontalScroll: '1',
|
1651
|
+
showSheetTabs: '1',
|
1652
|
+
showVerticalScroll: '1',
|
1653
|
+
tabRatio: '600',
|
1654
|
+
visibility: 'visible'
|
1655
|
+
//window{Height,Width}, {x,y}Window
|
1656
|
+
};
|
1657
|
+
|
1658
|
+
/* 18.2.19 (CT_Sheet) Defaults */
|
1659
|
+
var SheetDef = {
|
1660
|
+
state: 'visible'
|
1661
|
+
};
|
1662
|
+
|
1663
|
+
/* 18.2.2 (CT_CalcPr) Defaults */
|
1664
|
+
var CalcPrDef = {
|
1665
|
+
calcCompleted: 'true',
|
1666
|
+
calcMode: 'auto',
|
1667
|
+
calcOnSave: 'true',
|
1668
|
+
concurrentCalc: 'true',
|
1669
|
+
fullCalcOnLoad: 'false',
|
1670
|
+
fullPrecision: 'true',
|
1671
|
+
iterate: 'false',
|
1672
|
+
iterateCount: '100',
|
1673
|
+
iterateDelta: '0.001',
|
1674
|
+
refMode: 'A1'
|
1675
|
+
};
|
1676
|
+
|
1677
|
+
/* 18.2.3 (CT_CustomWorkbookView) Defaults */
|
1678
|
+
var CustomWBViewDef = {
|
1679
|
+
autoUpdate: 'false',
|
1680
|
+
changesSavedWin: 'false',
|
1681
|
+
includeHiddenRowCol: 'true',
|
1682
|
+
includePrintSettings: 'true',
|
1683
|
+
maximized: 'false',
|
1684
|
+
minimized: 'false',
|
1685
|
+
onlySync: 'false',
|
1686
|
+
personalView: 'false',
|
1687
|
+
showComments: 'commIndicator',
|
1688
|
+
showFormulaBar: 'true',
|
1689
|
+
showHorizontalScroll: 'true',
|
1690
|
+
showObjects: 'all',
|
1691
|
+
showSheetTabs: 'true',
|
1692
|
+
showStatusbar: 'true',
|
1693
|
+
showVerticalScroll: 'true',
|
1694
|
+
tabRatio: '600',
|
1695
|
+
xWindow: '0',
|
1696
|
+
yWindow: '0'
|
1697
|
+
};
|
1698
|
+
var XMLNS_WB = [
|
1699
|
+
'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
|
1700
|
+
'http://schemas.microsoft.com/office/excel/2006/main',
|
1701
|
+
'http://schemas.microsoft.com/office/excel/2006/2'
|
1702
|
+
];
|
1703
|
+
|
845
1704
|
/* 18.2 Workbook */
|
846
|
-
function
|
1705
|
+
function parse_wb_xml(data) {
|
847
1706
|
var wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: "" };
|
848
1707
|
var pass = false;
|
849
1708
|
data.match(/<[^>]*>/g).forEach(function(x) {
|
@@ -944,7 +1803,7 @@ function parseWB(data) {
|
|
944
1803
|
case '</mc:AlternateContent>': pass=false; break;
|
945
1804
|
}
|
946
1805
|
});
|
947
|
-
if(wb.xmlns
|
1806
|
+
if(XMLNS_WB.indexOf(wb.xmlns) === -1) throw new Error("Unknown Namespace: " + wb.xmlns);
|
948
1807
|
|
949
1808
|
var z;
|
950
1809
|
/* defaults */
|
@@ -959,105 +1818,988 @@ function parseWB(data) {
|
|
959
1818
|
return wb;
|
960
1819
|
}
|
961
1820
|
|
962
|
-
/*
|
963
|
-
function
|
964
|
-
|
965
|
-
|
966
|
-
|
967
|
-
|
968
|
-
|
969
|
-
|
970
|
-
|
971
|
-
|
972
|
-
|
973
|
-
|
974
|
-
|
1821
|
+
/* [MS-XLSB] 2.4.301 BrtBundleSh */
|
1822
|
+
var parse_BrtBundleSh = function(data, length) {
|
1823
|
+
var z = {};
|
1824
|
+
z.hsState = data.read_shift(4); //ST_SheetState
|
1825
|
+
z.iTabID = data.read_shift(4);
|
1826
|
+
z.strRelID = parse_RelID(data,length-8);
|
1827
|
+
z.name = parse_XLWideString(data);
|
1828
|
+
return z;
|
1829
|
+
};
|
1830
|
+
|
1831
|
+
/* [MS-XLSB] 2.1.7.60 Workbook */
|
1832
|
+
var parse_wb_bin = function(data) {
|
1833
|
+
var wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: "" };
|
1834
|
+
var pass = false, z;
|
1835
|
+
|
1836
|
+
recordhopper(data, function(val, R) {
|
1837
|
+
switch(R.n) {
|
1838
|
+
case 'BrtBundleSh': wb.Sheets.push(val); break;
|
1839
|
+
|
1840
|
+
case 'BrtBeginBook': break;
|
1841
|
+
case 'BrtFileVersion': break;
|
1842
|
+
case 'BrtWbProp': break;
|
1843
|
+
case 'BrtACBegin': break;
|
1844
|
+
case 'BrtAbsPath15': break;
|
1845
|
+
case 'BrtACEnd': break;
|
1846
|
+
/*case 'BrtBookProtectionIso': break;*/
|
1847
|
+
case 'BrtBookProtection': break;
|
1848
|
+
case 'BrtBeginBookViews': break;
|
1849
|
+
case 'BrtBookView': break;
|
1850
|
+
case 'BrtEndBookViews': break;
|
1851
|
+
case 'BrtBeginBundleShs': break;
|
1852
|
+
case 'BrtEndBundleShs': break;
|
1853
|
+
case 'BrtBeginFnGroup': break;
|
1854
|
+
case 'BrtEndFnGroup': break;
|
1855
|
+
case 'BrtBeginExternals': break;
|
1856
|
+
case 'BrtSupSelf': break;
|
1857
|
+
case 'BrtSupBookSrc': break;
|
1858
|
+
case 'BrtExternSheet': break;
|
1859
|
+
case 'BrtEndExternals': break;
|
1860
|
+
case 'BrtName': break;
|
1861
|
+
case 'BrtCalcProp': break;
|
1862
|
+
case 'BrtUserBookView': break;
|
1863
|
+
case 'BrtBeginPivotCacheIDs': break;
|
1864
|
+
case 'BrtBeginPivotCacheID': break;
|
1865
|
+
case 'BrtEndPivotCacheID': break;
|
1866
|
+
case 'BrtEndPivotCacheIDs': break;
|
1867
|
+
case 'BrtWebOpt': break;
|
1868
|
+
case 'BrtFileRecover': break;
|
1869
|
+
/*case 'BrtBeginWebPubItems': break;
|
1870
|
+
case 'BrtBeginWebPubItem': break;
|
1871
|
+
case 'BrtEndWebPubItem': break;
|
1872
|
+
case 'BrtEndWebPubItems': break;*/
|
1873
|
+
case 'BrtFRTBegin': pass = true; break;
|
1874
|
+
case 'BrtFRTEnd': pass = false; break;
|
1875
|
+
case 'BrtEndBook': break;
|
1876
|
+
//default: if(!pass) throw new Error("Unexpected record " + R.n);
|
975
1877
|
}
|
976
1878
|
});
|
977
|
-
}
|
978
1879
|
|
979
|
-
/*
|
980
|
-
|
981
|
-
|
982
|
-
t[0].match(/<[^>]*>/g).forEach(function(x) {
|
983
|
-
var y = parsexmltag(x);
|
984
|
-
switch(y[0]) {
|
985
|
-
case '<cellXfs': case '<cellXfs/>': case '</cellXfs>': break;
|
1880
|
+
/* defaults */
|
1881
|
+
for(z in WBPropsDef) if(typeof wb.WBProps[z] === 'undefined') wb.WBProps[z] = WBPropsDef[z];
|
1882
|
+
for(z in CalcPrDef) if(typeof wb.CalcPr[z] === 'undefined') wb.CalcPr[z] = CalcPrDef[z];
|
986
1883
|
|
987
|
-
|
988
|
-
|
989
|
-
styles.CellXf.push(y); break;
|
990
|
-
case '</xf>': break;
|
1884
|
+
wb.WBView.forEach(function(w){for(var z in WBViewDef) if(typeof w[z] === 'undefined') w[z]=WBViewDef[z]; });
|
1885
|
+
wb.Sheets.forEach(function(w){for(var z in SheetDef) if(typeof w[z] === 'undefined') w[z]=SheetDef[z]; });
|
991
1886
|
|
992
|
-
|
993
|
-
case '<alignment': break;
|
1887
|
+
_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904, 'date1904');
|
994
1888
|
|
995
|
-
|
996
|
-
|
1889
|
+
return wb;
|
1890
|
+
};
|
1891
|
+
function parse_wb(data, name, opts) {
|
1892
|
+
return name.substr(-4)===".bin" ? parse_wb_bin(data, opts) : parse_wb_xml(data, opts);
|
1893
|
+
}
|
997
1894
|
|
998
|
-
|
999
|
-
|
1000
|
-
default: throw 'unrecognized ' + y[0] + ' in cellXfs';
|
1001
|
-
}
|
1002
|
-
});
|
1895
|
+
function parse_ws(data, name, opts) {
|
1896
|
+
return name.substr(-4)===".bin" ? parse_ws_bin(data, opts) : parse_ws_xml(data, opts);
|
1003
1897
|
}
|
1004
1898
|
|
1005
|
-
|
1006
|
-
|
1007
|
-
|
1008
|
-
var t;
|
1899
|
+
function parse_sty(data, name, opts) {
|
1900
|
+
return name.substr(-4)===".bin" ? parse_sty_bin(data, opts) : parse_sty_xml(data, opts);
|
1901
|
+
}
|
1009
1902
|
|
1010
|
-
|
1011
|
-
|
1903
|
+
function parse_sst(data, name, opts) {
|
1904
|
+
return name.substr(-4)===".bin" ? parse_sst_bin(data, opts) : parse_sst_xml(data, opts);
|
1905
|
+
}
|
1906
|
+
/* [MS-XLSB] 2.3 Record Enumeration */
|
1907
|
+
var RecordEnum = {
|
1908
|
+
0x0000: { n:"BrtRowHdr", f:parse_BrtRowHdr },
|
1909
|
+
0x0001: { n:"BrtCellBlank", f:parse_BrtCellBlank },
|
1910
|
+
0x0002: { n:"BrtCellRk", f:parse_BrtCellRk },
|
1911
|
+
0x0003: { n:"BrtCellError", f:parse_BrtCellError },
|
1912
|
+
0x0004: { n:"BrtCellBool", f:parse_BrtCellBool },
|
1913
|
+
0x0005: { n:"BrtCellReal", f:parse_BrtCellReal },
|
1914
|
+
0x0006: { n:"BrtCellSt", f:parse_BrtCellSt },
|
1915
|
+
0x0007: { n:"BrtCellIsst", f:parse_BrtCellIsst },
|
1916
|
+
0x0008: { n:"BrtFmlaString", f:parse_BrtFmlaString },
|
1917
|
+
0x0009: { n:"BrtFmlaNum", f:parse_BrtFmlaNum },
|
1918
|
+
0x000A: { n:"BrtFmlaBool", f:parse_BrtFmlaBool },
|
1919
|
+
0x000B: { n:"BrtFmlaError", f:parse_BrtFmlaError },
|
1920
|
+
0x0013: { n:"BrtSSTItem", f:parse_RichStr },
|
1921
|
+
0x0014: { n:"BrtPCDIMissing", f:parsenoop },
|
1922
|
+
0x0015: { n:"BrtPCDINumber", f:parsenoop },
|
1923
|
+
0x0016: { n:"BrtPCDIBoolean", f:parsenoop },
|
1924
|
+
0x0017: { n:"BrtPCDIError", f:parsenoop },
|
1925
|
+
0x0018: { n:"BrtPCDIString", f:parsenoop },
|
1926
|
+
0x0019: { n:"BrtPCDIDatetime", f:parsenoop },
|
1927
|
+
0x001A: { n:"BrtPCDIIndex", f:parsenoop },
|
1928
|
+
0x001B: { n:"BrtPCDIAMissing", f:parsenoop },
|
1929
|
+
0x001C: { n:"BrtPCDIANumber", f:parsenoop },
|
1930
|
+
0x001D: { n:"BrtPCDIABoolean", f:parsenoop },
|
1931
|
+
0x001E: { n:"BrtPCDIAError", f:parsenoop },
|
1932
|
+
0x001F: { n:"BrtPCDIAString", f:parsenoop },
|
1933
|
+
0x0020: { n:"BrtPCDIADatetime", f:parsenoop },
|
1934
|
+
0x0021: { n:"BrtPCRRecord", f:parsenoop },
|
1935
|
+
0x0022: { n:"BrtPCRRecordDt", f:parsenoop },
|
1936
|
+
0x0023: { n:"BrtFRTBegin", f:parsenoop },
|
1937
|
+
0x0024: { n:"BrtFRTEnd", f:parsenoop },
|
1938
|
+
0x0025: { n:"BrtACBegin", f:parsenoop },
|
1939
|
+
0x0026: { n:"BrtACEnd", f:parsenoop },
|
1940
|
+
0x0027: { n:"BrtName", f:parsenoop },
|
1941
|
+
0x0028: { n:"BrtIndexRowBlock", f:parsenoop },
|
1942
|
+
0x002A: { n:"BrtIndexBlock", f:parsenoop },
|
1943
|
+
0x002B: { n:"BrtFont", f:parsenoop },
|
1944
|
+
0x002C: { n:"BrtFmt", f:parse_BrtFmt },
|
1945
|
+
0x002D: { n:"BrtFill", f:parsenoop },
|
1946
|
+
0x002E: { n:"BrtBorder", f:parsenoop },
|
1947
|
+
0x002F: { n:"BrtXF", f:parse_BrtXF },
|
1948
|
+
0x0030: { n:"BrtStyle", f:parsenoop },
|
1949
|
+
0x0031: { n:"BrtCellMeta", f:parsenoop },
|
1950
|
+
0x0032: { n:"BrtValueMeta", f:parsenoop },
|
1951
|
+
0x0033: { n:"BrtMdb", f:parsenoop },
|
1952
|
+
0x0034: { n:"BrtBeginFmd", f:parsenoop },
|
1953
|
+
0x0035: { n:"BrtEndFmd", f:parsenoop },
|
1954
|
+
0x0036: { n:"BrtBeginMdx", f:parsenoop },
|
1955
|
+
0x0037: { n:"BrtEndMdx", f:parsenoop },
|
1956
|
+
0x0038: { n:"BrtBeginMdxTuple", f:parsenoop },
|
1957
|
+
0x0039: { n:"BrtEndMdxTuple", f:parsenoop },
|
1958
|
+
0x003A: { n:"BrtMdxMbrIstr", f:parsenoop },
|
1959
|
+
0x003B: { n:"BrtStr", f:parsenoop },
|
1960
|
+
0x003C: { n:"BrtColInfo", f:parsenoop },
|
1961
|
+
0x003E: { n:"BrtCellRString", f:parsenoop },
|
1962
|
+
0x0040: { n:"BrtDVal", f:parsenoop },
|
1963
|
+
0x0041: { n:"BrtSxvcellNum", f:parsenoop },
|
1964
|
+
0x0042: { n:"BrtSxvcellStr", f:parsenoop },
|
1965
|
+
0x0043: { n:"BrtSxvcellBool", f:parsenoop },
|
1966
|
+
0x0044: { n:"BrtSxvcellErr", f:parsenoop },
|
1967
|
+
0x0045: { n:"BrtSxvcellDate", f:parsenoop },
|
1968
|
+
0x0046: { n:"BrtSxvcellNil", f:parsenoop },
|
1969
|
+
0x0080: { n:"BrtFileVersion", f:parsenoop },
|
1970
|
+
0x0081: { n:"BrtBeginSheet", f:parsenoop },
|
1971
|
+
0x0082: { n:"BrtEndSheet", f:parsenoop },
|
1972
|
+
0x0083: { n:"BrtBeginBook", f:parsenoop },
|
1973
|
+
0x0084: { n:"BrtEndBook", f:parsenoop },
|
1974
|
+
0x0085: { n:"BrtBeginWsViews", f:parsenoop },
|
1975
|
+
0x0086: { n:"BrtEndWsViews", f:parsenoop },
|
1976
|
+
0x0087: { n:"BrtBeginBookViews", f:parsenoop },
|
1977
|
+
0x0088: { n:"BrtEndBookViews", f:parsenoop },
|
1978
|
+
0x0089: { n:"BrtBeginWsView", f:parsenoop },
|
1979
|
+
0x008A: { n:"BrtEndWsView", f:parsenoop },
|
1980
|
+
0x008B: { n:"BrtBeginCsViews", f:parsenoop },
|
1981
|
+
0x008C: { n:"BrtEndCsViews", f:parsenoop },
|
1982
|
+
0x008D: { n:"BrtBeginCsView", f:parsenoop },
|
1983
|
+
0x008E: { n:"BrtEndCsView", f:parsenoop },
|
1984
|
+
0x008F: { n:"BrtBeginBundleShs", f:parsenoop },
|
1985
|
+
0x0090: { n:"BrtEndBundleShs", f:parsenoop },
|
1986
|
+
0x0091: { n:"BrtBeginSheetData", f:parsenoop },
|
1987
|
+
0x0092: { n:"BrtEndSheetData", f:parsenoop },
|
1988
|
+
0x0093: { n:"BrtWsProp", f:parse_BrtWsProp },
|
1989
|
+
0x0094: { n:"BrtWsDim", f:parse_BrtWsDim },
|
1990
|
+
0x0097: { n:"BrtPane", f:parsenoop },
|
1991
|
+
0x0098: { n:"BrtSel", f:parsenoop },
|
1992
|
+
0x0099: { n:"BrtWbProp", f:parsenoop },
|
1993
|
+
0x009A: { n:"BrtWbFactoid", f:parsenoop },
|
1994
|
+
0x009B: { n:"BrtFileRecover", f:parsenoop },
|
1995
|
+
0x009C: { n:"BrtBundleSh", f:parse_BrtBundleSh },
|
1996
|
+
0x009D: { n:"BrtCalcProp", f:parsenoop },
|
1997
|
+
0x009E: { n:"BrtBookView", f:parsenoop },
|
1998
|
+
0x009F: { n:"BrtBeginSst", f:parse_BrtBeginSst },
|
1999
|
+
0x00A0: { n:"BrtEndSst", f:parsenoop },
|
2000
|
+
0x00A1: { n:"BrtBeginAFilter", f:parsenoop },
|
2001
|
+
0x00A2: { n:"BrtEndAFilter", f:parsenoop },
|
2002
|
+
0x00A3: { n:"BrtBeginFilterColumn", f:parsenoop },
|
2003
|
+
0x00A4: { n:"BrtEndFilterColumn", f:parsenoop },
|
2004
|
+
0x00A5: { n:"BrtBeginFilters", f:parsenoop },
|
2005
|
+
0x00A6: { n:"BrtEndFilters", f:parsenoop },
|
2006
|
+
0x00A7: { n:"BrtFilter", f:parsenoop },
|
2007
|
+
0x00A8: { n:"BrtColorFilter", f:parsenoop },
|
2008
|
+
0x00A9: { n:"BrtIconFilter", f:parsenoop },
|
2009
|
+
0x00AA: { n:"BrtTop10Filter", f:parsenoop },
|
2010
|
+
0x00AB: { n:"BrtDynamicFilter", f:parsenoop },
|
2011
|
+
0x00AC: { n:"BrtBeginCustomFilters", f:parsenoop },
|
2012
|
+
0x00AD: { n:"BrtEndCustomFilters", f:parsenoop },
|
2013
|
+
0x00AE: { n:"BrtCustomFilter", f:parsenoop },
|
2014
|
+
0x00AF: { n:"BrtAFilterDateGroupItem", f:parsenoop },
|
2015
|
+
0x00B0: { n:"BrtMergeCell", f:parsenoop },
|
2016
|
+
0x00B1: { n:"BrtBeginMergeCells", f:parsenoop },
|
2017
|
+
0x00B2: { n:"BrtEndMergeCells", f:parsenoop },
|
2018
|
+
0x00B3: { n:"BrtBeginPivotCacheDef", f:parsenoop },
|
2019
|
+
0x00B4: { n:"BrtEndPivotCacheDef", f:parsenoop },
|
2020
|
+
0x00B5: { n:"BrtBeginPCDFields", f:parsenoop },
|
2021
|
+
0x00B6: { n:"BrtEndPCDFields", f:parsenoop },
|
2022
|
+
0x00B7: { n:"BrtBeginPCDField", f:parsenoop },
|
2023
|
+
0x00B8: { n:"BrtEndPCDField", f:parsenoop },
|
2024
|
+
0x00B9: { n:"BrtBeginPCDSource", f:parsenoop },
|
2025
|
+
0x00BA: { n:"BrtEndPCDSource", f:parsenoop },
|
2026
|
+
0x00BB: { n:"BrtBeginPCDSRange", f:parsenoop },
|
2027
|
+
0x00BC: { n:"BrtEndPCDSRange", f:parsenoop },
|
2028
|
+
0x00BD: { n:"BrtBeginPCDFAtbl", f:parsenoop },
|
2029
|
+
0x00BE: { n:"BrtEndPCDFAtbl", f:parsenoop },
|
2030
|
+
0x00BF: { n:"BrtBeginPCDIRun", f:parsenoop },
|
2031
|
+
0x00C0: { n:"BrtEndPCDIRun", f:parsenoop },
|
2032
|
+
0x00C1: { n:"BrtBeginPivotCacheRecords", f:parsenoop },
|
2033
|
+
0x00C2: { n:"BrtEndPivotCacheRecords", f:parsenoop },
|
2034
|
+
0x00C3: { n:"BrtBeginPCDHierarchies", f:parsenoop },
|
2035
|
+
0x00C4: { n:"BrtEndPCDHierarchies", f:parsenoop },
|
2036
|
+
0x00C5: { n:"BrtBeginPCDHierarchy", f:parsenoop },
|
2037
|
+
0x00C6: { n:"BrtEndPCDHierarchy", f:parsenoop },
|
2038
|
+
0x00C7: { n:"BrtBeginPCDHFieldsUsage", f:parsenoop },
|
2039
|
+
0x00C8: { n:"BrtEndPCDHFieldsUsage", f:parsenoop },
|
2040
|
+
0x00C9: { n:"BrtBeginExtConnection", f:parsenoop },
|
2041
|
+
0x00CA: { n:"BrtEndExtConnection", f:parsenoop },
|
2042
|
+
0x00CB: { n:"BrtBeginECDbProps", f:parsenoop },
|
2043
|
+
0x00CC: { n:"BrtEndECDbProps", f:parsenoop },
|
2044
|
+
0x00CD: { n:"BrtBeginECOlapProps", f:parsenoop },
|
2045
|
+
0x00CE: { n:"BrtEndECOlapProps", f:parsenoop },
|
2046
|
+
0x00CF: { n:"BrtBeginPCDSConsol", f:parsenoop },
|
2047
|
+
0x00D0: { n:"BrtEndPCDSConsol", f:parsenoop },
|
2048
|
+
0x00D1: { n:"BrtBeginPCDSCPages", f:parsenoop },
|
2049
|
+
0x00D2: { n:"BrtEndPCDSCPages", f:parsenoop },
|
2050
|
+
0x00D3: { n:"BrtBeginPCDSCPage", f:parsenoop },
|
2051
|
+
0x00D4: { n:"BrtEndPCDSCPage", f:parsenoop },
|
2052
|
+
0x00D5: { n:"BrtBeginPCDSCPItem", f:parsenoop },
|
2053
|
+
0x00D6: { n:"BrtEndPCDSCPItem", f:parsenoop },
|
2054
|
+
0x00D7: { n:"BrtBeginPCDSCSets", f:parsenoop },
|
2055
|
+
0x00D8: { n:"BrtEndPCDSCSets", f:parsenoop },
|
2056
|
+
0x00D9: { n:"BrtBeginPCDSCSet", f:parsenoop },
|
2057
|
+
0x00DA: { n:"BrtEndPCDSCSet", f:parsenoop },
|
2058
|
+
0x00DB: { n:"BrtBeginPCDFGroup", f:parsenoop },
|
2059
|
+
0x00DC: { n:"BrtEndPCDFGroup", f:parsenoop },
|
2060
|
+
0x00DD: { n:"BrtBeginPCDFGItems", f:parsenoop },
|
2061
|
+
0x00DE: { n:"BrtEndPCDFGItems", f:parsenoop },
|
2062
|
+
0x00DF: { n:"BrtBeginPCDFGRange", f:parsenoop },
|
2063
|
+
0x00E0: { n:"BrtEndPCDFGRange", f:parsenoop },
|
2064
|
+
0x00E1: { n:"BrtBeginPCDFGDiscrete", f:parsenoop },
|
2065
|
+
0x00E2: { n:"BrtEndPCDFGDiscrete", f:parsenoop },
|
2066
|
+
0x00E3: { n:"BrtBeginPCDSDTupleCache", f:parsenoop },
|
2067
|
+
0x00E4: { n:"BrtEndPCDSDTupleCache", f:parsenoop },
|
2068
|
+
0x00E5: { n:"BrtBeginPCDSDTCEntries", f:parsenoop },
|
2069
|
+
0x00E6: { n:"BrtEndPCDSDTCEntries", f:parsenoop },
|
2070
|
+
0x00E7: { n:"BrtBeginPCDSDTCEMembers", f:parsenoop },
|
2071
|
+
0x00E8: { n:"BrtEndPCDSDTCEMembers", f:parsenoop },
|
2072
|
+
0x00E9: { n:"BrtBeginPCDSDTCEMember", f:parsenoop },
|
2073
|
+
0x00EA: { n:"BrtEndPCDSDTCEMember", f:parsenoop },
|
2074
|
+
0x00EB: { n:"BrtBeginPCDSDTCQueries", f:parsenoop },
|
2075
|
+
0x00EC: { n:"BrtEndPCDSDTCQueries", f:parsenoop },
|
2076
|
+
0x00ED: { n:"BrtBeginPCDSDTCQuery", f:parsenoop },
|
2077
|
+
0x00EE: { n:"BrtEndPCDSDTCQuery", f:parsenoop },
|
2078
|
+
0x00EF: { n:"BrtBeginPCDSDTCSets", f:parsenoop },
|
2079
|
+
0x00F0: { n:"BrtEndPCDSDTCSets", f:parsenoop },
|
2080
|
+
0x00F1: { n:"BrtBeginPCDSDTCSet", f:parsenoop },
|
2081
|
+
0x00F2: { n:"BrtEndPCDSDTCSet", f:parsenoop },
|
2082
|
+
0x00F3: { n:"BrtBeginPCDCalcItems", f:parsenoop },
|
2083
|
+
0x00F4: { n:"BrtEndPCDCalcItems", f:parsenoop },
|
2084
|
+
0x00F5: { n:"BrtBeginPCDCalcItem", f:parsenoop },
|
2085
|
+
0x00F6: { n:"BrtEndPCDCalcItem", f:parsenoop },
|
2086
|
+
0x00F7: { n:"BrtBeginPRule", f:parsenoop },
|
2087
|
+
0x00F8: { n:"BrtEndPRule", f:parsenoop },
|
2088
|
+
0x00F9: { n:"BrtBeginPRFilters", f:parsenoop },
|
2089
|
+
0x00FA: { n:"BrtEndPRFilters", f:parsenoop },
|
2090
|
+
0x00FB: { n:"BrtBeginPRFilter", f:parsenoop },
|
2091
|
+
0x00FC: { n:"BrtEndPRFilter", f:parsenoop },
|
2092
|
+
0x00FD: { n:"BrtBeginPNames", f:parsenoop },
|
2093
|
+
0x00FE: { n:"BrtEndPNames", f:parsenoop },
|
2094
|
+
0x00FF: { n:"BrtBeginPName", f:parsenoop },
|
2095
|
+
0x0100: { n:"BrtEndPName", f:parsenoop },
|
2096
|
+
0x0101: { n:"BrtBeginPNPairs", f:parsenoop },
|
2097
|
+
0x0102: { n:"BrtEndPNPairs", f:parsenoop },
|
2098
|
+
0x0103: { n:"BrtBeginPNPair", f:parsenoop },
|
2099
|
+
0x0104: { n:"BrtEndPNPair", f:parsenoop },
|
2100
|
+
0x0105: { n:"BrtBeginECWebProps", f:parsenoop },
|
2101
|
+
0x0106: { n:"BrtEndECWebProps", f:parsenoop },
|
2102
|
+
0x0107: { n:"BrtBeginEcWpTables", f:parsenoop },
|
2103
|
+
0x0108: { n:"BrtEndECWPTables", f:parsenoop },
|
2104
|
+
0x0109: { n:"BrtBeginECParams", f:parsenoop },
|
2105
|
+
0x010A: { n:"BrtEndECParams", f:parsenoop },
|
2106
|
+
0x010B: { n:"BrtBeginECParam", f:parsenoop },
|
2107
|
+
0x010C: { n:"BrtEndECParam", f:parsenoop },
|
2108
|
+
0x010D: { n:"BrtBeginPCDKPIs", f:parsenoop },
|
2109
|
+
0x010E: { n:"BrtEndPCDKPIs", f:parsenoop },
|
2110
|
+
0x010F: { n:"BrtBeginPCDKPI", f:parsenoop },
|
2111
|
+
0x0110: { n:"BrtEndPCDKPI", f:parsenoop },
|
2112
|
+
0x0111: { n:"BrtBeginDims", f:parsenoop },
|
2113
|
+
0x0112: { n:"BrtEndDims", f:parsenoop },
|
2114
|
+
0x0113: { n:"BrtBeginDim", f:parsenoop },
|
2115
|
+
0x0114: { n:"BrtEndDim", f:parsenoop },
|
2116
|
+
0x0115: { n:"BrtIndexPartEnd", f:parsenoop },
|
2117
|
+
0x0116: { n:"BrtBeginStyleSheet", f:parsenoop },
|
2118
|
+
0x0117: { n:"BrtEndStyleSheet", f:parsenoop },
|
2119
|
+
0x0118: { n:"BrtBeginSXView", f:parsenoop },
|
2120
|
+
0x0119: { n:"BrtEndSXVI", f:parsenoop },
|
2121
|
+
0x011A: { n:"BrtBeginSXVI", f:parsenoop },
|
2122
|
+
0x011B: { n:"BrtBeginSXVIs", f:parsenoop },
|
2123
|
+
0x011C: { n:"BrtEndSXVIs", f:parsenoop },
|
2124
|
+
0x011D: { n:"BrtBeginSXVD", f:parsenoop },
|
2125
|
+
0x011E: { n:"BrtEndSXVD", f:parsenoop },
|
2126
|
+
0x011F: { n:"BrtBeginSXVDs", f:parsenoop },
|
2127
|
+
0x0120: { n:"BrtEndSXVDs", f:parsenoop },
|
2128
|
+
0x0121: { n:"BrtBeginSXPI", f:parsenoop },
|
2129
|
+
0x0122: { n:"BrtEndSXPI", f:parsenoop },
|
2130
|
+
0x0123: { n:"BrtBeginSXPIs", f:parsenoop },
|
2131
|
+
0x0124: { n:"BrtEndSXPIs", f:parsenoop },
|
2132
|
+
0x0125: { n:"BrtBeginSXDI", f:parsenoop },
|
2133
|
+
0x0126: { n:"BrtEndSXDI", f:parsenoop },
|
2134
|
+
0x0127: { n:"BrtBeginSXDIs", f:parsenoop },
|
2135
|
+
0x0128: { n:"BrtEndSXDIs", f:parsenoop },
|
2136
|
+
0x0129: { n:"BrtBeginSXLI", f:parsenoop },
|
2137
|
+
0x012A: { n:"BrtEndSXLI", f:parsenoop },
|
2138
|
+
0x012B: { n:"BrtBeginSXLIRws", f:parsenoop },
|
2139
|
+
0x012C: { n:"BrtEndSXLIRws", f:parsenoop },
|
2140
|
+
0x012D: { n:"BrtBeginSXLICols", f:parsenoop },
|
2141
|
+
0x012E: { n:"BrtEndSXLICols", f:parsenoop },
|
2142
|
+
0x012F: { n:"BrtBeginSXFormat", f:parsenoop },
|
2143
|
+
0x0130: { n:"BrtEndSXFormat", f:parsenoop },
|
2144
|
+
0x0131: { n:"BrtBeginSXFormats", f:parsenoop },
|
2145
|
+
0x0132: { n:"BrtEndSxFormats", f:parsenoop },
|
2146
|
+
0x0133: { n:"BrtBeginSxSelect", f:parsenoop },
|
2147
|
+
0x0134: { n:"BrtEndSxSelect", f:parsenoop },
|
2148
|
+
0x0135: { n:"BrtBeginISXVDRws", f:parsenoop },
|
2149
|
+
0x0136: { n:"BrtEndISXVDRws", f:parsenoop },
|
2150
|
+
0x0137: { n:"BrtBeginISXVDCols", f:parsenoop },
|
2151
|
+
0x0138: { n:"BrtEndISXVDCols", f:parsenoop },
|
2152
|
+
0x0139: { n:"BrtEndSXLocation", f:parsenoop },
|
2153
|
+
0x013A: { n:"BrtBeginSXLocation", f:parsenoop },
|
2154
|
+
0x013B: { n:"BrtEndSXView", f:parsenoop },
|
2155
|
+
0x013C: { n:"BrtBeginSXTHs", f:parsenoop },
|
2156
|
+
0x013D: { n:"BrtEndSXTHs", f:parsenoop },
|
2157
|
+
0x013E: { n:"BrtBeginSXTH", f:parsenoop },
|
2158
|
+
0x013F: { n:"BrtEndSXTH", f:parsenoop },
|
2159
|
+
0x0140: { n:"BrtBeginISXTHRws", f:parsenoop },
|
2160
|
+
0x0141: { n:"BrtEndISXTHRws", f:parsenoop },
|
2161
|
+
0x0142: { n:"BrtBeginISXTHCols", f:parsenoop },
|
2162
|
+
0x0143: { n:"BrtEndISXTHCols", f:parsenoop },
|
2163
|
+
0x0144: { n:"BrtBeginSXTDMPS", f:parsenoop },
|
2164
|
+
0x0145: { n:"BrtEndSXTDMPs", f:parsenoop },
|
2165
|
+
0x0146: { n:"BrtBeginSXTDMP", f:parsenoop },
|
2166
|
+
0x0147: { n:"BrtEndSXTDMP", f:parsenoop },
|
2167
|
+
0x0148: { n:"BrtBeginSXTHItems", f:parsenoop },
|
2168
|
+
0x0149: { n:"BrtEndSXTHItems", f:parsenoop },
|
2169
|
+
0x014A: { n:"BrtBeginSXTHItem", f:parsenoop },
|
2170
|
+
0x014B: { n:"BrtEndSXTHItem", f:parsenoop },
|
2171
|
+
0x014C: { n:"BrtBeginMetadata", f:parsenoop },
|
2172
|
+
0x014D: { n:"BrtEndMetadata", f:parsenoop },
|
2173
|
+
0x014E: { n:"BrtBeginEsmdtinfo", f:parsenoop },
|
2174
|
+
0x014F: { n:"BrtMdtinfo", f:parsenoop },
|
2175
|
+
0x0150: { n:"BrtEndEsmdtinfo", f:parsenoop },
|
2176
|
+
0x0151: { n:"BrtBeginEsmdb", f:parsenoop },
|
2177
|
+
0x0152: { n:"BrtEndEsmdb", f:parsenoop },
|
2178
|
+
0x0153: { n:"BrtBeginEsfmd", f:parsenoop },
|
2179
|
+
0x0154: { n:"BrtEndEsfmd", f:parsenoop },
|
2180
|
+
0x0155: { n:"BrtBeginSingleCells", f:parsenoop },
|
2181
|
+
0x0156: { n:"BrtEndSingleCells", f:parsenoop },
|
2182
|
+
0x0157: { n:"BrtBeginList", f:parsenoop },
|
2183
|
+
0x0158: { n:"BrtEndList", f:parsenoop },
|
2184
|
+
0x0159: { n:"BrtBeginListCols", f:parsenoop },
|
2185
|
+
0x015A: { n:"BrtEndListCols", f:parsenoop },
|
2186
|
+
0x015B: { n:"BrtBeginListCol", f:parsenoop },
|
2187
|
+
0x015C: { n:"BrtEndListCol", f:parsenoop },
|
2188
|
+
0x015D: { n:"BrtBeginListXmlCPr", f:parsenoop },
|
2189
|
+
0x015E: { n:"BrtEndListXmlCPr", f:parsenoop },
|
2190
|
+
0x015F: { n:"BrtListCCFmla", f:parsenoop },
|
2191
|
+
0x0160: { n:"BrtListTrFmla", f:parsenoop },
|
2192
|
+
0x0161: { n:"BrtBeginExternals", f:parsenoop },
|
2193
|
+
0x0162: { n:"BrtEndExternals", f:parsenoop },
|
2194
|
+
0x0163: { n:"BrtSupBookSrc", f:parsenoop },
|
2195
|
+
0x0165: { n:"BrtSupSelf", f:parsenoop },
|
2196
|
+
0x0166: { n:"BrtSupSame", f:parsenoop },
|
2197
|
+
0x0167: { n:"BrtSupTabs", f:parsenoop },
|
2198
|
+
0x0168: { n:"BrtBeginSupBook", f:parsenoop },
|
2199
|
+
0x0169: { n:"BrtPlaceholderName", f:parsenoop },
|
2200
|
+
0x016A: { n:"BrtExternSheet", f:parsenoop },
|
2201
|
+
0x016B: { n:"BrtExternTableStart", f:parsenoop },
|
2202
|
+
0x016C: { n:"BrtExternTableEnd", f:parsenoop },
|
2203
|
+
0x016E: { n:"BrtExternRowHdr", f:parsenoop },
|
2204
|
+
0x016F: { n:"BrtExternCellBlank", f:parsenoop },
|
2205
|
+
0x0170: { n:"BrtExternCellReal", f:parsenoop },
|
2206
|
+
0x0171: { n:"BrtExternCellBool", f:parsenoop },
|
2207
|
+
0x0172: { n:"BrtExternCellError", f:parsenoop },
|
2208
|
+
0x0173: { n:"BrtExternCellString", f:parsenoop },
|
2209
|
+
0x0174: { n:"BrtBeginEsmdx", f:parsenoop },
|
2210
|
+
0x0175: { n:"BrtEndEsmdx", f:parsenoop },
|
2211
|
+
0x0176: { n:"BrtBeginMdxSet", f:parsenoop },
|
2212
|
+
0x0177: { n:"BrtEndMdxSet", f:parsenoop },
|
2213
|
+
0x0178: { n:"BrtBeginMdxMbrProp", f:parsenoop },
|
2214
|
+
0x0179: { n:"BrtEndMdxMbrProp", f:parsenoop },
|
2215
|
+
0x017A: { n:"BrtBeginMdxKPI", f:parsenoop },
|
2216
|
+
0x017B: { n:"BrtEndMdxKPI", f:parsenoop },
|
2217
|
+
0x017C: { n:"BrtBeginEsstr", f:parsenoop },
|
2218
|
+
0x017D: { n:"BrtEndEsstr", f:parsenoop },
|
2219
|
+
0x017E: { n:"BrtBeginPRFItem", f:parsenoop },
|
2220
|
+
0x017F: { n:"BrtEndPRFItem", f:parsenoop },
|
2221
|
+
0x0180: { n:"BrtBeginPivotCacheIDs", f:parsenoop },
|
2222
|
+
0x0181: { n:"BrtEndPivotCacheIDs", f:parsenoop },
|
2223
|
+
0x0182: { n:"BrtBeginPivotCacheID", f:parsenoop },
|
2224
|
+
0x0183: { n:"BrtEndPivotCacheID", f:parsenoop },
|
2225
|
+
0x0184: { n:"BrtBeginISXVIs", f:parsenoop },
|
2226
|
+
0x0185: { n:"BrtEndISXVIs", f:parsenoop },
|
2227
|
+
0x0186: { n:"BrtBeginColInfos", f:parsenoop },
|
2228
|
+
0x0187: { n:"BrtEndColInfos", f:parsenoop },
|
2229
|
+
0x0188: { n:"BrtBeginRwBrk", f:parsenoop },
|
2230
|
+
0x0189: { n:"BrtEndRwBrk", f:parsenoop },
|
2231
|
+
0x018A: { n:"BrtBeginColBrk", f:parsenoop },
|
2232
|
+
0x018B: { n:"BrtEndColBrk", f:parsenoop },
|
2233
|
+
0x018C: { n:"BrtBrk", f:parsenoop },
|
2234
|
+
0x018D: { n:"BrtUserBookView", f:parsenoop },
|
2235
|
+
0x018E: { n:"BrtInfo", f:parsenoop },
|
2236
|
+
0x018F: { n:"BrtCUsr", f:parsenoop },
|
2237
|
+
0x0190: { n:"BrtUsr", f:parsenoop },
|
2238
|
+
0x0191: { n:"BrtBeginUsers", f:parsenoop },
|
2239
|
+
0x0193: { n:"BrtEOF", f:parsenoop },
|
2240
|
+
0x0194: { n:"BrtUCR", f:parsenoop },
|
2241
|
+
0x0195: { n:"BrtRRInsDel", f:parsenoop },
|
2242
|
+
0x0196: { n:"BrtRREndInsDel", f:parsenoop },
|
2243
|
+
0x0197: { n:"BrtRRMove", f:parsenoop },
|
2244
|
+
0x0198: { n:"BrtRREndMove", f:parsenoop },
|
2245
|
+
0x0199: { n:"BrtRRChgCell", f:parsenoop },
|
2246
|
+
0x019A: { n:"BrtRREndChgCell", f:parsenoop },
|
2247
|
+
0x019B: { n:"BrtRRHeader", f:parsenoop },
|
2248
|
+
0x019C: { n:"BrtRRUserView", f:parsenoop },
|
2249
|
+
0x019D: { n:"BrtRRRenSheet", f:parsenoop },
|
2250
|
+
0x019E: { n:"BrtRRInsertSh", f:parsenoop },
|
2251
|
+
0x019F: { n:"BrtRRDefName", f:parsenoop },
|
2252
|
+
0x01A0: { n:"BrtRRNote", f:parsenoop },
|
2253
|
+
0x01A1: { n:"BrtRRConflict", f:parsenoop },
|
2254
|
+
0x01A2: { n:"BrtRRTQSIF", f:parsenoop },
|
2255
|
+
0x01A3: { n:"BrtRRFormat", f:parsenoop },
|
2256
|
+
0x01A4: { n:"BrtRREndFormat", f:parsenoop },
|
2257
|
+
0x01A5: { n:"BrtRRAutoFmt", f:parsenoop },
|
2258
|
+
0x01A6: { n:"BrtBeginUserShViews", f:parsenoop },
|
2259
|
+
0x01A7: { n:"BrtBeginUserShView", f:parsenoop },
|
2260
|
+
0x01A8: { n:"BrtEndUserShView", f:parsenoop },
|
2261
|
+
0x01A9: { n:"BrtEndUserShViews", f:parsenoop },
|
2262
|
+
0x01AA: { n:"BrtArrFmla", f:parsenoop },
|
2263
|
+
0x01AB: { n:"BrtShrFmla", f:parsenoop },
|
2264
|
+
0x01AC: { n:"BrtTable", f:parsenoop },
|
2265
|
+
0x01AD: { n:"BrtBeginExtConnections", f:parsenoop },
|
2266
|
+
0x01AE: { n:"BrtEndExtConnections", f:parsenoop },
|
2267
|
+
0x01AF: { n:"BrtBeginPCDCalcMems", f:parsenoop },
|
2268
|
+
0x01B0: { n:"BrtEndPCDCalcMems", f:parsenoop },
|
2269
|
+
0x01B1: { n:"BrtBeginPCDCalcMem", f:parsenoop },
|
2270
|
+
0x01B2: { n:"BrtEndPCDCalcMem", f:parsenoop },
|
2271
|
+
0x01B3: { n:"BrtBeginPCDHGLevels", f:parsenoop },
|
2272
|
+
0x01B4: { n:"BrtEndPCDHGLevels", f:parsenoop },
|
2273
|
+
0x01B5: { n:"BrtBeginPCDHGLevel", f:parsenoop },
|
2274
|
+
0x01B6: { n:"BrtEndPCDHGLevel", f:parsenoop },
|
2275
|
+
0x01B7: { n:"BrtBeginPCDHGLGroups", f:parsenoop },
|
2276
|
+
0x01B8: { n:"BrtEndPCDHGLGroups", f:parsenoop },
|
2277
|
+
0x01B9: { n:"BrtBeginPCDHGLGroup", f:parsenoop },
|
2278
|
+
0x01BA: { n:"BrtEndPCDHGLGroup", f:parsenoop },
|
2279
|
+
0x01BB: { n:"BrtBeginPCDHGLGMembers", f:parsenoop },
|
2280
|
+
0x01BC: { n:"BrtEndPCDHGLGMembers", f:parsenoop },
|
2281
|
+
0x01BD: { n:"BrtBeginPCDHGLGMember", f:parsenoop },
|
2282
|
+
0x01BE: { n:"BrtEndPCDHGLGMember", f:parsenoop },
|
2283
|
+
0x01BF: { n:"BrtBeginQSI", f:parsenoop },
|
2284
|
+
0x01C0: { n:"BrtEndQSI", f:parsenoop },
|
2285
|
+
0x01C1: { n:"BrtBeginQSIR", f:parsenoop },
|
2286
|
+
0x01C2: { n:"BrtEndQSIR", f:parsenoop },
|
2287
|
+
0x01C3: { n:"BrtBeginDeletedNames", f:parsenoop },
|
2288
|
+
0x01C4: { n:"BrtEndDeletedNames", f:parsenoop },
|
2289
|
+
0x01C5: { n:"BrtBeginDeletedName", f:parsenoop },
|
2290
|
+
0x01C6: { n:"BrtEndDeletedName", f:parsenoop },
|
2291
|
+
0x01C7: { n:"BrtBeginQSIFs", f:parsenoop },
|
2292
|
+
0x01C8: { n:"BrtEndQSIFs", f:parsenoop },
|
2293
|
+
0x01C9: { n:"BrtBeginQSIF", f:parsenoop },
|
2294
|
+
0x01CA: { n:"BrtEndQSIF", f:parsenoop },
|
2295
|
+
0x01CB: { n:"BrtBeginAutoSortScope", f:parsenoop },
|
2296
|
+
0x01CC: { n:"BrtEndAutoSortScope", f:parsenoop },
|
2297
|
+
0x01CD: { n:"BrtBeginConditionalFormatting", f:parsenoop },
|
2298
|
+
0x01CE: { n:"BrtEndConditionalFormatting", f:parsenoop },
|
2299
|
+
0x01CF: { n:"BrtBeginCFRule", f:parsenoop },
|
2300
|
+
0x01D0: { n:"BrtEndCFRule", f:parsenoop },
|
2301
|
+
0x01D1: { n:"BrtBeginIconSet", f:parsenoop },
|
2302
|
+
0x01D2: { n:"BrtEndIconSet", f:parsenoop },
|
2303
|
+
0x01D3: { n:"BrtBeginDatabar", f:parsenoop },
|
2304
|
+
0x01D4: { n:"BrtEndDatabar", f:parsenoop },
|
2305
|
+
0x01D5: { n:"BrtBeginColorScale", f:parsenoop },
|
2306
|
+
0x01D6: { n:"BrtEndColorScale", f:parsenoop },
|
2307
|
+
0x01D7: { n:"BrtCFVO", f:parsenoop },
|
2308
|
+
0x01D8: { n:"BrtExternValueMeta", f:parsenoop },
|
2309
|
+
0x01D9: { n:"BrtBeginColorPalette", f:parsenoop },
|
2310
|
+
0x01DA: { n:"BrtEndColorPalette", f:parsenoop },
|
2311
|
+
0x01DB: { n:"BrtIndexedColor", f:parsenoop },
|
2312
|
+
0x01DC: { n:"BrtMargins", f:parsenoop },
|
2313
|
+
0x01DD: { n:"BrtPrintOptions", f:parsenoop },
|
2314
|
+
0x01DE: { n:"BrtPageSetup", f:parsenoop },
|
2315
|
+
0x01DF: { n:"BrtBeginHeaderFooter", f:parsenoop },
|
2316
|
+
0x01E0: { n:"BrtEndHeaderFooter", f:parsenoop },
|
2317
|
+
0x01E1: { n:"BrtBeginSXCrtFormat", f:parsenoop },
|
2318
|
+
0x01E2: { n:"BrtEndSXCrtFormat", f:parsenoop },
|
2319
|
+
0x01E3: { n:"BrtBeginSXCrtFormats", f:parsenoop },
|
2320
|
+
0x01E4: { n:"BrtEndSXCrtFormats", f:parsenoop },
|
2321
|
+
0x01E5: { n:"BrtWsFmtInfo", f:parsenoop },
|
2322
|
+
0x01E6: { n:"BrtBeginMgs", f:parsenoop },
|
2323
|
+
0x01E7: { n:"BrtEndMGs", f:parsenoop },
|
2324
|
+
0x01E8: { n:"BrtBeginMGMaps", f:parsenoop },
|
2325
|
+
0x01E9: { n:"BrtEndMGMaps", f:parsenoop },
|
2326
|
+
0x01EA: { n:"BrtBeginMG", f:parsenoop },
|
2327
|
+
0x01EB: { n:"BrtEndMG", f:parsenoop },
|
2328
|
+
0x01EC: { n:"BrtBeginMap", f:parsenoop },
|
2329
|
+
0x01ED: { n:"BrtEndMap", f:parsenoop },
|
2330
|
+
0x01EE: { n:"BrtHLink", f:parsenoop },
|
2331
|
+
0x01EF: { n:"BrtBeginDCon", f:parsenoop },
|
2332
|
+
0x01F0: { n:"BrtEndDCon", f:parsenoop },
|
2333
|
+
0x01F1: { n:"BrtBeginDRefs", f:parsenoop },
|
2334
|
+
0x01F2: { n:"BrtEndDRefs", f:parsenoop },
|
2335
|
+
0x01F3: { n:"BrtDRef", f:parsenoop },
|
2336
|
+
0x01F4: { n:"BrtBeginScenMan", f:parsenoop },
|
2337
|
+
0x01F5: { n:"BrtEndScenMan", f:parsenoop },
|
2338
|
+
0x01F6: { n:"BrtBeginSct", f:parsenoop },
|
2339
|
+
0x01F7: { n:"BrtEndSct", f:parsenoop },
|
2340
|
+
0x01F8: { n:"BrtSlc", f:parsenoop },
|
2341
|
+
0x01F9: { n:"BrtBeginDXFs", f:parsenoop },
|
2342
|
+
0x01FA: { n:"BrtEndDXFs", f:parsenoop },
|
2343
|
+
0x01FB: { n:"BrtDXF", f:parsenoop },
|
2344
|
+
0x01FC: { n:"BrtBeginTableStyles", f:parsenoop },
|
2345
|
+
0x01FD: { n:"BrtEndTableStyles", f:parsenoop },
|
2346
|
+
0x01FE: { n:"BrtBeginTableStyle", f:parsenoop },
|
2347
|
+
0x01FF: { n:"BrtEndTableStyle", f:parsenoop },
|
2348
|
+
0x0200: { n:"BrtTableStyleElement", f:parsenoop },
|
2349
|
+
0x0201: { n:"BrtTableStyleClient", f:parsenoop },
|
2350
|
+
0x0202: { n:"BrtBeginVolDeps", f:parsenoop },
|
2351
|
+
0x0203: { n:"BrtEndVolDeps", f:parsenoop },
|
2352
|
+
0x0204: { n:"BrtBeginVolType", f:parsenoop },
|
2353
|
+
0x0205: { n:"BrtEndVolType", f:parsenoop },
|
2354
|
+
0x0206: { n:"BrtBeginVolMain", f:parsenoop },
|
2355
|
+
0x0207: { n:"BrtEndVolMain", f:parsenoop },
|
2356
|
+
0x0208: { n:"BrtBeginVolTopic", f:parsenoop },
|
2357
|
+
0x0209: { n:"BrtEndVolTopic", f:parsenoop },
|
2358
|
+
0x020A: { n:"BrtVolSubtopic", f:parsenoop },
|
2359
|
+
0x020B: { n:"BrtVolRef", f:parsenoop },
|
2360
|
+
0x020C: { n:"BrtVolNum", f:parsenoop },
|
2361
|
+
0x020D: { n:"BrtVolErr", f:parsenoop },
|
2362
|
+
0x020E: { n:"BrtVolStr", f:parsenoop },
|
2363
|
+
0x020F: { n:"BrtVolBool", f:parsenoop },
|
2364
|
+
0x0212: { n:"BrtBeginSortState", f:parsenoop },
|
2365
|
+
0x0213: { n:"BrtEndSortState", f:parsenoop },
|
2366
|
+
0x0214: { n:"BrtBeginSortCond", f:parsenoop },
|
2367
|
+
0x0215: { n:"BrtEndSortCond", f:parsenoop },
|
2368
|
+
0x0216: { n:"BrtBookProtection", f:parsenoop },
|
2369
|
+
0x0217: { n:"BrtSheetProtection", f:parsenoop },
|
2370
|
+
0x0218: { n:"BrtRangeProtection", f:parsenoop },
|
2371
|
+
0x0219: { n:"BrtPhoneticInfo", f:parsenoop },
|
2372
|
+
0x021A: { n:"BrtBeginECTxtWiz", f:parsenoop },
|
2373
|
+
0x021B: { n:"BrtEndECTxtWiz", f:parsenoop },
|
2374
|
+
0x021C: { n:"BrtBeginECTWFldInfoLst", f:parsenoop },
|
2375
|
+
0x021D: { n:"BrtEndECTWFldInfoLst", f:parsenoop },
|
2376
|
+
0x021E: { n:"BrtBeginECTwFldInfo", f:parsenoop },
|
2377
|
+
0x0224: { n:"BrtFileSharing", f:parsenoop },
|
2378
|
+
0x0225: { n:"BrtOleSize", f:parsenoop },
|
2379
|
+
0x0226: { n:"BrtDrawing", f:parsenoop },
|
2380
|
+
0x0227: { n:"BrtLegacyDrawing", f:parsenoop },
|
2381
|
+
0x0228: { n:"BrtLegacyDrawingHF", f:parsenoop },
|
2382
|
+
0x0229: { n:"BrtWebOpt", f:parsenoop },
|
2383
|
+
0x022A: { n:"BrtBeginWebPubItems", f:parsenoop },
|
2384
|
+
0x022B: { n:"BrtEndWebPubItems", f:parsenoop },
|
2385
|
+
0x022C: { n:"BrtBeginWebPubItem", f:parsenoop },
|
2386
|
+
0x022D: { n:"BrtEndWebPubItem", f:parsenoop },
|
2387
|
+
0x022E: { n:"BrtBeginSXCondFmt", f:parsenoop },
|
2388
|
+
0x022F: { n:"BrtEndSXCondFmt", f:parsenoop },
|
2389
|
+
0x0230: { n:"BrtBeginSXCondFmts", f:parsenoop },
|
2390
|
+
0x0231: { n:"BrtEndSXCondFmts", f:parsenoop },
|
2391
|
+
0x0232: { n:"BrtBkHim", f:parsenoop },
|
2392
|
+
0x0234: { n:"BrtColor", f:parsenoop },
|
2393
|
+
0x0235: { n:"BrtBeginIndexedColors", f:parsenoop },
|
2394
|
+
0x0236: { n:"BrtEndIndexedColors", f:parsenoop },
|
2395
|
+
0x0239: { n:"BrtBeginMRUColors", f:parsenoop },
|
2396
|
+
0x023A: { n:"BrtEndMRUColors", f:parsenoop },
|
2397
|
+
0x023C: { n:"BrtMRUColor", f:parsenoop },
|
2398
|
+
0x023D: { n:"BrtBeginDVals", f:parsenoop },
|
2399
|
+
0x023E: { n:"BrtEndDVals", f:parsenoop },
|
2400
|
+
0x0241: { n:"BrtSupNameStart", f:parsenoop },
|
2401
|
+
0x0242: { n:"BrtSupNameValueStart", f:parsenoop },
|
2402
|
+
0x0243: { n:"BrtSupNameValueEnd", f:parsenoop },
|
2403
|
+
0x0244: { n:"BrtSupNameNum", f:parsenoop },
|
2404
|
+
0x0245: { n:"BrtSupNameErr", f:parsenoop },
|
2405
|
+
0x0246: { n:"BrtSupNameSt", f:parsenoop },
|
2406
|
+
0x0247: { n:"BrtSupNameNil", f:parsenoop },
|
2407
|
+
0x0248: { n:"BrtSupNameBool", f:parsenoop },
|
2408
|
+
0x0249: { n:"BrtSupNameFmla", f:parsenoop },
|
2409
|
+
0x024A: { n:"BrtSupNameBits", f:parsenoop },
|
2410
|
+
0x024B: { n:"BrtSupNameEnd", f:parsenoop },
|
2411
|
+
0x024C: { n:"BrtEndSupBook", f:parsenoop },
|
2412
|
+
0x024D: { n:"BrtCellSmartTagProperty", f:parsenoop },
|
2413
|
+
0x024E: { n:"BrtBeginCellSmartTag", f:parsenoop },
|
2414
|
+
0x024F: { n:"BrtEndCellSmartTag", f:parsenoop },
|
2415
|
+
0x0250: { n:"BrtBeginCellSmartTags", f:parsenoop },
|
2416
|
+
0x0251: { n:"BrtEndCellSmartTags", f:parsenoop },
|
2417
|
+
0x0252: { n:"BrtBeginSmartTags", f:parsenoop },
|
2418
|
+
0x0253: { n:"BrtEndSmartTags", f:parsenoop },
|
2419
|
+
0x0254: { n:"BrtSmartTagType", f:parsenoop },
|
2420
|
+
0x0255: { n:"BrtBeginSmartTagTypes", f:parsenoop },
|
2421
|
+
0x0256: { n:"BrtEndSmartTagTypes", f:parsenoop },
|
2422
|
+
0x0257: { n:"BrtBeginSXFilters", f:parsenoop },
|
2423
|
+
0x0258: { n:"BrtEndSXFilters", f:parsenoop },
|
2424
|
+
0x0259: { n:"BrtBeginSXFILTER", f:parsenoop },
|
2425
|
+
0x025A: { n:"BrtEndSXFilter", f:parsenoop },
|
2426
|
+
0x025B: { n:"BrtBeginFills", f:parsenoop },
|
2427
|
+
0x025C: { n:"BrtEndFills", f:parsenoop },
|
2428
|
+
0x025D: { n:"BrtBeginCellWatches", f:parsenoop },
|
2429
|
+
0x025E: { n:"BrtEndCellWatches", f:parsenoop },
|
2430
|
+
0x025F: { n:"BrtCellWatch", f:parsenoop },
|
2431
|
+
0x0260: { n:"BrtBeginCRErrs", f:parsenoop },
|
2432
|
+
0x0261: { n:"BrtEndCRErrs", f:parsenoop },
|
2433
|
+
0x0262: { n:"BrtCrashRecErr", f:parsenoop },
|
2434
|
+
0x0263: { n:"BrtBeginFonts", f:parsenoop },
|
2435
|
+
0x0264: { n:"BrtEndFonts", f:parsenoop },
|
2436
|
+
0x0265: { n:"BrtBeginBorders", f:parsenoop },
|
2437
|
+
0x0266: { n:"BrtEndBorders", f:parsenoop },
|
2438
|
+
0x0267: { n:"BrtBeginFmts", f:parsenoop },
|
2439
|
+
0x0268: { n:"BrtEndFmts", f:parsenoop },
|
2440
|
+
0x0269: { n:"BrtBeginCellXFs", f:parsenoop },
|
2441
|
+
0x026A: { n:"BrtEndCellXFs", f:parsenoop },
|
2442
|
+
0x026B: { n:"BrtBeginStyles", f:parsenoop },
|
2443
|
+
0x026C: { n:"BrtEndStyles", f:parsenoop },
|
2444
|
+
0x0271: { n:"BrtBigName", f:parsenoop },
|
2445
|
+
0x0272: { n:"BrtBeginCellStyleXFs", f:parsenoop },
|
2446
|
+
0x0273: { n:"BrtEndCellStyleXFs", f:parsenoop },
|
2447
|
+
0x0274: { n:"BrtBeginComments", f:parsenoop },
|
2448
|
+
0x0275: { n:"BrtEndComments", f:parsenoop },
|
2449
|
+
0x0276: { n:"BrtBeginCommentAuthors", f:parsenoop },
|
2450
|
+
0x0277: { n:"BrtEndCommentAuthors", f:parsenoop },
|
2451
|
+
0x0278: { n:"BrtCommentAuthor", f:parsenoop },
|
2452
|
+
0x0279: { n:"BrtBeginCommentList", f:parsenoop },
|
2453
|
+
0x027A: { n:"BrtEndCommentList", f:parsenoop },
|
2454
|
+
0x027B: { n:"BrtBeginComment", f:parsenoop },
|
2455
|
+
0x027C: { n:"BrtEndComment", f:parsenoop },
|
2456
|
+
0x027D: { n:"BrtCommentText", f:parsenoop },
|
2457
|
+
0x027E: { n:"BrtBeginOleObjects", f:parsenoop },
|
2458
|
+
0x027F: { n:"BrtOleObject", f:parsenoop },
|
2459
|
+
0x0280: { n:"BrtEndOleObjects", f:parsenoop },
|
2460
|
+
0x0281: { n:"BrtBeginSxrules", f:parsenoop },
|
2461
|
+
0x0282: { n:"BrtEndSxRules", f:parsenoop },
|
2462
|
+
0x0283: { n:"BrtBeginActiveXControls", f:parsenoop },
|
2463
|
+
0x0284: { n:"BrtActiveX", f:parsenoop },
|
2464
|
+
0x0285: { n:"BrtEndActiveXControls", f:parsenoop },
|
2465
|
+
0x0286: { n:"BrtBeginPCDSDTCEMembersSortBy", f:parsenoop },
|
2466
|
+
0x0288: { n:"BrtBeginCellIgnoreECs", f:parsenoop },
|
2467
|
+
0x0289: { n:"BrtCellIgnoreEC", f:parsenoop },
|
2468
|
+
0x028A: { n:"BrtEndCellIgnoreECs", f:parsenoop },
|
2469
|
+
0x028B: { n:"BrtCsProp", f:parsenoop },
|
2470
|
+
0x028C: { n:"BrtCsPageSetup", f:parsenoop },
|
2471
|
+
0x028D: { n:"BrtBeginUserCsViews", f:parsenoop },
|
2472
|
+
0x028E: { n:"BrtEndUserCsViews", f:parsenoop },
|
2473
|
+
0x028F: { n:"BrtBeginUserCsView", f:parsenoop },
|
2474
|
+
0x0290: { n:"BrtEndUserCsView", f:parsenoop },
|
2475
|
+
0x0291: { n:"BrtBeginPcdSFCIEntries", f:parsenoop },
|
2476
|
+
0x0292: { n:"BrtEndPCDSFCIEntries", f:parsenoop },
|
2477
|
+
0x0293: { n:"BrtPCDSFCIEntry", f:parsenoop },
|
2478
|
+
0x0294: { n:"BrtBeginListParts", f:parsenoop },
|
2479
|
+
0x0295: { n:"BrtListPart", f:parsenoop },
|
2480
|
+
0x0296: { n:"BrtEndListParts", f:parsenoop },
|
2481
|
+
0x0297: { n:"BrtSheetCalcProp", f:parsenoop },
|
2482
|
+
0x0298: { n:"BrtBeginFnGroup", f:parsenoop },
|
2483
|
+
0x0299: { n:"BrtFnGroup", f:parsenoop },
|
2484
|
+
0x029A: { n:"BrtEndFnGroup", f:parsenoop },
|
2485
|
+
0x029B: { n:"BrtSupAddin", f:parsenoop },
|
2486
|
+
0x029C: { n:"BrtSXTDMPOrder", f:parsenoop },
|
2487
|
+
0x029D: { n:"BrtCsProtection", f:parsenoop },
|
2488
|
+
0x029F: { n:"BrtBeginWsSortMap", f:parsenoop },
|
2489
|
+
0x02A0: { n:"BrtEndWsSortMap", f:parsenoop },
|
2490
|
+
0x02A1: { n:"BrtBeginRRSort", f:parsenoop },
|
2491
|
+
0x02A2: { n:"BrtEndRRSort", f:parsenoop },
|
2492
|
+
0x02A3: { n:"BrtRRSortItem", f:parsenoop },
|
2493
|
+
0x02A4: { n:"BrtFileSharingIso", f:parsenoop },
|
2494
|
+
0x02A5: { n:"BrtBookProtectionIso", f:parsenoop },
|
2495
|
+
0x02A6: { n:"BrtSheetProtectionIso", f:parsenoop },
|
2496
|
+
0x02A7: { n:"BrtCsProtectionIso", f:parsenoop },
|
2497
|
+
0x02A8: { n:"BrtRangeProtectionIso", f:parsenoop },
|
2498
|
+
0x0400: { n:"BrtRwDescent", f:parsenoop },
|
2499
|
+
0x0401: { n:"BrtKnownFonts", f:parsenoop },
|
2500
|
+
0x0402: { n:"BrtBeginSXTupleSet", f:parsenoop },
|
2501
|
+
0x0403: { n:"BrtEndSXTupleSet", f:parsenoop },
|
2502
|
+
0x0404: { n:"BrtBeginSXTupleSetHeader", f:parsenoop },
|
2503
|
+
0x0405: { n:"BrtEndSXTupleSetHeader", f:parsenoop },
|
2504
|
+
0x0406: { n:"BrtSXTupleSetHeaderItem", f:parsenoop },
|
2505
|
+
0x0407: { n:"BrtBeginSXTupleSetData", f:parsenoop },
|
2506
|
+
0x0408: { n:"BrtEndSXTupleSetData", f:parsenoop },
|
2507
|
+
0x0409: { n:"BrtBeginSXTupleSetRow", f:parsenoop },
|
2508
|
+
0x040A: { n:"BrtEndSXTupleSetRow", f:parsenoop },
|
2509
|
+
0x040B: { n:"BrtSXTupleSetRowItem", f:parsenoop },
|
2510
|
+
0x040C: { n:"BrtNameExt", f:parsenoop },
|
2511
|
+
0x040D: { n:"BrtPCDH14", f:parsenoop },
|
2512
|
+
0x040E: { n:"BrtBeginPCDCalcMem14", f:parsenoop },
|
2513
|
+
0x040F: { n:"BrtEndPCDCalcMem14", f:parsenoop },
|
2514
|
+
0x0410: { n:"BrtSXTH14", f:parsenoop },
|
2515
|
+
0x0411: { n:"BrtBeginSparklineGroup", f:parsenoop },
|
2516
|
+
0x0412: { n:"BrtEndSparklineGroup", f:parsenoop },
|
2517
|
+
0x0413: { n:"BrtSparkline", f:parsenoop },
|
2518
|
+
0x0414: { n:"BrtSXDI14", f:parsenoop },
|
2519
|
+
0x0415: { n:"BrtWsFmtInfoEx14", f:parsenoop },
|
2520
|
+
0x0416: { n:"BrtBeginConditionalFormatting14", f:parsenoop },
|
2521
|
+
0x0417: { n:"BrtEndConditionalFormatting14", f:parsenoop },
|
2522
|
+
0x0418: { n:"BrtBeginCFRule14", f:parsenoop },
|
2523
|
+
0x0419: { n:"BrtEndCFRule14", f:parsenoop },
|
2524
|
+
0x041A: { n:"BrtCFVO14", f:parsenoop },
|
2525
|
+
0x041B: { n:"BrtBeginDatabar14", f:parsenoop },
|
2526
|
+
0x041C: { n:"BrtBeginIconSet14", f:parsenoop },
|
2527
|
+
0x041D: { n:"BrtDVal14", f:parsenoop },
|
2528
|
+
0x041E: { n:"BrtBeginDVals14", f:parsenoop },
|
2529
|
+
0x041F: { n:"BrtColor14", f:parsenoop },
|
2530
|
+
0x0420: { n:"BrtBeginSparklines", f:parsenoop },
|
2531
|
+
0x0421: { n:"BrtEndSparklines", f:parsenoop },
|
2532
|
+
0x0422: { n:"BrtBeginSparklineGroups", f:parsenoop },
|
2533
|
+
0x0423: { n:"BrtEndSparklineGroups", f:parsenoop },
|
2534
|
+
0x0425: { n:"BrtSXVD14", f:parsenoop },
|
2535
|
+
0x0426: { n:"BrtBeginSxview14", f:parsenoop },
|
2536
|
+
0x0427: { n:"BrtEndSxview14", f:parsenoop },
|
2537
|
+
0x042A: { n:"BrtBeginPCD14", f:parsenoop },
|
2538
|
+
0x042B: { n:"BrtEndPCD14", f:parsenoop },
|
2539
|
+
0x042C: { n:"BrtBeginExtConn14", f:parsenoop },
|
2540
|
+
0x042D: { n:"BrtEndExtConn14", f:parsenoop },
|
2541
|
+
0x042E: { n:"BrtBeginSlicerCacheIDs", f:parsenoop },
|
2542
|
+
0x042F: { n:"BrtEndSlicerCacheIDs", f:parsenoop },
|
2543
|
+
0x0430: { n:"BrtBeginSlicerCacheID", f:parsenoop },
|
2544
|
+
0x0431: { n:"BrtEndSlicerCacheID", f:parsenoop },
|
2545
|
+
0x0433: { n:"BrtBeginSlicerCache", f:parsenoop },
|
2546
|
+
0x0434: { n:"BrtEndSlicerCache", f:parsenoop },
|
2547
|
+
0x0435: { n:"BrtBeginSlicerCacheDef", f:parsenoop },
|
2548
|
+
0x0436: { n:"BrtEndSlicerCacheDef", f:parsenoop },
|
2549
|
+
0x0437: { n:"BrtBeginSlicersEx", f:parsenoop },
|
2550
|
+
0x0438: { n:"BrtEndSlicersEx", f:parsenoop },
|
2551
|
+
0x0439: { n:"BrtBeginSlicerEx", f:parsenoop },
|
2552
|
+
0x043A: { n:"BrtEndSlicerEx", f:parsenoop },
|
2553
|
+
0x043B: { n:"BrtBeginSlicer", f:parsenoop },
|
2554
|
+
0x043C: { n:"BrtEndSlicer", f:parsenoop },
|
2555
|
+
0x043D: { n:"BrtSlicerCachePivotTables", f:parsenoop },
|
2556
|
+
0x043E: { n:"BrtBeginSlicerCacheOlapImpl", f:parsenoop },
|
2557
|
+
0x043F: { n:"BrtEndSlicerCacheOlapImpl", f:parsenoop },
|
2558
|
+
0x0440: { n:"BrtBeginSlicerCacheLevelsData", f:parsenoop },
|
2559
|
+
0x0441: { n:"BrtEndSlicerCacheLevelsData", f:parsenoop },
|
2560
|
+
0x0442: { n:"BrtBeginSlicerCacheLevelData", f:parsenoop },
|
2561
|
+
0x0443: { n:"BrtEndSlicerCacheLevelData", f:parsenoop },
|
2562
|
+
0x0444: { n:"BrtBeginSlicerCacheSiRanges", f:parsenoop },
|
2563
|
+
0x0445: { n:"BrtEndSlicerCacheSiRanges", f:parsenoop },
|
2564
|
+
0x0446: { n:"BrtBeginSlicerCacheSiRange", f:parsenoop },
|
2565
|
+
0x0447: { n:"BrtEndSlicerCacheSiRange", f:parsenoop },
|
2566
|
+
0x0448: { n:"BrtSlicerCacheOlapItem", f:parsenoop },
|
2567
|
+
0x0449: { n:"BrtBeginSlicerCacheSelections", f:parsenoop },
|
2568
|
+
0x044A: { n:"BrtSlicerCacheSelection", f:parsenoop },
|
2569
|
+
0x044B: { n:"BrtEndSlicerCacheSelections", f:parsenoop },
|
2570
|
+
0x044C: { n:"BrtBeginSlicerCacheNative", f:parsenoop },
|
2571
|
+
0x044D: { n:"BrtEndSlicerCacheNative", f:parsenoop },
|
2572
|
+
0x044E: { n:"BrtSlicerCacheNativeItem", f:parsenoop },
|
2573
|
+
0x044F: { n:"BrtRangeProtection14", f:parsenoop },
|
2574
|
+
0x0450: { n:"BrtRangeProtectionIso14", f:parsenoop },
|
2575
|
+
0x0451: { n:"BrtCellIgnoreEC14", f:parsenoop },
|
2576
|
+
0x0457: { n:"BrtList14", f:parsenoop },
|
2577
|
+
0x0458: { n:"BrtCFIcon", f:parsenoop },
|
2578
|
+
0x0459: { n:"BrtBeginSlicerCachesPivotCacheIDs", f:parsenoop },
|
2579
|
+
0x045A: { n:"BrtEndSlicerCachesPivotCacheIDs", f:parsenoop },
|
2580
|
+
0x045B: { n:"BrtBeginSlicers", f:parsenoop },
|
2581
|
+
0x045C: { n:"BrtEndSlicers", f:parsenoop },
|
2582
|
+
0x045D: { n:"BrtWbProp14", f:parsenoop },
|
2583
|
+
0x045E: { n:"BrtBeginSXEdit", f:parsenoop },
|
2584
|
+
0x045F: { n:"BrtEndSXEdit", f:parsenoop },
|
2585
|
+
0x0460: { n:"BrtBeginSXEdits", f:parsenoop },
|
2586
|
+
0x0461: { n:"BrtEndSXEdits", f:parsenoop },
|
2587
|
+
0x0462: { n:"BrtBeginSXChange", f:parsenoop },
|
2588
|
+
0x0463: { n:"BrtEndSXChange", f:parsenoop },
|
2589
|
+
0x0464: { n:"BrtBeginSXChanges", f:parsenoop },
|
2590
|
+
0x0465: { n:"BrtEndSXChanges", f:parsenoop },
|
2591
|
+
0x0466: { n:"BrtSXTupleItems", f:parsenoop },
|
2592
|
+
0x0468: { n:"BrtBeginSlicerStyle", f:parsenoop },
|
2593
|
+
0x0469: { n:"BrtEndSlicerStyle", f:parsenoop },
|
2594
|
+
0x046A: { n:"BrtSlicerStyleElement", f:parsenoop },
|
2595
|
+
0x046B: { n:"BrtBeginStyleSheetExt14", f:parsenoop },
|
2596
|
+
0x046C: { n:"BrtEndStyleSheetExt14", f:parsenoop },
|
2597
|
+
0x046D: { n:"BrtBeginSlicerCachesPivotCacheID", f:parsenoop },
|
2598
|
+
0x046E: { n:"BrtEndSlicerCachesPivotCacheID", f:parsenoop },
|
2599
|
+
0x046F: { n:"BrtBeginConditionalFormattings", f:parsenoop },
|
2600
|
+
0x0470: { n:"BrtEndConditionalFormattings", f:parsenoop },
|
2601
|
+
0x0471: { n:"BrtBeginPCDCalcMemExt", f:parsenoop },
|
2602
|
+
0x0472: { n:"BrtEndPCDCalcMemExt", f:parsenoop },
|
2603
|
+
0x0473: { n:"BrtBeginPCDCalcMemsExt", f:parsenoop },
|
2604
|
+
0x0474: { n:"BrtEndPCDCalcMemsExt", f:parsenoop },
|
2605
|
+
0x0475: { n:"BrtPCDField14", f:parsenoop },
|
2606
|
+
0x0476: { n:"BrtBeginSlicerStyles", f:parsenoop },
|
2607
|
+
0x0477: { n:"BrtEndSlicerStyles", f:parsenoop },
|
2608
|
+
0x0478: { n:"BrtBeginSlicerStyleElements", f:parsenoop },
|
2609
|
+
0x0479: { n:"BrtEndSlicerStyleElements", f:parsenoop },
|
2610
|
+
0x047A: { n:"BrtCFRuleExt", f:parsenoop },
|
2611
|
+
0x047B: { n:"BrtBeginSXCondFmt14", f:parsenoop },
|
2612
|
+
0x047C: { n:"BrtEndSXCondFmt14", f:parsenoop },
|
2613
|
+
0x047D: { n:"BrtBeginSXCondFmts14", f:parsenoop },
|
2614
|
+
0x047E: { n:"BrtEndSXCondFmts14", f:parsenoop },
|
2615
|
+
0x0480: { n:"BrtBeginSortCond14", f:parsenoop },
|
2616
|
+
0x0481: { n:"BrtEndSortCond14", f:parsenoop },
|
2617
|
+
0x0482: { n:"BrtEndDVals14", f:parsenoop },
|
2618
|
+
0x0483: { n:"BrtEndIconSet14", f:parsenoop },
|
2619
|
+
0x0484: { n:"BrtEndDatabar14", f:parsenoop },
|
2620
|
+
0x0485: { n:"BrtBeginColorScale14", f:parsenoop },
|
2621
|
+
0x0486: { n:"BrtEndColorScale14", f:parsenoop },
|
2622
|
+
0x0487: { n:"BrtBeginSxrules14", f:parsenoop },
|
2623
|
+
0x0488: { n:"BrtEndSxrules14", f:parsenoop },
|
2624
|
+
0x0489: { n:"BrtBeginPRule14", f:parsenoop },
|
2625
|
+
0x048A: { n:"BrtEndPRule14", f:parsenoop },
|
2626
|
+
0x048B: { n:"BrtBeginPRFilters14", f:parsenoop },
|
2627
|
+
0x048C: { n:"BrtEndPRFilters14", f:parsenoop },
|
2628
|
+
0x048D: { n:"BrtBeginPRFilter14", f:parsenoop },
|
2629
|
+
0x048E: { n:"BrtEndPRFilter14", f:parsenoop },
|
2630
|
+
0x048F: { n:"BrtBeginPRFItem14", f:parsenoop },
|
2631
|
+
0x0490: { n:"BrtEndPRFItem14", f:parsenoop },
|
2632
|
+
0x0491: { n:"BrtBeginCellIgnoreECs14", f:parsenoop },
|
2633
|
+
0x0492: { n:"BrtEndCellIgnoreECs14", f:parsenoop },
|
2634
|
+
0x0493: { n:"BrtDxf14", f:parsenoop },
|
2635
|
+
0x0494: { n:"BrtBeginDxF14s", f:parsenoop },
|
2636
|
+
0x0495: { n:"BrtEndDxf14s", f:parsenoop },
|
2637
|
+
0x0499: { n:"BrtFilter14", f:parsenoop },
|
2638
|
+
0x049A: { n:"BrtBeginCustomFilters14", f:parsenoop },
|
2639
|
+
0x049C: { n:"BrtCustomFilter14", f:parsenoop },
|
2640
|
+
0x049D: { n:"BrtIconFilter14", f:parsenoop },
|
2641
|
+
0x049E: { n:"BrtPivotCacheConnectionName", f:parsenoop },
|
2642
|
+
0x0800: { n:"BrtBeginDecoupledPivotCacheIDs", f:parsenoop },
|
2643
|
+
0x0801: { n:"BrtEndDecoupledPivotCacheIDs", f:parsenoop },
|
2644
|
+
0x0802: { n:"BrtDecoupledPivotCacheID", f:parsenoop },
|
2645
|
+
0x0803: { n:"BrtBeginPivotTableRefs", f:parsenoop },
|
2646
|
+
0x0804: { n:"BrtEndPivotTableRefs", f:parsenoop },
|
2647
|
+
0x0805: { n:"BrtPivotTableRef", f:parsenoop },
|
2648
|
+
0x0806: { n:"BrtSlicerCacheBookPivotTables", f:parsenoop },
|
2649
|
+
0x0807: { n:"BrtBeginSxvcells", f:parsenoop },
|
2650
|
+
0x0808: { n:"BrtEndSxvcells", f:parsenoop },
|
2651
|
+
0x0809: { n:"BrtBeginSxRow", f:parsenoop },
|
2652
|
+
0x080A: { n:"BrtEndSxRow", f:parsenoop },
|
2653
|
+
0x080C: { n:"BrtPcdCalcMem15", f:parsenoop },
|
2654
|
+
0x0813: { n:"BrtQsi15", f:parsenoop },
|
2655
|
+
0x0814: { n:"BrtBeginWebExtensions", f:parsenoop },
|
2656
|
+
0x0815: { n:"BrtEndWebExtensions", f:parsenoop },
|
2657
|
+
0x0816: { n:"BrtWebExtension", f:parsenoop },
|
2658
|
+
0x0817: { n:"BrtAbsPath15", f:parsenoop },
|
2659
|
+
0x0818: { n:"BrtBeginPivotTableUISettings", f:parsenoop },
|
2660
|
+
0x0819: { n:"BrtEndPivotTableUISettings", f:parsenoop },
|
2661
|
+
0x081B: { n:"BrtTableSlicerCacheIDs", f:parsenoop },
|
2662
|
+
0x081C: { n:"BrtTableSlicerCacheID", f:parsenoop },
|
2663
|
+
0x081D: { n:"BrtBeginTableSlicerCache", f:parsenoop },
|
2664
|
+
0x081E: { n:"BrtEndTableSlicerCache", f:parsenoop },
|
2665
|
+
0x081F: { n:"BrtSxFilter15", f:parsenoop },
|
2666
|
+
0x0820: { n:"BrtBeginTimelineCachePivotCacheIDs", f:parsenoop },
|
2667
|
+
0x0821: { n:"BrtEndTimelineCachePivotCacheIDs", f:parsenoop },
|
2668
|
+
0x0822: { n:"BrtTimelineCachePivotCacheID", f:parsenoop },
|
2669
|
+
0x0823: { n:"BrtBeginTimelineCacheIDs", f:parsenoop },
|
2670
|
+
0x0824: { n:"BrtEndTimelineCacheIDs", f:parsenoop },
|
2671
|
+
0x0825: { n:"BrtBeginTimelineCacheID", f:parsenoop },
|
2672
|
+
0x0826: { n:"BrtEndTimelineCacheID", f:parsenoop },
|
2673
|
+
0x0827: { n:"BrtBeginTimelinesEx", f:parsenoop },
|
2674
|
+
0x0828: { n:"BrtEndTimelinesEx", f:parsenoop },
|
2675
|
+
0x0829: { n:"BrtBeginTimelineEx", f:parsenoop },
|
2676
|
+
0x082A: { n:"BrtEndTimelineEx", f:parsenoop },
|
2677
|
+
0x082B: { n:"BrtWorkBookPr15", f:parsenoop },
|
2678
|
+
0x082C: { n:"BrtPCDH15", f:parsenoop },
|
2679
|
+
0x082D: { n:"BrtBeginTimelineStyle", f:parsenoop },
|
2680
|
+
0x082E: { n:"BrtEndTimelineStyle", f:parsenoop },
|
2681
|
+
0x082F: { n:"BrtTimelineStyleElement", f:parsenoop },
|
2682
|
+
0x0830: { n:"BrtBeginTimelineStylesheetExt15", f:parsenoop },
|
2683
|
+
0x0831: { n:"BrtEndTimelineStylesheetExt15", f:parsenoop },
|
2684
|
+
0x0832: { n:"BrtBeginTimelineStyles", f:parsenoop },
|
2685
|
+
0x0833: { n:"BrtEndTimelineStyles", f:parsenoop },
|
2686
|
+
0x0834: { n:"BrtBeginTimelineStyleElements", f:parsenoop },
|
2687
|
+
0x0835: { n:"BrtEndTimelineStyleElements", f:parsenoop },
|
2688
|
+
0x0836: { n:"BrtDxf15", f:parsenoop },
|
2689
|
+
0x0837: { n:"BrtBeginDxfs15", f:parsenoop },
|
2690
|
+
0x0838: { n:"brtEndDxfs15", f:parsenoop },
|
2691
|
+
0x0839: { n:"BrtSlicerCacheHideItemsWithNoData", f:parsenoop },
|
2692
|
+
0x083A: { n:"BrtBeginItemUniqueNames", f:parsenoop },
|
2693
|
+
0x083B: { n:"BrtEndItemUniqueNames", f:parsenoop },
|
2694
|
+
0x083C: { n:"BrtItemUniqueName", f:parsenoop },
|
2695
|
+
0x083D: { n:"BrtBeginExtConn15", f:parsenoop },
|
2696
|
+
0x083E: { n:"BrtEndExtConn15", f:parsenoop },
|
2697
|
+
0x083F: { n:"BrtBeginOledbPr15", f:parsenoop },
|
2698
|
+
0x0840: { n:"BrtEndOledbPr15", f:parsenoop },
|
2699
|
+
0x0841: { n:"BrtBeginDataFeedPr15", f:parsenoop },
|
2700
|
+
0x0842: { n:"BrtEndDataFeedPr15", f:parsenoop },
|
2701
|
+
0x0843: { n:"BrtTextPr15", f:parsenoop },
|
2702
|
+
0x0844: { n:"BrtRangePr15", f:parsenoop },
|
2703
|
+
0x0845: { n:"BrtDbCommand15", f:parsenoop },
|
2704
|
+
0x0846: { n:"BrtBeginDbTables15", f:parsenoop },
|
2705
|
+
0x0847: { n:"BrtEndDbTables15", f:parsenoop },
|
2706
|
+
0x0848: { n:"BrtDbTable15", f:parsenoop },
|
2707
|
+
0x0849: { n:"BrtBeginDataModel", f:parsenoop },
|
2708
|
+
0x084A: { n:"BrtEndDataModel", f:parsenoop },
|
2709
|
+
0x084B: { n:"BrtBeginModelTables", f:parsenoop },
|
2710
|
+
0x084C: { n:"BrtEndModelTables", f:parsenoop },
|
2711
|
+
0x084D: { n:"BrtModelTable", f:parsenoop },
|
2712
|
+
0x084E: { n:"BrtBeginModelRelationships", f:parsenoop },
|
2713
|
+
0x084F: { n:"BrtEndModelRelationships", f:parsenoop },
|
2714
|
+
0x0850: { n:"BrtModelRelationship", f:parsenoop },
|
2715
|
+
0x0851: { n:"BrtBeginECTxtWiz15", f:parsenoop },
|
2716
|
+
0x0852: { n:"BrtEndECTxtWiz15", f:parsenoop },
|
2717
|
+
0x0853: { n:"BrtBeginECTWFldInfoLst15", f:parsenoop },
|
2718
|
+
0x0854: { n:"BrtEndECTWFldInfoLst15", f:parsenoop },
|
2719
|
+
0x0855: { n:"BrtBeginECTWFldInfo15", f:parsenoop },
|
2720
|
+
0x0856: { n:"BrtFieldListActiveItem", f:parsenoop },
|
2721
|
+
0x0857: { n:"BrtPivotCacheIdVersion", f:parsenoop },
|
2722
|
+
0x0858: { n:"BrtSXDI15", f:parsenoop },
|
2723
|
+
0xFFFF: { n:"", f:parsenoop }
|
2724
|
+
};
|
1012
2725
|
|
1013
|
-
|
1014
|
-
|
1015
|
-
|
1016
|
-
|
2726
|
+
function fixopts(opts) {
|
2727
|
+
var defaults = [
|
2728
|
+
['cellNF', false], /* emit cell number format string as .z */
|
2729
|
+
['cellHTML', true], /* emit html string as .h */
|
2730
|
+
['cellFormula', true], /* emit formulae as .f */
|
2731
|
+
|
2732
|
+
['sheetStubs', false], /* emit empty cells */
|
2733
|
+
['sheetRows', 0, 'n'], /* read n rows (0 = read all rows) */
|
2734
|
+
['bookDeps', false], /* parse calculation chains */
|
2735
|
+
['bookSheets', false], /* only try to get sheet names (no Sheets) */
|
2736
|
+
['bookProps', false], /* only try to get properties (no Sheets) */
|
2737
|
+
['bookFiles', false], /* include raw file structure (keys, files) */
|
2738
|
+
|
2739
|
+
['WTF', false] /* WTF mode (throws errors) */
|
2740
|
+
];
|
2741
|
+
defaults.forEach(function(d) {
|
2742
|
+
if(typeof opts[d[0]] === 'undefined') opts[d[0]] = d[1];
|
2743
|
+
if(d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);
|
2744
|
+
});
|
2745
|
+
}
|
2746
|
+
function parseZip(zip, opts) {
|
2747
|
+
opts = opts || {};
|
2748
|
+
fixopts(opts);
|
2749
|
+
reset_cp();
|
2750
|
+
var entries = Object.keys(zip.files);
|
2751
|
+
var keys = entries.filter(function(x){return x.substr(-1) != '/';}).sort();
|
2752
|
+
var dir = parseCT(getzipdata(zip, '[Content_Types].xml'));
|
2753
|
+
var xlsb = false;
|
2754
|
+
var sheets;
|
2755
|
+
if(dir.workbooks.length === 0) {
|
2756
|
+
var binname = "xl/workbook.bin";
|
2757
|
+
if(!getzipfile(zip,binname)) throw new Error("Could not find workbook entry");
|
2758
|
+
dir.workbooks.push(binname);
|
2759
|
+
xlsb = true;
|
2760
|
+
}
|
1017
2761
|
|
1018
|
-
|
1019
|
-
|
2762
|
+
if(!opts.bookSheets && !opts.bookProps) {
|
2763
|
+
strs = {};
|
2764
|
+
if(dir.sst) strs=parse_sst(getzipdata(zip, dir.sst.replace(/^\//,'')), dir.sst, opts);
|
1020
2765
|
|
1021
|
-
|
1022
|
-
|
1023
|
-
|
1024
|
-
/* extLst CT_ExtensionList ? */
|
2766
|
+
styles = {};
|
2767
|
+
if(dir.style) styles = parse_sty(getzipdata(zip, dir.style.replace(/^\//,'')),dir.style);
|
2768
|
+
}
|
1025
2769
|
|
1026
|
-
|
1027
|
-
}
|
2770
|
+
var wb = parse_wb(getzipdata(zip, dir.workbooks[0].replace(/^\//,'')), dir.workbooks[0], opts);
|
1028
2771
|
|
1029
|
-
|
1030
|
-
|
1031
|
-
|
1032
|
-
|
1033
|
-
|
1034
|
-
}
|
2772
|
+
var props = {}, propdata = "";
|
2773
|
+
try {
|
2774
|
+
propdata = dir.coreprops.length !== 0 ? getzipdata(zip, dir.coreprops[0].replace(/^\//,'')) : "";
|
2775
|
+
propdata += dir.extprops.length !== 0 ? getzipdata(zip, dir.extprops[0].replace(/^\//,'')) : "";
|
2776
|
+
props = propdata !== "" ? parseProps(propdata) : {};
|
2777
|
+
} catch(e) { }
|
1035
2778
|
|
1036
|
-
|
1037
|
-
|
1038
|
-
|
1039
|
-
|
1040
|
-
|
1041
|
-
}
|
2779
|
+
var custprops = {};
|
2780
|
+
if(!opts.bookSheets || opts.bookProps) {
|
2781
|
+
if (dir.custprops.length !== 0) {
|
2782
|
+
propdata = getzipdata(zip, dir.custprops[0].replace(/^\//,''), true);
|
2783
|
+
if(propdata) custprops = parseCustomProps(propdata);
|
2784
|
+
}
|
2785
|
+
}
|
2786
|
+
|
2787
|
+
var out = {};
|
2788
|
+
if(opts.bookSheets || opts.bookProps) {
|
2789
|
+
if(props.Worksheets && props.SheetNames.length > 0) sheets=props.SheetNames;
|
2790
|
+
else if(wb.Sheets) sheets = wb.Sheets.map(function(x){ return x.name; });
|
2791
|
+
if(opts.bookProps) { out.Props = props; out.Custprops = custprops; }
|
2792
|
+
if(typeof sheets !== 'undefined') out.SheetNames = sheets;
|
2793
|
+
if(opts.bookSheets ? out.SheetNames : opts.bookProps) return out;
|
2794
|
+
}
|
2795
|
+
sheets = {};
|
1042
2796
|
|
1043
|
-
function parseZip(zip) {
|
1044
|
-
var entries = Object.keys(zip.files);
|
1045
|
-
var keys = entries.filter(function(x){return x.substr(-1) != '/';}).sort();
|
1046
|
-
var dir = parseCT(getdata(getzipfile(zip, '[Content_Types].xml')));
|
1047
|
-
if(dir.workbooks.length === 0) throw new Error("Could not find workbook entry");
|
1048
|
-
strs = {};
|
1049
|
-
if(dir.sst) strs=parse_sst(getdata(getzipfile(zip, dir.sst.replace(/^\//,''))));
|
1050
|
-
|
1051
|
-
styles = {};
|
1052
|
-
if(dir.style) styles = parseStyles(getdata(getzipfile(zip, dir.style.replace(/^\//,''))));
|
1053
|
-
|
1054
|
-
var wb = parseWB(getdata(getzipfile(zip, dir.workbooks[0].replace(/^\//,''))));
|
1055
|
-
var propdata = dir.coreprops.length !== 0 ? getdata(getzipfile(zip, dir.coreprops[0].replace(/^\//,''))) : "";
|
1056
|
-
propdata += dir.extprops.length !== 0 ? getdata(getzipfile(zip, dir.extprops[0].replace(/^\//,''))) : "";
|
1057
|
-
var props = propdata !== "" ? parseProps(propdata) : {};
|
1058
2797
|
var deps = {};
|
1059
|
-
if(dir.calcchain) deps=parseDeps(
|
1060
|
-
|
2798
|
+
if(opts.bookDeps && dir.calcchain) deps=parseDeps(getzipdata(zip, dir.calcchain.replace(/^\//,'')));
|
2799
|
+
|
2800
|
+
var i=0;
|
2801
|
+
var sheetRels = {};
|
2802
|
+
var path, relsPath;
|
1061
2803
|
if(!props.Worksheets) {
|
1062
2804
|
/* Google Docs doesn't generate the appropriate metadata, so we impute: */
|
1063
2805
|
var wbsheets = wb.Sheets;
|
@@ -1066,52 +2808,51 @@ function parseZip(zip) {
|
|
1066
2808
|
for(var j = 0; j != wbsheets.length; ++j) {
|
1067
2809
|
props.SheetNames[j] = wbsheets[j].name;
|
1068
2810
|
}
|
1069
|
-
for(i = 0; i != props.Worksheets; ++i) {
|
1070
|
-
try { /* TODO: remove these guards */
|
1071
|
-
sheets[props.SheetNames[i]]=parseSheet(getdata(getzipfile(zip, 'xl/worksheets/sheet' + (i+1) + '.xml')));
|
1072
|
-
} catch(e) {}
|
1073
|
-
}
|
1074
2811
|
}
|
1075
|
-
|
1076
|
-
|
1077
|
-
|
1078
|
-
|
1079
|
-
|
1080
|
-
|
2812
|
+
/* Numbers iOS hack TODO: parse workbook rels to get names */
|
2813
|
+
var nmode = (getzipdata(zip,"xl/worksheets/sheet.xml",true))?1:0;
|
2814
|
+
for(i = 0; i != props.Worksheets; ++i) {
|
2815
|
+
try {
|
2816
|
+
//path = dir.sheets[i].replace(/^\//,'');
|
2817
|
+
path = 'xl/worksheets/sheet'+(i+1-nmode)+(xlsb?'.bin':'.xml');
|
2818
|
+
path = path.replace(/sheet0\./,"sheet.");
|
2819
|
+
relsPath = path.replace(/^(.*)(\/)([^\/]*)$/, "$1/_rels/$3.rels");
|
2820
|
+
sheets[props.SheetNames[i]]=parse_ws(getzipdata(zip, path),path,opts);
|
2821
|
+
sheetRels[props.SheetNames[i]]=parseRels(getzipdata(zip, relsPath, true), path);
|
2822
|
+
} catch(e) { if(opts.WTF) throw e; }
|
1081
2823
|
}
|
1082
|
-
|
2824
|
+
|
2825
|
+
if(dir.comments) parse_comments(zip, dir.comments, sheets, sheetRels, opts);
|
2826
|
+
|
2827
|
+
out = {
|
1083
2828
|
Directory: dir,
|
1084
2829
|
Workbook: wb,
|
1085
2830
|
Props: props,
|
2831
|
+
Custprops: custprops,
|
1086
2832
|
Deps: deps,
|
1087
2833
|
Sheets: sheets,
|
1088
2834
|
SheetNames: props.SheetNames,
|
1089
2835
|
Strings: strs,
|
1090
2836
|
Styles: styles,
|
1091
|
-
keys: keys,
|
1092
|
-
files: zip.files
|
1093
2837
|
};
|
1094
|
-
|
1095
|
-
|
1096
|
-
|
1097
|
-
if(typeof JSZip !== 'undefined') jszip = JSZip;
|
1098
|
-
if (typeof exports !== 'undefined') {
|
1099
|
-
if (typeof module !== 'undefined' && module.exports) {
|
1100
|
-
if(typeof jszip === 'undefined') jszip = require('./jszip').JSZip;
|
1101
|
-
_fs = require('fs');
|
2838
|
+
if(opts.bookFiles) {
|
2839
|
+
out.keys = keys;
|
2840
|
+
out.files = zip.files;
|
1102
2841
|
}
|
2842
|
+
return out;
|
1103
2843
|
}
|
1104
|
-
|
1105
2844
|
function readSync(data, options) {
|
1106
2845
|
var zip, d = data;
|
1107
2846
|
var o = options||{};
|
1108
2847
|
switch((o.type||"base64")){
|
1109
|
-
case "file":
|
2848
|
+
case "file":
|
2849
|
+
if(typeof Buffer !== 'undefined') { zip=new jszip(d=_fs.readFileSync(data)); break; }
|
2850
|
+
d = _fs.readFileSync(data).toString('base64');
|
1110
2851
|
/* falls through */
|
1111
2852
|
case "base64": zip = new jszip(d, { base64:true }); break;
|
1112
2853
|
case "binary": zip = new jszip(d, { base64:false }); break;
|
1113
2854
|
}
|
1114
|
-
return parseZip(zip);
|
2855
|
+
return parseZip(zip, o);
|
1115
2856
|
}
|
1116
2857
|
|
1117
2858
|
function readFileSync(data, options) {
|
@@ -1138,83 +2879,78 @@ function split_cell(cstr) { return cstr.replace(/(\$?[A-Z]*)(\$?[0-9]*)/,"$1,$2"
|
|
1138
2879
|
function decode_cell(cstr) { var splt = split_cell(cstr); return { c:decode_col(splt[0]), r:decode_row(splt[1]) }; }
|
1139
2880
|
function decode_range(range) { var x =range.split(":").map(decode_cell); return {s:x[0],e:x[x.length-1]}; }
|
1140
2881
|
function encode_range(range) { return encode_cell(range.s) + ":" + encode_cell(range.e); }
|
1141
|
-
|
1142
|
-
|
1143
|
-
|
1144
|
-
|
1145
|
-
|
1146
|
-
|
1147
|
-
|
1148
|
-
|
1149
|
-
|
1150
|
-
|
1151
|
-
|
1152
|
-
|
1153
|
-
|
1154
|
-
|
1155
|
-
})];
|
1156
|
-
if(val){
|
1157
|
-
switch(val.t) {
|
1158
|
-
case 's': case 'str': columnHeaders[C] = val.v; break;
|
1159
|
-
case 'n': columnHeaders[C] = val.v; break;
|
1160
|
-
}
|
1161
|
-
}
|
2882
|
+
|
2883
|
+
function sheet_to_row_object_array(sheet, opts){
|
2884
|
+
var val, row, r, hdr = {}, isempty, R, C;
|
2885
|
+
var out = [];
|
2886
|
+
opts = opts || {};
|
2887
|
+
if(!sheet || !sheet["!ref"]) return out;
|
2888
|
+
r = XLSX.utils.decode_range(sheet["!ref"]);
|
2889
|
+
for(R=r.s.r, C = r.s.c; C <= r.e.c; ++C) {
|
2890
|
+
val = sheet[encode_cell({c:C,r:R})];
|
2891
|
+
if(!val) continue;
|
2892
|
+
if(val.w) hdr[C] = val.w;
|
2893
|
+
else switch(val.t) {
|
2894
|
+
case 's': case 'str': hdr[C] = val.v; break;
|
2895
|
+
case 'n': hdr[C] = val.v; break;
|
1162
2896
|
}
|
2897
|
+
}
|
1163
2898
|
|
1164
|
-
|
1165
|
-
|
1166
|
-
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1170
|
-
|
1171
|
-
|
1172
|
-
|
1173
|
-
|
1174
|
-
|
1175
|
-
|
1176
|
-
|
1177
|
-
|
1178
|
-
|
1179
|
-
|
1180
|
-
|
1181
|
-
case 'e': break; /* throw */
|
1182
|
-
default: throw 'unrecognized type ' + val.t;
|
1183
|
-
}
|
1184
|
-
}
|
1185
|
-
if(!emptyRow) {
|
1186
|
-
outSheet.push(rowObject);
|
2899
|
+
for (R = r.s.r + 1; R <= r.e.r; ++R) {
|
2900
|
+
isempty = true;
|
2901
|
+
/* row index available as __rowNum__ */
|
2902
|
+
row = Object.create({ __rowNum__ : R });
|
2903
|
+
for (C = r.s.c; C <= r.e.c; ++C) {
|
2904
|
+
val = sheet[encode_cell({c: C,r: R})];
|
2905
|
+
if(!val || !val.t) continue;
|
2906
|
+
if(typeof val.w !== 'undefined' && !opts.raw) { row[hdr[C]] = val.w; isempty = false; }
|
2907
|
+
else switch(val.t){
|
2908
|
+
case 's': case 'str': case 'b': case 'n':
|
2909
|
+
if(typeof val.v !== 'undefined') {
|
2910
|
+
row[hdr[C]] = val.v;
|
2911
|
+
isempty = false;
|
2912
|
+
}
|
2913
|
+
break;
|
2914
|
+
case 'e': break; /* throw */
|
2915
|
+
default: throw 'unrecognized type ' + val.t;
|
1187
2916
|
}
|
1188
2917
|
}
|
2918
|
+
if(!isempty) out.push(row);
|
1189
2919
|
}
|
1190
|
-
return
|
2920
|
+
return out;
|
1191
2921
|
}
|
1192
2922
|
|
1193
|
-
function sheet_to_csv(sheet) {
|
2923
|
+
function sheet_to_csv(sheet, opts) {
|
1194
2924
|
var stringify = function stringify(val) {
|
2925
|
+
if(!val.t) return "";
|
2926
|
+
if(typeof val.w !== 'undefined') return val.w;
|
1195
2927
|
switch(val.t){
|
1196
2928
|
case 'n': return String(val.v);
|
1197
|
-
case 's': case 'str':
|
1198
|
-
if(typeof val.v === 'undefined') return "";
|
1199
|
-
return JSON.stringify(val.v);
|
2929
|
+
case 's': case 'str': return typeof val.v !== 'undefined' ? val.v : "";
|
1200
2930
|
case 'b': return val.v ? "TRUE" : "FALSE";
|
1201
|
-
case 'e': return
|
2931
|
+
case 'e': return val.v; /* throw out value in case of error */
|
1202
2932
|
default: throw 'unrecognized type ' + val.t;
|
1203
2933
|
}
|
1204
2934
|
};
|
1205
|
-
var out = "";
|
1206
|
-
|
1207
|
-
|
1208
|
-
|
1209
|
-
|
1210
|
-
|
1211
|
-
|
1212
|
-
|
1213
|
-
|
1214
|
-
|
2935
|
+
var out = [], txt = "";
|
2936
|
+
opts = opts || {};
|
2937
|
+
if(!sheet || !sheet["!ref"]) return "";
|
2938
|
+
var r = XLSX.utils.decode_range(sheet["!ref"]);
|
2939
|
+
var fs = opts.FS||",", rs = opts.RS||"\n";
|
2940
|
+
|
2941
|
+
for(var R = r.s.r; R <= r.e.r; ++R) {
|
2942
|
+
var row = [];
|
2943
|
+
for(var C = r.s.c; C <= r.e.c; ++C) {
|
2944
|
+
var val = sheet[XLSX.utils.encode_cell({c:C,r:R})];
|
2945
|
+
if(!val) { row.push(""); continue; }
|
2946
|
+
txt = String(stringify(val));
|
2947
|
+
if(txt.indexOf(fs)!==-1 || txt.indexOf(rs)!==-1 || txt.indexOf('"')!==-1)
|
2948
|
+
txt = "\"" + txt.replace(/"/g, '""') + "\"";
|
2949
|
+
row.push(txt);
|
1215
2950
|
}
|
2951
|
+
out.push(row.join(fs));
|
1216
2952
|
}
|
1217
|
-
return out;
|
2953
|
+
return out.join(rs) + (out.length ? rs : "");
|
1218
2954
|
}
|
1219
2955
|
var make_csv = sheet_to_csv;
|
1220
2956
|
|
@@ -1224,7 +2960,8 @@ function get_formulae(ws) {
|
|
1224
2960
|
var x = ws[y];
|
1225
2961
|
var val = "";
|
1226
2962
|
if(x.f) val = x.f;
|
1227
|
-
else if(typeof x.
|
2963
|
+
else if(typeof x.w !== 'undefined') val = "'" + x.w;
|
2964
|
+
else if(typeof x.v === 'undefined') continue;
|
1228
2965
|
else val = x.v;
|
1229
2966
|
cmds.push(y + "=" + val);
|
1230
2967
|
}
|
@@ -1251,10 +2988,5 @@ if(typeof require !== 'undefined' && typeof exports !== 'undefined') {
|
|
1251
2988
|
exports.read = XLSX.read;
|
1252
2989
|
exports.readFile = XLSX.readFile;
|
1253
2990
|
exports.utils = XLSX.utils;
|
1254
|
-
exports.
|
1255
|
-
var zip = XLSX.read(args[0], {type:'file'});
|
1256
|
-
console.log(zip.Sheets);
|
1257
|
-
};
|
1258
|
-
if(typeof module !== 'undefined' && require.main === module)
|
1259
|
-
exports.main(process.argv.slice(2));
|
2991
|
+
exports.version = XLSX.version;
|
1260
2992
|
}
|