@nocobase/plugin-action-import 2.1.0-beta.9 → 2.2.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client-v2.d.ts +2 -0
- package/client-v2.js +1 -0
- package/dist/client/ImportActionInitializer.d.ts +2 -6
- package/dist/client/buildImportFieldOptions.d.ts +9 -0
- package/dist/client/constants.d.ts +1 -1
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.js +1 -1
- package/dist/client/locale/index.d.ts +2 -1
- package/dist/client/useFields.d.ts +1 -1
- package/dist/{client/models → client-v2}/ImportActionModel.d.ts +2 -2
- package/dist/client-v2/buildImportFieldOptions.d.ts +9 -0
- package/dist/{client/models → client-v2}/getOptionFields.d.ts +1 -1
- package/dist/client-v2/importSupport.d.ts +15 -0
- package/dist/client-v2/index.d.ts +15 -0
- package/dist/client-v2/index.js +10 -0
- package/dist/client-v2/locale.d.ts +9 -0
- package/dist/externalVersion.js +11 -11
- package/dist/node_modules/exceljs/excel.js +15 -15
- package/dist/node_modules/exceljs/package.json +1 -1
- package/dist/node_modules/xlsx/dist/xlsx.core.min.js +17 -16
- package/dist/node_modules/xlsx/dist/xlsx.extendscript.js +378 -80
- package/dist/node_modules/xlsx/dist/xlsx.full.min.js +17 -17
- package/dist/node_modules/xlsx/dist/xlsx.mini.min.js +9 -9
- package/dist/node_modules/xlsx/package.json +1 -1
- package/dist/node_modules/xlsx/types/index.d.ts +40 -8
- package/dist/node_modules/xlsx/xlsx.js +4 -4
- package/dist/server/actions/import-xlsx.d.ts +3 -0
- package/dist/server/actions/import-xlsx.js +16 -8
- package/dist/server/services/xlsx-importer.d.ts +12 -4
- package/dist/server/services/xlsx-importer.js +82 -45
- package/package.json +4 -3
|
@@ -160,7 +160,7 @@ var DO_NOT_EXPORT_CODEPAGE = true;
|
|
|
160
160
|
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false, Set:false, Float32Array:false */
|
|
161
161
|
var XLSX = {};
|
|
162
162
|
function make_xlsx_lib(XLSX){
|
|
163
|
-
XLSX.version = '0.20.
|
|
163
|
+
XLSX.version = '0.20.3';
|
|
164
164
|
var current_codepage = 1200, current_ansi = 1252;
|
|
165
165
|
/*global cptable:true, window */
|
|
166
166
|
var $cptable;
|
|
@@ -695,6 +695,7 @@ function SSF_large_exp(v) {
|
|
|
695
695
|
}
|
|
696
696
|
|
|
697
697
|
function SSF_general_num(v) {
|
|
698
|
+
if(!isFinite(v)) return isNaN(v) ? "#NUM!" : "#DIV/0!";
|
|
698
699
|
var V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;
|
|
699
700
|
|
|
700
701
|
if(V >= -4 && V <= -1) o = v.toPrecision(10+V);
|
|
@@ -1388,6 +1389,8 @@ function choose_fmt(f, v) {
|
|
|
1388
1389
|
if(l<4 && lat>-1) --l;
|
|
1389
1390
|
if(fmt.length > 4) throw new Error("cannot find right format for |" + fmt.join("|") + "|");
|
|
1390
1391
|
if(typeof v !== "number") return [4, fmt.length === 4 || lat>-1?fmt[fmt.length-1]:"@"];
|
|
1392
|
+
/* NOTE: most spreadsheet software do not support NaN or infinities */
|
|
1393
|
+
if(typeof v === "number" && !isFinite(v)) v = 0;
|
|
1391
1394
|
switch(fmt.length) {
|
|
1392
1395
|
case 1: fmt = lat>-1 ? ["General", "General", "General", fmt[0]] : [fmt[0], fmt[0], fmt[0], "@"]; break;
|
|
1393
1396
|
case 2: fmt = lat>-1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], "@"]; break;
|
|
@@ -1424,6 +1427,8 @@ function SSF_format(fmt,v,o) {
|
|
|
1424
1427
|
if(SSF_isgeneral(f[1])) return SSF_general(v, o);
|
|
1425
1428
|
if(v === true) v = "TRUE"; else if(v === false) v = "FALSE";
|
|
1426
1429
|
else if(v === "" || v == null) return "";
|
|
1430
|
+
else if(isNaN(v) && f[1].indexOf("0") > -1) return "#NUM!";
|
|
1431
|
+
else if(!isFinite(v) && f[1].indexOf("0") > -1) return "#DIV/0!";
|
|
1427
1432
|
return eval_fmt(f[1], v, o, f[0]);
|
|
1428
1433
|
}
|
|
1429
1434
|
function SSF_load(fmt, idx) {
|
|
@@ -1547,7 +1552,6 @@ function SSF__load(fmt, idx) {
|
|
|
1547
1552
|
var CRC32 = (function() {
|
|
1548
1553
|
var CRC32 = {};
|
|
1549
1554
|
CRC32.version = '1.2.0';
|
|
1550
|
-
/* see perf/crc32table.js */
|
|
1551
1555
|
/*global Int32Array */
|
|
1552
1556
|
function signed_crc_table() {
|
|
1553
1557
|
var c = 0, table = new Array(256);
|
|
@@ -2946,8 +2950,8 @@ function parse_local_file(blob, csz, usz, o, EF) {
|
|
|
2946
2950
|
if((ef[0x0001]||{}).csz) _csz = ef[0x0001].csz;
|
|
2947
2951
|
if(EF) {
|
|
2948
2952
|
if((EF[0x5455]||{}).mt) date = EF[0x5455].mt;
|
|
2949
|
-
if((EF[0x0001]||{}).usz) _usz =
|
|
2950
|
-
if((EF[0x0001]||{}).csz) _csz =
|
|
2953
|
+
if((EF[0x0001]||{}).usz) _usz = EF[0x0001].usz;
|
|
2954
|
+
if((EF[0x0001]||{}).csz) _csz = EF[0x0001].csz;
|
|
2951
2955
|
}
|
|
2952
2956
|
}
|
|
2953
2957
|
blob.l += efsz;
|
|
@@ -2958,7 +2962,7 @@ function parse_local_file(blob, csz, usz, o, EF) {
|
|
|
2958
2962
|
var data = blob.slice(blob.l, blob.l + _csz);
|
|
2959
2963
|
switch(meth) {
|
|
2960
2964
|
case 8: data = _inflateRawSync(blob, _usz); break;
|
|
2961
|
-
case 0: break; // TODO: scan for magic number
|
|
2965
|
+
case 0: blob.l += _csz; break; // TODO: scan for magic number
|
|
2962
2966
|
default: throw new Error("Unsupported ZIP Compression method " + meth);
|
|
2963
2967
|
}
|
|
2964
2968
|
|
|
@@ -2993,9 +2997,10 @@ function write_zip(cfb, options) {
|
|
|
2993
2997
|
|
|
2994
2998
|
for(i = 1; i < cfb.FullPaths.length; ++i) {
|
|
2995
2999
|
fp = cfb.FullPaths[i].slice(root.length); fi = cfb.FileIndex[i];
|
|
2996
|
-
if(!fi.size || !fi.content || fp == "\u0001Sh33tJ5") continue;
|
|
3000
|
+
if(!fi.size || !fi.content || (Array.isArray(fi.content) && fi.content.length == 0) || fp == "\u0001Sh33tJ5") continue;
|
|
2997
3001
|
var start = start_cd;
|
|
2998
3002
|
|
|
3003
|
+
|
|
2999
3004
|
/* TODO: CP437 filename */
|
|
3000
3005
|
var namebuf = new_buf(fp.length);
|
|
3001
3006
|
for(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);
|
|
@@ -3888,6 +3893,9 @@ function zipentries(zip) {
|
|
|
3888
3893
|
|
|
3889
3894
|
function zip_add_file(zip, path, content) {
|
|
3890
3895
|
if(zip.FullPaths) {
|
|
3896
|
+
if(Array.isArray(content) && typeof content[0] == "string") {
|
|
3897
|
+
content = content.join("");
|
|
3898
|
+
}
|
|
3891
3899
|
if(typeof content == "string") {
|
|
3892
3900
|
var res;
|
|
3893
3901
|
if(has_buf) res = Buffer_from(content);
|
|
@@ -3958,6 +3966,26 @@ function parsexmltag(tag, skip_root, skip_LC) {
|
|
|
3958
3966
|
}
|
|
3959
3967
|
return z;
|
|
3960
3968
|
}
|
|
3969
|
+
function parsexmltagraw(tag, skip_root, skip_LC) {
|
|
3970
|
+
var z = ({});
|
|
3971
|
+
var eq = 0, c = 0;
|
|
3972
|
+
for(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;
|
|
3973
|
+
if(!skip_root) z[0] = tag.slice(0, eq);
|
|
3974
|
+
if(eq === tag.length) return z;
|
|
3975
|
+
var m = tag.match(attregexg), j=0, v="", i=0, q="", cc="", quot = 1;
|
|
3976
|
+
if(m) for(i = 0; i != m.length; ++i) {
|
|
3977
|
+
cc = m[i].slice(1);
|
|
3978
|
+
for(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break;
|
|
3979
|
+
q = cc.slice(0,c).trim();
|
|
3980
|
+
while(cc.charCodeAt(c+1) == 32) ++c;
|
|
3981
|
+
quot = ((eq=cc.charCodeAt(c+1)) == 34 || eq == 39) ? 1 : 0;
|
|
3982
|
+
v = cc.slice(c+1+quot, cc.length-quot);
|
|
3983
|
+
if(q.indexOf("_") > 0) q = q.slice(0, q.indexOf("_")); // from ods
|
|
3984
|
+
z[q] = v;
|
|
3985
|
+
if(!skip_LC) z[q.toLowerCase()] = v;
|
|
3986
|
+
}
|
|
3987
|
+
return z;
|
|
3988
|
+
}
|
|
3961
3989
|
function strip_ns(x) { return x.replace(nsregex2, "<$1"); }
|
|
3962
3990
|
|
|
3963
3991
|
var encodings = {
|
|
@@ -4464,7 +4492,8 @@ function recordhopper(data, cb, opts) {
|
|
|
4464
4492
|
|
|
4465
4493
|
/* control buffer usage for fixed-length buffers */
|
|
4466
4494
|
function buf_array() {
|
|
4467
|
-
var bufs = [], blksz = has_buf ?
|
|
4495
|
+
var bufs = [], blksz = has_buf ? 16384 : 2048;
|
|
4496
|
+
var has_buf_copy = has_buf && (typeof new_buf(blksz).copy == "function");
|
|
4468
4497
|
var newblk = function ba_newblk(sz) {
|
|
4469
4498
|
var o = (new_buf(sz));
|
|
4470
4499
|
prep_blob(o, 0);
|
|
@@ -4493,10 +4522,15 @@ function buf_array() {
|
|
|
4493
4522
|
endbuf();
|
|
4494
4523
|
return bconcat(bufs);
|
|
4495
4524
|
};
|
|
4525
|
+
var end2 = function() {
|
|
4526
|
+
endbuf(); return bufs;
|
|
4527
|
+
};
|
|
4496
4528
|
|
|
4497
|
-
var push = function ba_push(buf) {
|
|
4529
|
+
var push = function ba_push(buf) {
|
|
4530
|
+
endbuf(); curbuf = buf; if(curbuf.l == null) curbuf.l = curbuf.length; next(blksz);
|
|
4531
|
+
};
|
|
4498
4532
|
|
|
4499
|
-
return ({ next:next, push:push, end:end, _bufs:bufs });
|
|
4533
|
+
return ({ next:next, push:push, end:end, _bufs:bufs, end2:end2 });
|
|
4500
4534
|
}
|
|
4501
4535
|
|
|
4502
4536
|
function write_record(ba, type, payload, length) {
|
|
@@ -4683,7 +4717,7 @@ function sheet_add_aoa(_ws, data, opts) {
|
|
|
4683
4717
|
var o = opts || {};
|
|
4684
4718
|
var dense = _ws ? (_ws["!data"] != null) : o.dense;
|
|
4685
4719
|
if(DENSE != null && dense == null) dense = DENSE;
|
|
4686
|
-
var ws = _ws || ({});
|
|
4720
|
+
var ws = _ws || (dense ? ({"!data": []}) : ({}));
|
|
4687
4721
|
if(dense && !ws["!data"]) ws["!data"] = [];
|
|
4688
4722
|
var _R = 0, _C = 0;
|
|
4689
4723
|
if(ws && o.origin != null) {
|
|
@@ -4708,31 +4742,35 @@ function sheet_add_aoa(_ws, data, opts) {
|
|
|
4708
4742
|
for(var R = 0; R != data.length; ++R) {
|
|
4709
4743
|
if(!data[R]) continue;
|
|
4710
4744
|
if(!Array.isArray(data[R])) throw new Error("aoa_to_sheet expects an array of arrays");
|
|
4711
|
-
var __R = _R + R
|
|
4712
|
-
//console.log("!!", R, _R, __R);
|
|
4745
|
+
var __R = _R + R;
|
|
4713
4746
|
if(dense) {
|
|
4714
4747
|
if(!ws["!data"][__R]) ws["!data"][__R] = [];
|
|
4715
4748
|
row = ws["!data"][__R];
|
|
4716
4749
|
}
|
|
4717
|
-
|
|
4718
|
-
|
|
4719
|
-
|
|
4750
|
+
var data_R = data[R];
|
|
4751
|
+
for(var C = 0; C != data_R.length; ++C) {
|
|
4752
|
+
if(typeof data_R[C] === 'undefined') continue;
|
|
4753
|
+
var cell = ({v: data_R[C], t:"" });
|
|
4720
4754
|
var __C = _C + C;
|
|
4721
4755
|
if(range.s.r > __R) range.s.r = __R;
|
|
4722
4756
|
if(range.s.c > __C) range.s.c = __C;
|
|
4723
4757
|
if(range.e.r < __R) range.e.r = __R;
|
|
4724
4758
|
if(range.e.c < __C) range.e.c = __C;
|
|
4725
4759
|
seen = true;
|
|
4726
|
-
if(
|
|
4760
|
+
if(data_R[C] && typeof data_R[C] === 'object' && !Array.isArray(data_R[C]) && !(data_R[C] instanceof Date)) cell = data_R[C];
|
|
4727
4761
|
else {
|
|
4728
|
-
if(Array.isArray(cell.v)) { cell.f =
|
|
4762
|
+
if(Array.isArray(cell.v)) { cell.f = data_R[C][1]; cell.v = cell.v[0]; }
|
|
4729
4763
|
if(cell.v === null) {
|
|
4730
4764
|
if(cell.f) cell.t = 'n';
|
|
4731
4765
|
else if(o.nullError) { cell.t = 'e'; cell.v = 0; }
|
|
4732
4766
|
else if(!o.sheetStubs) continue;
|
|
4733
4767
|
else cell.t = 'z';
|
|
4734
4768
|
}
|
|
4735
|
-
else if(typeof cell.v === 'number')
|
|
4769
|
+
else if(typeof cell.v === 'number') {
|
|
4770
|
+
if(isFinite(cell.v)) cell.t = 'n';
|
|
4771
|
+
else if(isNaN(cell.v)) { cell.t = 'e'; cell.v = 0x0F; /* #VALUE! */ }
|
|
4772
|
+
else { cell.t = 'e'; cell.v = 0x07; }
|
|
4773
|
+
}
|
|
4736
4774
|
else if(typeof cell.v === 'boolean') cell.t = 'b';
|
|
4737
4775
|
else if(cell.v instanceof Date) {
|
|
4738
4776
|
cell.z = o.dateNF || table_fmt[14];
|
|
@@ -4746,7 +4784,7 @@ function sheet_add_aoa(_ws, data, opts) {
|
|
|
4746
4784
|
if(row[__C] && row[__C].z) cell.z = row[__C].z;
|
|
4747
4785
|
row[__C] = cell;
|
|
4748
4786
|
} else {
|
|
4749
|
-
var cell_ref = encode_col(__C) +
|
|
4787
|
+
var cell_ref = encode_col(__C) + (__R + 1);
|
|
4750
4788
|
if(ws[cell_ref] && ws[cell_ref].z) cell.z = ws[cell_ref].z;
|
|
4751
4789
|
ws[cell_ref] = cell;
|
|
4752
4790
|
}
|
|
@@ -4756,7 +4794,6 @@ function sheet_add_aoa(_ws, data, opts) {
|
|
|
4756
4794
|
return ws;
|
|
4757
4795
|
}
|
|
4758
4796
|
function aoa_to_sheet(data, opts) { return sheet_add_aoa(null, data, opts); }
|
|
4759
|
-
|
|
4760
4797
|
function parse_Int32LE(data) {
|
|
4761
4798
|
return data.read_shift(4, 'i');
|
|
4762
4799
|
}
|
|
@@ -6338,8 +6375,8 @@ function parse_TypedPropertyValue(blob, type, _opts) {
|
|
|
6338
6375
|
case 0x03 /*VT_I4*/: ret = blob.read_shift(4, 'i'); return ret;
|
|
6339
6376
|
case 0x0B /*VT_BOOL*/: return blob.read_shift(4) !== 0x0;
|
|
6340
6377
|
case 0x13 /*VT_UI4*/: ret = blob.read_shift(4); return ret;
|
|
6341
|
-
case 0x1E /*VT_LPSTR*/:
|
|
6342
|
-
case 0x1F /*VT_LPWSTR*/:
|
|
6378
|
+
case 0x1E /*VT_LPSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/(^|[^\u0000])\u0000+$/,"$1"); break;
|
|
6379
|
+
case 0x1F /*VT_LPWSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/(^|[^\u0000])\u0000+$/,"$1"); break;
|
|
6343
6380
|
case 0x40 /*VT_FILETIME*/: return parse_FILETIME(blob);
|
|
6344
6381
|
case 0x41 /*VT_BLOB*/: return parse_BLOB(blob);
|
|
6345
6382
|
case 0x47 /*VT_CF*/: return parse_ClipboardData(blob);
|
|
@@ -8631,7 +8668,7 @@ var SYLK = (function() {
|
|
|
8631
8668
|
var o = "C;Y" + (R+1) + ";X" + (C+1) + ";K";
|
|
8632
8669
|
switch(cell.t) {
|
|
8633
8670
|
case 'n':
|
|
8634
|
-
o += (cell.v||0);
|
|
8671
|
+
o += isFinite(cell.v) ? (cell.v||0) : BErr[isNaN(cell.v) ? 0x24 : 0x07];
|
|
8635
8672
|
if(cell.f && !cell.F) o += ";E" + a1_to_rc(cell.f, {r:R, c:C}); break;
|
|
8636
8673
|
case 'b': o += cell.v ? "TRUE" : "FALSE"; break;
|
|
8637
8674
|
case 'e': o += cell.w || BErr[cell.v] || cell.v; break;
|
|
@@ -8860,7 +8897,7 @@ var ETH = (function() {
|
|
|
8860
8897
|
case 'vtc':
|
|
8861
8898
|
switch(record[3]) {
|
|
8862
8899
|
case 'nl': arr[R][C] = +record[4] ? true : false; break;
|
|
8863
|
-
default: arr[R][C] = +record[4]; break;
|
|
8900
|
+
default: arr[R][C] = record[record.length-1].charAt(0) == "#" ? ({t: "e", v: RBErr[record[record.length-1]] }) : +record[4]; break;
|
|
8864
8901
|
}
|
|
8865
8902
|
if(record[2] == 'vtf') arr[R][C] = [arr[R][C], _f];
|
|
8866
8903
|
}
|
|
@@ -8903,11 +8940,7 @@ var ETH = (function() {
|
|
|
8903
8940
|
if(!cell || cell.v == null || cell.t === 'z') continue;
|
|
8904
8941
|
oo = ["cell", coord, 't'];
|
|
8905
8942
|
switch(cell.t) {
|
|
8906
|
-
case 's':
|
|
8907
|
-
case 'n':
|
|
8908
|
-
if(!cell.f) { oo[2]='v'; oo[3]=cell.v; }
|
|
8909
|
-
else { oo[2]='vtf'; oo[3]='n'; oo[4]=cell.v; oo[5]=encode(cell.f); }
|
|
8910
|
-
break;
|
|
8943
|
+
case 's': oo.push(encode(cell.v)); break;
|
|
8911
8944
|
case 'b':
|
|
8912
8945
|
oo[2] = 'vt'+(cell.f?'f':'c'); oo[3]='nl'; oo[4]=cell.v?"1":"0";
|
|
8913
8946
|
oo[5] = encode(cell.f||(cell.v?'TRUE':'FALSE'));
|
|
@@ -8917,6 +8950,19 @@ var ETH = (function() {
|
|
|
8917
8950
|
oo[2] = 'vtc'; oo[3] = 'nd'; oo[4] = ""+t;
|
|
8918
8951
|
oo[5] = cell.w || SSF_format(cell.z || table_fmt[14], t);
|
|
8919
8952
|
break;
|
|
8953
|
+
case 'n':
|
|
8954
|
+
if(isFinite(cell.v)) {
|
|
8955
|
+
if(!cell.f) { oo[2]='v'; oo[3]=cell.v; }
|
|
8956
|
+
else { oo[2]='vtf'; oo[3]='n'; oo[4]=cell.v; oo[5]=encode(cell.f); }
|
|
8957
|
+
} else {
|
|
8958
|
+
oo[2] = 'vt' + (cell.f ? 'f' : 'c');
|
|
8959
|
+
oo[3] = "e" + BErr[isNaN(cell.v) ? 0x24 : 0x07];
|
|
8960
|
+
oo[4] = "0";
|
|
8961
|
+
oo[5] = cell.f || oo[3].slice(1);
|
|
8962
|
+
oo[6] = "e";
|
|
8963
|
+
oo[7] = oo[3].slice(1);
|
|
8964
|
+
}
|
|
8965
|
+
break;
|
|
8920
8966
|
case 'e': continue;
|
|
8921
8967
|
}
|
|
8922
8968
|
o.push(oo.join(":"));
|
|
@@ -8948,6 +8994,7 @@ var PRN = (function() {
|
|
|
8948
8994
|
else if(data === 'FALSE') arr[R][C] = false;
|
|
8949
8995
|
else if(!isNaN(fuzzynum(data))) arr[R][C] = fuzzynum(data);
|
|
8950
8996
|
else if(!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate(data);
|
|
8997
|
+
else if(data.charCodeAt(0) == 35 /* # */ && RBErr[data] != null) arr[R][C] = ({ t: 'e', v: RBErr[data], w: data });
|
|
8951
8998
|
else arr[R][C] = data;
|
|
8952
8999
|
}
|
|
8953
9000
|
|
|
@@ -9065,6 +9112,8 @@ var PRN = (function() {
|
|
|
9065
9112
|
if(o.cellDates) { cell.t = 'd'; cell.v = v; }
|
|
9066
9113
|
else { cell.t = 'n'; cell.v = datenum(v); }
|
|
9067
9114
|
if(!o.cellNF) delete cell.z;
|
|
9115
|
+
} else if(s.charCodeAt(0) == 35 /* # */ && RBErr[s] != null) {
|
|
9116
|
+
cell.t = 'e'; cell.w = s; cell.v = RBErr[s];
|
|
9068
9117
|
} else {
|
|
9069
9118
|
cell.t = 's';
|
|
9070
9119
|
cell.v = s;
|
|
@@ -9764,7 +9813,6 @@ var WK_ = (function() {
|
|
|
9764
9813
|
else console.error("WK1 bad formula parse |" + out.join("|") + "|");
|
|
9765
9814
|
}
|
|
9766
9815
|
|
|
9767
|
-
|
|
9768
9816
|
function parse_cell_3(blob) {
|
|
9769
9817
|
var o = [{c:0,r:0}, {t:'n',v:0}, 0];
|
|
9770
9818
|
o[0].r = blob.read_shift(2); o[3] = blob[blob.l++]; o[0].c = blob[blob.l++];
|
|
@@ -10999,6 +11047,10 @@ function rtf_to_sheet_str(str, opts) {
|
|
|
10999
11047
|
if (o.cellText !== false)
|
|
11000
11048
|
cell.w = cell.v;
|
|
11001
11049
|
cell.v = fuzzynum(cell.v);
|
|
11050
|
+
} else if (RBErr[cell.v] != null) {
|
|
11051
|
+
cell.t = "e";
|
|
11052
|
+
cell.w = cell.v;
|
|
11053
|
+
cell.v = RBErr[cell.v];
|
|
11002
11054
|
}
|
|
11003
11055
|
if (dense)
|
|
11004
11056
|
row[C] = cell;
|
|
@@ -11334,10 +11386,12 @@ function parse_fonts(t, styles, themes, opts) {
|
|
|
11334
11386
|
/* 18.8.2 b CT_BooleanProperty */
|
|
11335
11387
|
case '<b': font.bold = y.val ? parsexmlbool(y.val) : 1; break;
|
|
11336
11388
|
case '<b/>': font.bold = 1; break;
|
|
11389
|
+
case '</b>': case '</b': break;
|
|
11337
11390
|
|
|
11338
11391
|
/* 18.8.26 i CT_BooleanProperty */
|
|
11339
11392
|
case '<i': font.italic = y.val ? parsexmlbool(y.val) : 1; break;
|
|
11340
11393
|
case '<i/>': font.italic = 1; break;
|
|
11394
|
+
case '</i>': case '</i': break;
|
|
11341
11395
|
|
|
11342
11396
|
/* 18.4.13 u CT_UnderlineProperty */
|
|
11343
11397
|
case '<u':
|
|
@@ -11349,48 +11403,55 @@ function parse_fonts(t, styles, themes, opts) {
|
|
|
11349
11403
|
case "doubleAccounting": font.underline = 0x22; break;
|
|
11350
11404
|
} break;
|
|
11351
11405
|
case '<u/>': font.underline = 1; break;
|
|
11406
|
+
case '</u>': case '</u': break;
|
|
11352
11407
|
|
|
11353
11408
|
/* 18.4.10 strike CT_BooleanProperty */
|
|
11354
11409
|
case '<strike': font.strike = y.val ? parsexmlbool(y.val) : 1; break;
|
|
11355
11410
|
case '<strike/>': font.strike = 1; break;
|
|
11411
|
+
case '</strike>': case '</strike': break;
|
|
11356
11412
|
|
|
11357
11413
|
/* 18.4.2 outline CT_BooleanProperty */
|
|
11358
11414
|
case '<outline': font.outline = y.val ? parsexmlbool(y.val) : 1; break;
|
|
11359
11415
|
case '<outline/>': font.outline = 1; break;
|
|
11416
|
+
case '</outline>': case '</outline': break;
|
|
11360
11417
|
|
|
11361
11418
|
/* 18.8.36 shadow CT_BooleanProperty */
|
|
11362
11419
|
case '<shadow': font.shadow = y.val ? parsexmlbool(y.val) : 1; break;
|
|
11363
11420
|
case '<shadow/>': font.shadow = 1; break;
|
|
11421
|
+
case '</shadow>': case '</shadow': break;
|
|
11364
11422
|
|
|
11365
11423
|
/* 18.8.12 condense CT_BooleanProperty */
|
|
11366
11424
|
case '<condense': font.condense = y.val ? parsexmlbool(y.val) : 1; break;
|
|
11367
11425
|
case '<condense/>': font.condense = 1; break;
|
|
11426
|
+
case '</condense>': case '</condense': break;
|
|
11368
11427
|
|
|
11369
11428
|
/* 18.8.17 extend CT_BooleanProperty */
|
|
11370
11429
|
case '<extend': font.extend = y.val ? parsexmlbool(y.val) : 1; break;
|
|
11371
11430
|
case '<extend/>': font.extend = 1; break;
|
|
11431
|
+
case '</extend>': case '</extend': break;
|
|
11372
11432
|
|
|
11373
11433
|
/* 18.4.11 sz CT_FontSize */
|
|
11374
11434
|
case '<sz': if(y.val) font.sz = +y.val; break;
|
|
11375
|
-
case '<sz/>': case '</sz>': break;
|
|
11435
|
+
case '<sz/>': case '</sz>': case '</sz': break;
|
|
11376
11436
|
|
|
11377
11437
|
/* 18.4.14 vertAlign CT_VerticalAlignFontProperty */
|
|
11378
11438
|
case '<vertAlign': if(y.val) font.vertAlign = y.val; break;
|
|
11379
|
-
case '<vertAlign/>': case '</vertAlign>': break;
|
|
11439
|
+
case '<vertAlign/>': case '</vertAlign>': case '</vertAlign': break;
|
|
11380
11440
|
|
|
11381
11441
|
/* 18.8.18 family CT_FontFamily */
|
|
11382
11442
|
case '<family': if(y.val) font.family = parseInt(y.val,10); break;
|
|
11383
|
-
case '<family/>': case '</family>': break;
|
|
11443
|
+
case '<family/>': case '</family>': case '</family': break;
|
|
11384
11444
|
|
|
11385
11445
|
/* 18.8.35 scheme CT_FontScheme */
|
|
11386
11446
|
case '<scheme': if(y.val) font.scheme = y.val; break;
|
|
11387
|
-
case '<scheme/>': case '</scheme>': break;
|
|
11447
|
+
case '<scheme/>': case '</scheme>': case '</scheme': break;
|
|
11388
11448
|
|
|
11389
11449
|
/* 18.4.1 charset CT_IntProperty */
|
|
11390
11450
|
case '<charset':
|
|
11391
11451
|
if(y.val == '1') break;
|
|
11392
11452
|
y.codepage = CS2CP[parseInt(y.val, 10)];
|
|
11393
11453
|
break;
|
|
11454
|
+
case '<charset/>': case '</charset>': case '</charset': break;
|
|
11394
11455
|
|
|
11395
11456
|
/* 18.?.? color CT_Color */
|
|
11396
11457
|
case '<color':
|
|
@@ -11413,11 +11474,11 @@ function parse_fonts(t, styles, themes, opts) {
|
|
|
11413
11474
|
}
|
|
11414
11475
|
|
|
11415
11476
|
break;
|
|
11416
|
-
case '<color/>': case '</color>': break;
|
|
11477
|
+
case '<color/>': case '</color>': case '</color': break;
|
|
11417
11478
|
|
|
11418
11479
|
/* note: sometimes mc:AlternateContent appears bare */
|
|
11419
11480
|
case '<AlternateContent': pass = true; break;
|
|
11420
|
-
case '</AlternateContent>': pass = false; break;
|
|
11481
|
+
case '</AlternateContent>': case '</AlternateContent': pass = false; break;
|
|
11421
11482
|
|
|
11422
11483
|
/* 18.2.10 extLst CT_ExtensionList ? */
|
|
11423
11484
|
case '<extLst': case '<extLst>': case '</extLst>': break;
|
|
@@ -15920,7 +15981,7 @@ function parse_ws_xml(data, opts, idx, rels, wb, themes, styles) {
|
|
|
15920
15981
|
var merges = [];
|
|
15921
15982
|
var _merge = data2.match(mergecregex);
|
|
15922
15983
|
if(_merge) for(ridx = 0; ridx != _merge.length; ++ridx)
|
|
15923
|
-
merges[ridx] = safe_decode_range(_merge[ridx].slice(_merge[ridx].indexOf("
|
|
15984
|
+
merges[ridx] = safe_decode_range(_merge[ridx].slice(_merge[ridx].indexOf("=")+2));
|
|
15924
15985
|
|
|
15925
15986
|
/* 18.3.1.48 hyperlinks CT_Hyperlinks */
|
|
15926
15987
|
var hlink = data2.match(hlinkregex);
|
|
@@ -16379,16 +16440,17 @@ return function parse_ws_xml_data(sdata, s, opts, guess, themes, styles, wb) {
|
|
|
16379
16440
|
|
|
16380
16441
|
function write_ws_xml_data(ws, opts, idx, wb) {
|
|
16381
16442
|
var o = [], r = [], range = safe_decode_range(ws['!ref']), cell="", ref, rr = "", cols = [], R=0, C=0, rows = ws['!rows'];
|
|
16382
|
-
var dense = ws["!data"] != null;
|
|
16443
|
+
var dense = ws["!data"] != null, data = dense ? ws["!data"] : [];
|
|
16383
16444
|
var params = ({r:rr}), row, height = -1;
|
|
16384
16445
|
var date1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;
|
|
16385
16446
|
for(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);
|
|
16386
16447
|
for(R = range.s.r; R <= range.e.r; ++R) {
|
|
16387
16448
|
r = [];
|
|
16388
16449
|
rr = encode_row(R);
|
|
16450
|
+
var data_R = dense ? data[R] : [];
|
|
16389
16451
|
for(C = range.s.c; C <= range.e.c; ++C) {
|
|
16390
16452
|
ref = cols[C] + rr;
|
|
16391
|
-
var _cell = dense ?
|
|
16453
|
+
var _cell = dense ? data_R[C] : ws[ref];
|
|
16392
16454
|
if(_cell === undefined) continue;
|
|
16393
16455
|
if((cell = write_ws_xml_cell(_cell, ref, ws, opts, idx, wb, date1904)) != null) r.push(cell);
|
|
16394
16456
|
}
|
|
@@ -17389,12 +17451,15 @@ function write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen, date1904) {
|
|
|
17389
17451
|
if(cell.v == (cell.v | 0) && cell.v > -1000 && cell.v < 1000) {
|
|
17390
17452
|
if(last_seen) write_record(ba, 0x000D /* BrtShortRk */, write_BrtShortRk(cell, o));
|
|
17391
17453
|
else write_record(ba, 0x0002 /* BrtCellRk */, write_BrtCellRk(cell, o));
|
|
17392
|
-
} else if(isNaN(cell.v)) {
|
|
17393
|
-
if(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError({t:"e", v: 0x24}, o)); // #NUM!
|
|
17394
|
-
else write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError({t:"e", v: 0x24}, o)); // #NUM!
|
|
17395
17454
|
} else if(!isFinite(cell.v)) {
|
|
17396
|
-
|
|
17397
|
-
|
|
17455
|
+
o.t = "e";
|
|
17456
|
+
if(isNaN(cell.v)) {
|
|
17457
|
+
if(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError({t:"e", v: 0x24}, o)); // #NUM!
|
|
17458
|
+
else write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError({t:"e", v: 0x24}, o)); // #NUM!
|
|
17459
|
+
} else {
|
|
17460
|
+
if(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError({t:"e", v: 0x07}, o)); // #DIV/0!
|
|
17461
|
+
else write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError({t:"e", v: 0x07}, o)); // #DIV/0!
|
|
17462
|
+
}
|
|
17398
17463
|
} else {
|
|
17399
17464
|
if(last_seen) write_record(ba, 0x0010 /* BrtShortReal */, write_BrtShortReal(cell, o));
|
|
17400
17465
|
else write_record(ba, 0x0005 /* BrtCellReal */, write_BrtCellReal(cell, o));
|
|
@@ -17416,23 +17481,24 @@ function write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen, date1904) {
|
|
|
17416
17481
|
}
|
|
17417
17482
|
|
|
17418
17483
|
function write_CELLTABLE(ba, ws, idx, opts, wb) {
|
|
17419
|
-
var range = safe_decode_range(ws['!ref'] || "A1"),
|
|
17484
|
+
var range = safe_decode_range(ws['!ref'] || "A1"), rr = "", cols = [];
|
|
17420
17485
|
var date1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;
|
|
17421
17486
|
write_record(ba, 0x0091 /* BrtBeginSheetData */);
|
|
17422
|
-
var dense = ws["!data"] != null;
|
|
17487
|
+
var dense = ws["!data"] != null, row = dense ? ws["!data"][range.s.r] : [];
|
|
17423
17488
|
var cap = range.e.r;
|
|
17424
17489
|
if(ws['!rows']) cap = Math.max(range.e.r, ws['!rows'].length - 1);
|
|
17425
17490
|
for(var R = range.s.r; R <= cap; ++R) {
|
|
17426
17491
|
rr = encode_row(R);
|
|
17492
|
+
if(dense) row = ws["!data"][R];
|
|
17427
17493
|
/* [ACCELLTABLE] */
|
|
17428
17494
|
/* BrtRowHdr */
|
|
17429
17495
|
write_row_header(ba, ws, range, R);
|
|
17496
|
+
if(dense && !row) continue;
|
|
17430
17497
|
var last_seen = false;
|
|
17431
17498
|
if(R <= range.e.r) for(var C = range.s.c; C <= range.e.c; ++C) {
|
|
17432
17499
|
/* *16384CELL */
|
|
17433
17500
|
if(R === range.s.r) cols[C] = encode_col(C);
|
|
17434
|
-
|
|
17435
|
-
var cell = dense ? (ws["!data"][R]||[])[C] : ws[ref];
|
|
17501
|
+
var cell = dense ? row[C] : ws[cols[C] + rr];
|
|
17436
17502
|
if(!cell) { last_seen = false; continue; }
|
|
17437
17503
|
/* write cell */
|
|
17438
17504
|
last_seen = write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen, date1904);
|
|
@@ -19695,7 +19761,13 @@ function write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr){
|
|
|
19695
19761
|
var t = "", p = "";
|
|
19696
19762
|
switch(cell.t) {
|
|
19697
19763
|
case 'z': if(!opts.sheetStubs) return ""; break;
|
|
19698
|
-
case 'n':
|
|
19764
|
+
case 'n': {
|
|
19765
|
+
if(!isFinite(cell.v)) {
|
|
19766
|
+
t = 'Error'; p = BErr[isNaN(cell.v) ? 0x24 : 0x07];
|
|
19767
|
+
} else {
|
|
19768
|
+
t = 'Number'; p = String(cell.v);
|
|
19769
|
+
}
|
|
19770
|
+
} break;
|
|
19699
19771
|
case 'b': t = 'Boolean'; p = (cell.v ? "1" : "0"); break;
|
|
19700
19772
|
case 'e': t = 'Error'; p = BErr[cell.v]; break;
|
|
19701
19773
|
case 'd': t = 'DateTime'; p = new Date(cell.v).toISOString(); if(cell.z == null) cell.z = cell.z || table_fmt[14]; break;
|
|
@@ -19737,9 +19809,12 @@ function write_ws_xlml_table(ws, opts, idx, wb) {
|
|
|
19737
19809
|
o.push(writextag("Column",null,k));
|
|
19738
19810
|
});
|
|
19739
19811
|
var dense = ws["!data"] != null;
|
|
19812
|
+
var addr = {r:0,c:0};
|
|
19740
19813
|
for(var R = range.s.r; R <= range.e.r; ++R) {
|
|
19741
19814
|
var row = [write_ws_xlml_row(R, (ws['!rows']||[])[R])];
|
|
19815
|
+
addr.r = R;
|
|
19742
19816
|
for(var C = range.s.c; C <= range.e.c; ++C) {
|
|
19817
|
+
addr.c = C;
|
|
19743
19818
|
var skip = false;
|
|
19744
19819
|
for(mi = 0; mi != marr.length; ++mi) {
|
|
19745
19820
|
if(marr[mi].s.c > C) continue;
|
|
@@ -19750,7 +19825,6 @@ function write_ws_xlml_table(ws, opts, idx, wb) {
|
|
|
19750
19825
|
break;
|
|
19751
19826
|
}
|
|
19752
19827
|
if(skip) continue;
|
|
19753
|
-
var addr = {r:R,c:C};
|
|
19754
19828
|
var ref = encode_col(C) + encode_row(R), cell = dense ? (ws["!data"][R]||[])[C] : ws[ref];
|
|
19755
19829
|
row.push(write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr));
|
|
19756
19830
|
}
|
|
@@ -19774,7 +19848,7 @@ function write_ws_xlml(idx, opts, wb) {
|
|
|
19774
19848
|
/* WorksheetOptions */
|
|
19775
19849
|
o.push(write_ws_xlml_wsopts(ws, opts, idx, wb));
|
|
19776
19850
|
|
|
19777
|
-
if(ws["!autofilter"]) o.push('<AutoFilter x:Range="' + a1_to_rc(fix_range(ws["!autofilter"].ref), {r:0,c:0}) + '" xmlns="urn:schemas-microsoft-com:office:excel"></AutoFilter>');
|
|
19851
|
+
if(ws && ws["!autofilter"]) o.push('<AutoFilter x:Range="' + a1_to_rc(fix_range(ws["!autofilter"].ref), {r:0,c:0}) + '" xmlns="urn:schemas-microsoft-com:office:excel"></AutoFilter>');
|
|
19778
19852
|
|
|
19779
19853
|
return o.join("");
|
|
19780
19854
|
}
|
|
@@ -19793,11 +19867,10 @@ function write_xlml(wb, opts) {
|
|
|
19793
19867
|
d.push(write_props_xlml(wb, opts));
|
|
19794
19868
|
d.push(write_wb_xlml(wb, opts));
|
|
19795
19869
|
d.push("");
|
|
19796
|
-
d.push(
|
|
19870
|
+
d.push(write_names_xlml(wb, opts));
|
|
19797
19871
|
for(var i = 0; i < wb.SheetNames.length; ++i)
|
|
19798
19872
|
d.push(writextag("Worksheet", write_ws_xlml(i, opts, wb), {"ss:Name":escapexml(wb.SheetNames[i])}));
|
|
19799
19873
|
d[2] = write_sty_xlml(wb, opts);
|
|
19800
|
-
d[3] = write_names_xlml(wb, opts);
|
|
19801
19874
|
return XML_HEADER + writextag("Workbook", d.join(""), {
|
|
19802
19875
|
'xmlns': XLMLNS.ss,
|
|
19803
19876
|
'xmlns:o': XLMLNS.o,
|
|
@@ -21978,7 +22051,7 @@ function write_ws_biff2(ba, ws, idx, opts, wb) {
|
|
|
21978
22051
|
if(range.e.c > 0xFF || range.e.r > 0x3FFF) {
|
|
21979
22052
|
if(opts.WTF) throw new Error("Range " + (ws['!ref'] || "A1") + " exceeds format limit A1:IV16384");
|
|
21980
22053
|
range.e.c = Math.min(range.e.c, 0xFF);
|
|
21981
|
-
range.e.r = Math.min(range.e.
|
|
22054
|
+
range.e.r = Math.min(range.e.r, 0x3FFF);
|
|
21982
22055
|
}
|
|
21983
22056
|
var date1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;
|
|
21984
22057
|
var row = [], comments = [];
|
|
@@ -22387,9 +22460,9 @@ function write_ws_biff8(idx, opts, wb) {
|
|
|
22387
22460
|
var range = safe_decode_range(ws['!ref'] || "A1");
|
|
22388
22461
|
var MAX_ROWS = b8 ? 65536 : 16384;
|
|
22389
22462
|
if(range.e.c > 0xFF || range.e.r >= MAX_ROWS) {
|
|
22390
|
-
if(opts.WTF) throw new Error("Range " + (ws['!ref'] || "A1") + " exceeds format limit A1:
|
|
22463
|
+
if(opts.WTF) throw new Error("Range " + (ws['!ref'] || "A1") + " exceeds format limit A1:IV" + MAX_ROWS);
|
|
22391
22464
|
range.e.c = Math.min(range.e.c, 0xFF);
|
|
22392
|
-
range.e.r = Math.min(range.e.
|
|
22465
|
+
range.e.r = Math.min(range.e.r, MAX_ROWS-1);
|
|
22393
22466
|
}
|
|
22394
22467
|
|
|
22395
22468
|
write_biff_rec(ba, 0x0809, write_BOF(wb, 0x10, opts));
|
|
@@ -22424,12 +22497,11 @@ function write_ws_biff8(idx, opts, wb) {
|
|
|
22424
22497
|
if(dense) row = ws["!data"][R] || [];
|
|
22425
22498
|
rr = encode_row(R);
|
|
22426
22499
|
for(C = range.s.c; C <= range.e.c; ++C) {
|
|
22427
|
-
|
|
22428
|
-
var cell = dense ? row[C] : ws[ref];
|
|
22500
|
+
var cell = dense ? row[C] : ws[cols[C] + rr];
|
|
22429
22501
|
if(!cell) continue;
|
|
22430
22502
|
/* write cell */
|
|
22431
22503
|
write_ws_biff8_cell(ba, cell, R, C, opts, date1904);
|
|
22432
|
-
if(b8 && cell.l) ws['!links'].push([
|
|
22504
|
+
if(b8 && cell.l) ws['!links'].push([cols[C] + rr, cell.l]);
|
|
22433
22505
|
if(cell.c) comments.push([cell.c, R, C]);
|
|
22434
22506
|
}
|
|
22435
22507
|
}
|
|
@@ -22573,6 +22645,9 @@ function write_biff_buf(wb, opts) {
|
|
|
22573
22645
|
if(range.e.c > 255) { // note: 255 is IV
|
|
22574
22646
|
if(typeof console != "undefined" && console.error) console.error("Worksheet '" + wb.SheetNames[i] + "' extends beyond column IV (255). Data may be lost.");
|
|
22575
22647
|
}
|
|
22648
|
+
if(range.e.r > 65535) {
|
|
22649
|
+
if(typeof console != "undefined" && console.error) console.error("Worksheet '" + wb.SheetNames[i] + "' extends beyond row 65536. Data may be lost.");
|
|
22650
|
+
}
|
|
22576
22651
|
}
|
|
22577
22652
|
|
|
22578
22653
|
var o = opts || {};
|
|
@@ -22632,6 +22707,8 @@ function html_to_sheet(str, _opts) {
|
|
|
22632
22707
|
if(opts.UTC === false) o.v = utc_to_local(o.v);
|
|
22633
22708
|
if(!opts.cellDates) o = ({t:'n', v:datenum(o.v)});
|
|
22634
22709
|
o.z = opts.dateNF || table_fmt[14];
|
|
22710
|
+
} else if(m.charCodeAt(0) == 35 /* # */ && RBErr[m] != null) {
|
|
22711
|
+
o.t = 'e'; o.w = m; o.v = RBErr[m];
|
|
22635
22712
|
}
|
|
22636
22713
|
if(o.cellText !== false) o.w = m;
|
|
22637
22714
|
if(dense) { if(!ws["!data"][R]) ws["!data"][R] = []; ws["!data"][R][C] = o; }
|
|
@@ -22659,6 +22736,10 @@ function make_html_row(ws, r, R, o) {
|
|
|
22659
22736
|
if(RS < 0) continue;
|
|
22660
22737
|
var coord = encode_col(C) + encode_row(R);
|
|
22661
22738
|
var cell = dense ? (ws["!data"][R]||[])[C] : ws[coord];
|
|
22739
|
+
if(cell && cell.t == 'n' && cell.v != null && !isFinite(cell.v)) {
|
|
22740
|
+
if(isNaN(cell.v)) cell = ({t:'e', v:0x24, w:BErr[0x24]});
|
|
22741
|
+
else cell = ({t:'e', v:0x07, w:BErr[0x07]});
|
|
22742
|
+
}
|
|
22662
22743
|
/* TODO: html entities */
|
|
22663
22744
|
var w = (cell && cell.v != null) && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || "")) || "";
|
|
22664
22745
|
sp = ({});
|
|
@@ -22769,6 +22850,7 @@ function sheet_add_dom(ws, table, _opts) {
|
|
|
22769
22850
|
if(v != null) {
|
|
22770
22851
|
if(v.length == 0) o.t = _t || 'z';
|
|
22771
22852
|
else if(opts.raw || v.trim().length == 0 || _t == "s"){}
|
|
22853
|
+
else if(_t == "e" && BErr[+v]) o = {t:'e', v:+v, w: BErr[+v]};
|
|
22772
22854
|
else if(v === 'TRUE') o = {t:'b', v:true};
|
|
22773
22855
|
else if(v === 'FALSE') o = {t:'b', v:false};
|
|
22774
22856
|
else if(!isNaN(fuzzynum(v))) o = {t:'n', v:fuzzynum(v)};
|
|
@@ -22777,7 +22859,7 @@ function sheet_add_dom(ws, table, _opts) {
|
|
|
22777
22859
|
if(opts.UTC) o.v = local_to_utc(o.v);
|
|
22778
22860
|
if(!opts.cellDates) o = ({t:'n', v:datenum(o.v)});
|
|
22779
22861
|
o.z = opts.dateNF || table_fmt[14];
|
|
22780
|
-
}
|
|
22862
|
+
} else if(v.charCodeAt(0) == 35 /* # */ && RBErr[v] != null) o = ({t:'e', v: RBErr[v], w: v});
|
|
22781
22863
|
}
|
|
22782
22864
|
if(o.z === undefined && z != null) o.z = z;
|
|
22783
22865
|
/* The first link is used. Links are assumed to be fully specified.
|
|
@@ -23078,7 +23160,7 @@ function parse_content_xml(d, _opts, _nfm) {
|
|
|
23078
23160
|
var Sheets = {}, SheetNames = [];
|
|
23079
23161
|
var ws = ({}); if(opts.dense) ws["!data"] = [];
|
|
23080
23162
|
var Rn, q;
|
|
23081
|
-
var ctag = ({value:""});
|
|
23163
|
+
var ctag = ({value:""}), ctag2 = ({});
|
|
23082
23164
|
var textp = "", textpidx = 0, textptag, oldtextp = "", oldtextpidx = 0;
|
|
23083
23165
|
var textR = [], oldtextR = [];
|
|
23084
23166
|
var R = -1, C = -1, range = {s: {r:1000000,c:10000000}, e: {r:0, c:0}};
|
|
@@ -23137,10 +23219,18 @@ function parse_content_xml(d, _opts, _nfm) {
|
|
|
23137
23219
|
if(rowpeat < 10) for(i = 0; i < rowpeat; ++i) if(row_ol > 0) rowinfo[R + i] = {level: row_ol};
|
|
23138
23220
|
C = -1; break;
|
|
23139
23221
|
case 'covered-table-cell': // 9.1.5 <table:covered-table-cell>
|
|
23140
|
-
if(Rn[1] !== '/')
|
|
23141
|
-
|
|
23142
|
-
|
|
23143
|
-
|
|
23222
|
+
if(Rn[1] !== '/') {
|
|
23223
|
+
++C;
|
|
23224
|
+
ctag = parsexmltag(Rn[0], false);
|
|
23225
|
+
colpeat = parseInt(ctag['number-columns-repeated']||"1",10) || 1;
|
|
23226
|
+
if(opts.sheetStubs) {
|
|
23227
|
+
while(colpeat-- > 0) {
|
|
23228
|
+
if(opts.dense) { if(!ws["!data"][R]) ws["!data"][R] = []; ws["!data"][R][C] = {t:'z'}; }
|
|
23229
|
+
else ws[encode_cell({r:R,c:C})] = {t:'z'};
|
|
23230
|
+
++C;
|
|
23231
|
+
} --C;
|
|
23232
|
+
}
|
|
23233
|
+
else C += colpeat - 1;
|
|
23144
23234
|
}
|
|
23145
23235
|
textp = ""; textR = [];
|
|
23146
23236
|
break; /* stub */
|
|
@@ -23148,7 +23238,7 @@ function parse_content_xml(d, _opts, _nfm) {
|
|
|
23148
23238
|
if(Rn[0].charAt(Rn[0].length-2) === '/') {
|
|
23149
23239
|
++C;
|
|
23150
23240
|
ctag = parsexmltag(Rn[0], false);
|
|
23151
|
-
colpeat = parseInt(ctag['number-columns-repeated']||"1", 10);
|
|
23241
|
+
colpeat = parseInt(ctag['number-columns-repeated']||"1", 10)||1;
|
|
23152
23242
|
q = ({t:'z', v:null});
|
|
23153
23243
|
if(ctag.formula && opts.cellFormula != false) q.f = ods_to_csf_formula(unescapexml(ctag.formula));
|
|
23154
23244
|
if(ctag["style-name"] && styles[ctag["style-name"]]) q.z = styles[ctag["style-name"]];
|
|
@@ -23172,6 +23262,7 @@ function parse_content_xml(d, _opts, _nfm) {
|
|
|
23172
23262
|
if(R < range.s.r) range.s.r = R;
|
|
23173
23263
|
if(rptR > range.e.r) range.e.r = rptR;
|
|
23174
23264
|
ctag = parsexmltag(Rn[0], false);
|
|
23265
|
+
ctag2 = parsexmltagraw(Rn[0], true);
|
|
23175
23266
|
comments = []; comment = ({});
|
|
23176
23267
|
q = ({t:ctag['数据类型'] || ctag['value-type'], v:null});
|
|
23177
23268
|
if(ctag["style-name"] && styles[ctag["style-name"]]) q.z = styles[ctag["style-name"]];
|
|
@@ -23191,10 +23282,12 @@ function parse_content_xml(d, _opts, _nfm) {
|
|
|
23191
23282
|
q.F = arrayf[i][1];
|
|
23192
23283
|
}
|
|
23193
23284
|
if(ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {
|
|
23194
|
-
mR = parseInt(ctag['number-rows-spanned'],10) ||
|
|
23195
|
-
mC = parseInt(ctag['number-columns-spanned'],10) ||
|
|
23196
|
-
|
|
23197
|
-
|
|
23285
|
+
mR = parseInt(ctag['number-rows-spanned']||"1",10) || 1;
|
|
23286
|
+
mC = parseInt(ctag['number-columns-spanned']||"1",10) || 1;
|
|
23287
|
+
if(mR * mC > 1) {
|
|
23288
|
+
mrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};
|
|
23289
|
+
merges.push(mrange);
|
|
23290
|
+
}
|
|
23198
23291
|
}
|
|
23199
23292
|
|
|
23200
23293
|
/* 19.675.2 table:number-columns-repeated */
|
|
@@ -23225,6 +23318,9 @@ function parse_content_xml(d, _opts, _nfm) {
|
|
|
23225
23318
|
}
|
|
23226
23319
|
} else {
|
|
23227
23320
|
isstub = false;
|
|
23321
|
+
if(ctag2['calcext:value-type'] == "error" && RBErr[textp] != null) {
|
|
23322
|
+
q.t = 'e'; q.w = textp; q.v = RBErr[textp];
|
|
23323
|
+
}
|
|
23228
23324
|
if(q.t === 's') {
|
|
23229
23325
|
q.v = textp || '';
|
|
23230
23326
|
if(textR.length) q.R = textR;
|
|
@@ -23623,7 +23719,6 @@ function parse_fods(data, opts) {
|
|
|
23623
23719
|
wb.bookType = "fods";
|
|
23624
23720
|
return wb;
|
|
23625
23721
|
}
|
|
23626
|
-
|
|
23627
23722
|
/* OpenDocument */
|
|
23628
23723
|
var write_styles_ods = /* @__PURE__ */(function() {
|
|
23629
23724
|
var master_styles = [
|
|
@@ -23888,9 +23983,22 @@ var write_content_ods = /* @__PURE__ */(function() {
|
|
|
23888
23983
|
ct['office:boolean-value'] = (cell.v ? 'true' : 'false');
|
|
23889
23984
|
break;
|
|
23890
23985
|
case 'n':
|
|
23891
|
-
|
|
23892
|
-
|
|
23893
|
-
|
|
23986
|
+
if(!isFinite(cell.v)) {
|
|
23987
|
+
if(isNaN(cell.v)) {
|
|
23988
|
+
textp = "#NUM!";
|
|
23989
|
+
ct['table:formula'] = "of:=#NUM!";
|
|
23990
|
+
} else {
|
|
23991
|
+
textp = "#DIV/0!";
|
|
23992
|
+
ct['table:formula'] = "of:=" + (cell.v < 0 ? "-" : "") + "1/0";
|
|
23993
|
+
}
|
|
23994
|
+
ct['office:string-value'] = "";
|
|
23995
|
+
ct['office:value-type'] = "string";
|
|
23996
|
+
ct['calcext:value-type'] = "error";
|
|
23997
|
+
} else {
|
|
23998
|
+
textp = (cell.w||String(cell.v||0));
|
|
23999
|
+
ct['office:value-type'] = "float";
|
|
24000
|
+
ct['office:value'] = (cell.v||0);
|
|
24001
|
+
}
|
|
23894
24002
|
break;
|
|
23895
24003
|
case 's': case 'str':
|
|
23896
24004
|
textp = cell.v == null ? "" : cell.v;
|
|
@@ -25242,7 +25350,7 @@ function s5s_to_iwa_comment(s5s) {
|
|
|
25242
25350
|
return out;
|
|
25243
25351
|
}
|
|
25244
25352
|
function parse_TST_TableModelArchive(M, root, ws, opts) {
|
|
25245
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
25353
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
|
|
25246
25354
|
var pb = parse_shallow(root.data);
|
|
25247
25355
|
var range = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };
|
|
25248
25356
|
range.e.r = (varint_to_i32(pb[6][0].data) >>> 0) - 1;
|
|
@@ -25321,6 +25429,38 @@ function parse_TST_TableModelArchive(M, root, ws, opts) {
|
|
|
25321
25429
|
};
|
|
25322
25430
|
});
|
|
25323
25431
|
}
|
|
25432
|
+
if (!((_k = ws["!merges"]) == null ? void 0 : _k.length) && ((_l = pb[47]) == null ? void 0 : _l[0])) {
|
|
25433
|
+
var merge_owner = parse_shallow(pb[47][0].data);
|
|
25434
|
+
if ((_m = merge_owner[2]) == null ? void 0 : _m[0]) {
|
|
25435
|
+
var formula_store = parse_shallow(merge_owner[2][0].data);
|
|
25436
|
+
if ((_n = formula_store[3]) == null ? void 0 : _n[0]) {
|
|
25437
|
+
ws["!merges"] = mappa(formula_store[3], function(u) {
|
|
25438
|
+
var _a2, _b2, _c2, _d2, _e2;
|
|
25439
|
+
var formula_pair = parse_shallow(u);
|
|
25440
|
+
var formula = parse_shallow(formula_pair[2][0].data);
|
|
25441
|
+
var AST_node_array = parse_shallow(formula[1][0].data);
|
|
25442
|
+
if (!((_a2 = AST_node_array[1]) == null ? void 0 : _a2[0]))
|
|
25443
|
+
return;
|
|
25444
|
+
var AST_node0 = parse_shallow(AST_node_array[1][0].data);
|
|
25445
|
+
var AST_node_type = varint_to_i32(AST_node0[1][0].data);
|
|
25446
|
+
if (AST_node_type != 67)
|
|
25447
|
+
return;
|
|
25448
|
+
var AST_colon_tract = parse_shallow(AST_node0[40][0].data);
|
|
25449
|
+
if (!((_b2 = AST_colon_tract[3]) == null ? void 0 : _b2[0]) || !((_c2 = AST_colon_tract[4]) == null ? void 0 : _c2[0]))
|
|
25450
|
+
return;
|
|
25451
|
+
var colrange = parse_shallow(AST_colon_tract[3][0].data);
|
|
25452
|
+
var rowrange = parse_shallow(AST_colon_tract[4][0].data);
|
|
25453
|
+
var c = varint_to_i32(colrange[1][0].data);
|
|
25454
|
+
var C = ((_d2 = colrange[2]) == null ? void 0 : _d2[0]) ? varint_to_i32(colrange[2][0].data) : c;
|
|
25455
|
+
var r = varint_to_i32(rowrange[1][0].data);
|
|
25456
|
+
var R = ((_e2 = rowrange[2]) == null ? void 0 : _e2[0]) ? varint_to_i32(rowrange[2][0].data) : r;
|
|
25457
|
+
return { s: { r: r, c: c }, e: { r: R, c: C } };
|
|
25458
|
+
}).filter(function(x) {
|
|
25459
|
+
return x != null;
|
|
25460
|
+
});
|
|
25461
|
+
}
|
|
25462
|
+
}
|
|
25463
|
+
}
|
|
25324
25464
|
}
|
|
25325
25465
|
function parse_TST_TableInfoArchive(M, root, opts) {
|
|
25326
25466
|
var pb = parse_shallow(root.data);
|
|
@@ -27127,6 +27267,8 @@ function readSync(data, opts) {
|
|
|
27127
27267
|
var o = opts||{};
|
|
27128
27268
|
if(o.codepage && typeof $cptable === "undefined") console.error("Codepage tables are not loaded. Non-ASCII characters may not give expected results");
|
|
27129
27269
|
if(typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) return readSync(new Uint8Array(data), (o = dup(o), o.type = "array", o));
|
|
27270
|
+
/* Javet projects `byte[]` to `Int8Array` */
|
|
27271
|
+
if(typeof Int8Array !== 'undefined' && data instanceof Int8Array) return readSync(new Uint8Array(data.buffer, data.byteOffset, data.length), o);
|
|
27130
27272
|
if(typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && !o.type) o.type = typeof Deno !== "undefined" ? "buffer" : "array";
|
|
27131
27273
|
var d = data, n = [0,0,0,0], str = false;
|
|
27132
27274
|
if(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }
|
|
@@ -27482,7 +27624,7 @@ function sheet_to_json(sheet, opts) {
|
|
|
27482
27624
|
}
|
|
27483
27625
|
|
|
27484
27626
|
var qreg = /"/g;
|
|
27485
|
-
function make_csv_row(sheet, r, R, cols, fs, rs, FS, o) {
|
|
27627
|
+
function make_csv_row(sheet, r, R, cols, fs, rs, FS, w, o) {
|
|
27486
27628
|
var isempty = true;
|
|
27487
27629
|
var row = [], txt = "", rr = encode_row(R);
|
|
27488
27630
|
var dense = sheet["!data"] != null;
|
|
@@ -27495,7 +27637,7 @@ function make_csv_row(sheet, r, R, cols, fs, rs, FS, o) {
|
|
|
27495
27637
|
isempty = false;
|
|
27496
27638
|
txt = ''+(o.rawNumbers && val.t == "n" ? val.v : format_cell(val, null, o));
|
|
27497
27639
|
for(var i = 0, cc = 0; i !== txt.length; ++i) if((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34 || o.forceQuotes) {txt = "\"" + txt.replace(qreg, '""') + "\""; break; }
|
|
27498
|
-
if(txt == "ID") txt = '"ID"';
|
|
27640
|
+
if(txt == "ID" && w == 0 && row.length == 0) txt = '"ID"';
|
|
27499
27641
|
} else if(val.f != null && !val.F) {
|
|
27500
27642
|
isempty = false;
|
|
27501
27643
|
txt = '=' + val.f; if(txt.indexOf(",") >= 0) txt = '"' + txt.replace(qreg, '""') + '"';
|
|
@@ -27522,7 +27664,7 @@ function sheet_to_csv(sheet, opts) {
|
|
|
27522
27664
|
var w = 0;
|
|
27523
27665
|
for(var R = r.s.r; R <= r.e.r; ++R) {
|
|
27524
27666
|
if ((rowinfo[R]||{}).hidden) continue;
|
|
27525
|
-
row = make_csv_row(sheet, r, R, cols, fs, rs, FS, o);
|
|
27667
|
+
row = make_csv_row(sheet, r, R, cols, fs, rs, FS, w, o);
|
|
27526
27668
|
if(row == null) { continue; }
|
|
27527
27669
|
if(row || (o.blankrows !== false)) out.push((w++ ? RS : "") + row);
|
|
27528
27670
|
}
|
|
@@ -27537,7 +27679,7 @@ function sheet_to_txt(sheet, opts) {
|
|
|
27537
27679
|
return String.fromCharCode(255) + String.fromCharCode(254) + o;
|
|
27538
27680
|
}
|
|
27539
27681
|
|
|
27540
|
-
function sheet_to_formulae(sheet) {
|
|
27682
|
+
function sheet_to_formulae(sheet, opts) {
|
|
27541
27683
|
var y = "", x, val="";
|
|
27542
27684
|
if(sheet == null || sheet["!ref"] == null) return [];
|
|
27543
27685
|
var r = safe_decode_range(sheet['!ref']), rr = "", cols = [], C;
|
|
@@ -27558,6 +27700,7 @@ function sheet_to_formulae(sheet) {
|
|
|
27558
27700
|
if(y.indexOf(":") == -1) y = y + ":" + y;
|
|
27559
27701
|
}
|
|
27560
27702
|
if(x.f != null) val = x.f;
|
|
27703
|
+
else if(opts && opts.values === false) continue;
|
|
27561
27704
|
else if(x.t == 'z') continue;
|
|
27562
27705
|
else if(x.t == 'n' && x.v != null) val = "" + x.v;
|
|
27563
27706
|
else if(x.t == 'b') val = x.v ? "TRUE" : "FALSE";
|
|
@@ -27826,7 +27969,7 @@ function write_csv_stream(sheet, opts) {
|
|
|
27826
27969
|
while(R <= r.e.r) {
|
|
27827
27970
|
++R;
|
|
27828
27971
|
if ((rowinfo[R-1]||{}).hidden) continue;
|
|
27829
|
-
row = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o);
|
|
27972
|
+
row = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, w, o);
|
|
27830
27973
|
if(row != null) {
|
|
27831
27974
|
if(row || (o.blankrows !== false)) return stream.push((w++ ? RS : "") + row);
|
|
27832
27975
|
}
|
|
@@ -27923,10 +28066,165 @@ function write_json_stream(sheet, opts) {
|
|
|
27923
28066
|
return stream;
|
|
27924
28067
|
}
|
|
27925
28068
|
|
|
28069
|
+
function write_xlml_stream(wb, o) {
|
|
28070
|
+
var stream = _Readable();
|
|
28071
|
+
var opts = o == null ? {} : o;
|
|
28072
|
+
var stride = +opts.stride || 10;
|
|
28073
|
+
if(!wb.SSF) wb.SSF = dup(table_fmt);
|
|
28074
|
+
if(wb.SSF) {
|
|
28075
|
+
make_ssf(); SSF_load_table(wb.SSF);
|
|
28076
|
+
// $FlowIgnore
|
|
28077
|
+
opts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;
|
|
28078
|
+
opts.ssf = wb.SSF;
|
|
28079
|
+
opts.cellXfs = [];
|
|
28080
|
+
get_cell_style(opts.cellXfs, {}, {revssf:{"General":0}});
|
|
28081
|
+
}
|
|
28082
|
+
|
|
28083
|
+
/* do one pass to determine styles since they must be added before tables */
|
|
28084
|
+
wb.SheetNames.forEach(function(n) {
|
|
28085
|
+
var ws = wb.Sheets[n];
|
|
28086
|
+
if(!ws || !ws["!ref"]) return;
|
|
28087
|
+
var range = decode_range(ws["!ref"]);
|
|
28088
|
+
var dense = ws["!data"] != null;
|
|
28089
|
+
var ddata = dense ? ws["!data"] : [];
|
|
28090
|
+
var addr = {r:0,c:0};
|
|
28091
|
+
for(var R = range.s.r; R <= range.e.r; ++R) {
|
|
28092
|
+
addr.r = R;
|
|
28093
|
+
if(dense && !ddata[R]) continue;
|
|
28094
|
+
for(var C = range.s.c; C <= range.e.c; ++C) {
|
|
28095
|
+
addr.c = C;
|
|
28096
|
+
var cell = dense ? ddata[R][C] : ws[encode_col(C) + encode_row(R)];
|
|
28097
|
+
if(!cell) continue;
|
|
28098
|
+
if(cell.t == "d" && cell.z == null) { cell = dup(cell); cell.z = table_fmt[14]; }
|
|
28099
|
+
void get_cell_style(opts.cellXfs, cell, opts);
|
|
28100
|
+
}
|
|
28101
|
+
}
|
|
28102
|
+
});
|
|
28103
|
+
var sty = write_sty_xlml(wb, opts);
|
|
28104
|
+
|
|
28105
|
+
var stage = 0, wsidx = 0, ws = wb.Sheets[wb.SheetNames[wsidx]], range = safe_decode_range(ws), R = -1, T = false;
|
|
28106
|
+
|
|
28107
|
+
var marr = [], mi = 0, dense = false, darr = [], addr = {r:0,c:0};
|
|
28108
|
+
|
|
28109
|
+
stream._read = function() { switch(stage) {
|
|
28110
|
+
/* header */
|
|
28111
|
+
case 0: {
|
|
28112
|
+
stage = 1;
|
|
28113
|
+
stream.push(XML_HEADER);
|
|
28114
|
+
stream.push("<Workbook" + wxt_helper({
|
|
28115
|
+
'xmlns': XLMLNS.ss,
|
|
28116
|
+
'xmlns:o': XLMLNS.o,
|
|
28117
|
+
'xmlns:x': XLMLNS.x,
|
|
28118
|
+
'xmlns:ss': XLMLNS.ss,
|
|
28119
|
+
'xmlns:dt': XLMLNS.dt,
|
|
28120
|
+
'xmlns:html': XLMLNS.html
|
|
28121
|
+
}) + ">");
|
|
28122
|
+
} break;
|
|
28123
|
+
|
|
28124
|
+
/* preamble */
|
|
28125
|
+
case 1: {
|
|
28126
|
+
stage = 2;
|
|
28127
|
+
stream.push(write_props_xlml(wb, opts));
|
|
28128
|
+
stream.push(write_wb_xlml(wb, opts));
|
|
28129
|
+
} break;
|
|
28130
|
+
|
|
28131
|
+
/* style and name tables */
|
|
28132
|
+
case 2: {
|
|
28133
|
+
stage = 3;
|
|
28134
|
+
stream.push(sty);
|
|
28135
|
+
stream.push(write_names_xlml(wb, opts));
|
|
28136
|
+
} break;
|
|
28137
|
+
|
|
28138
|
+
/* worksheet preamble */
|
|
28139
|
+
case 3: {
|
|
28140
|
+
T = false;
|
|
28141
|
+
if(wsidx >= wb.SheetNames.length) { stage = -1; stream.push(""); break; }
|
|
28142
|
+
|
|
28143
|
+
stream.push("<Worksheet" + wxt_helper({ "ss:Name": escapexml(wb.SheetNames[wsidx])}) + ">");
|
|
28144
|
+
|
|
28145
|
+
ws = wb.Sheets[wb.SheetNames[wsidx]];
|
|
28146
|
+
if(!ws) { stream.push("</Worksheet>"); return void ++wsidx; }
|
|
28147
|
+
|
|
28148
|
+
var names = write_ws_xlml_names(ws, opts, wsidx, wb);
|
|
28149
|
+
if(names.length) stream.push("<Names>" + names + "</Names>");
|
|
28150
|
+
|
|
28151
|
+
if(!ws["!ref"]) return (stage = 5);
|
|
28152
|
+
range = safe_decode_range(ws["!ref"]);
|
|
28153
|
+
R = range.s.r;
|
|
28154
|
+
stage = 4;
|
|
28155
|
+
} break;
|
|
28156
|
+
|
|
28157
|
+
/* worksheet intramble */
|
|
28158
|
+
case 4: {
|
|
28159
|
+
if(R < 0 || R > range.e.r) { if(T) stream.push("</Table>"); return void (stage = 5); }
|
|
28160
|
+
|
|
28161
|
+
if(R <= range.s.r) {
|
|
28162
|
+
if(ws['!cols']) ws['!cols'].forEach(function(n, i) {
|
|
28163
|
+
process_col(n);
|
|
28164
|
+
var w = !!n.width;
|
|
28165
|
+
var p = col_obj_w(i, n);
|
|
28166
|
+
var k = {"ss:Index":i+1};
|
|
28167
|
+
if(w) k['ss:Width'] = width2px(p.width);
|
|
28168
|
+
if(n.hidden) k['ss:Hidden']="1";
|
|
28169
|
+
if(!T) { T = true; stream.push("<Table>"); }
|
|
28170
|
+
stream.push(writextag("Column",null,k));
|
|
28171
|
+
});
|
|
28172
|
+
dense = ws["!data"] != null;
|
|
28173
|
+
if(dense) darr = ws["!data"];
|
|
28174
|
+
addr.r = addr.c = 0;
|
|
28175
|
+
}
|
|
28176
|
+
|
|
28177
|
+
/* undefined `stride` rows per invocation */
|
|
28178
|
+
for(var cnt = 0; R <= range.e.r && cnt < stride; ++R, ++cnt) {
|
|
28179
|
+
var row = [write_ws_xlml_row(R, (ws['!rows']||[])[R])];
|
|
28180
|
+
addr.r = R;
|
|
28181
|
+
if(!(dense && !darr[R])) for(var C = range.s.c; C <= range.e.c; ++C) {
|
|
28182
|
+
addr.c = C;
|
|
28183
|
+
var skip = false;
|
|
28184
|
+
for(mi = 0; mi != marr.length; ++mi) {
|
|
28185
|
+
if(marr[mi].s.c > C) continue;
|
|
28186
|
+
if(marr[mi].s.r > R) continue;
|
|
28187
|
+
if(marr[mi].e.c < C) continue;
|
|
28188
|
+
if(marr[mi].e.r < R) continue;
|
|
28189
|
+
if(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;
|
|
28190
|
+
break;
|
|
28191
|
+
}
|
|
28192
|
+
if(skip) continue;
|
|
28193
|
+
var ref = encode_col(C) + encode_row(R), cell = dense ? darr[R][C] : ws[ref];
|
|
28194
|
+
row.push(write_ws_xlml_cell(cell, ref, ws, opts, wsidx, wb, addr));
|
|
28195
|
+
}
|
|
28196
|
+
row.push("</Row>");
|
|
28197
|
+
if(!T) { T = true; stream.push("<Table>"); }
|
|
28198
|
+
stream.push(row.join(""));
|
|
28199
|
+
}
|
|
28200
|
+
} break;
|
|
28201
|
+
|
|
28202
|
+
/* worksheet postamble */
|
|
28203
|
+
case 5: {
|
|
28204
|
+
stream.push(write_ws_xlml_wsopts(ws, opts, wsidx, wb));
|
|
28205
|
+
if(ws && ws["!autofilter"]) stream.push('<AutoFilter x:Range="' + a1_to_rc(fix_range(ws["!autofilter"].ref), {r:0,c:0}) + '" xmlns="urn:schemas-microsoft-com:office:excel"></AutoFilter>');
|
|
28206
|
+
stream.push("</Worksheet>");
|
|
28207
|
+
wsidx++; R = -1;
|
|
28208
|
+
return void (stage = 3);
|
|
28209
|
+
}
|
|
28210
|
+
|
|
28211
|
+
/* footer */
|
|
28212
|
+
case -1: {
|
|
28213
|
+
stage = -2;
|
|
28214
|
+
stream.push("</Workbook>");
|
|
28215
|
+
} break;
|
|
28216
|
+
|
|
28217
|
+
/* exeunt */
|
|
28218
|
+
case -2: stream.push(null); break;
|
|
28219
|
+
}};
|
|
28220
|
+
return stream;
|
|
28221
|
+
}
|
|
28222
|
+
|
|
27926
28223
|
var __stream = {
|
|
27927
28224
|
to_json: write_json_stream,
|
|
27928
28225
|
to_html: write_html_stream,
|
|
27929
28226
|
to_csv: write_csv_stream,
|
|
28227
|
+
to_xlml: write_xlml_stream,
|
|
27930
28228
|
set_readable: set_readable
|
|
27931
28229
|
};
|
|
27932
28230
|
if(typeof parse_xlscfb !== "undefined") XLSX.parse_xlscfb = parse_xlscfb;
|