@sunertech/docx 10.0.1 → 10.0.3

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/dist/index.mjs CHANGED
@@ -10485,9 +10485,34 @@ function Base64_encode(input) {
10485
10485
  }
10486
10486
  return o;
10487
10487
  }
10488
+ function Base64_encode_arr(input) {
10489
+ var o = "";
10490
+ var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;
10491
+ for (var i = 0; i < input.length; ) {
10492
+ c1 = input[i++];
10493
+ e1 = c1 >> 2;
10494
+ c2 = input[i++];
10495
+ e2 = (c1 & 3) << 4 | c2 >> 4;
10496
+ c3 = input[i++];
10497
+ e3 = (c2 & 15) << 2 | c3 >> 6;
10498
+ e4 = c3 & 63;
10499
+ if (isNaN(c2)) {
10500
+ e3 = e4 = 64;
10501
+ } else if (isNaN(c3)) {
10502
+ e4 = 64;
10503
+ }
10504
+ o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);
10505
+ }
10506
+ return o;
10507
+ }
10488
10508
  function Base64_decode(input) {
10489
10509
  var o = "";
10490
10510
  var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;
10511
+ if (input.slice(0, 5) == "data:") {
10512
+ var i = input.slice(0, 1024).indexOf(";base64,");
10513
+ if (i > -1)
10514
+ input = input.slice(i + 8);
10515
+ }
10491
10516
  input = input.replace(/[^\w\+\/\=]/g, "");
10492
10517
  for (var i = 0; i < input.length; ) {
10493
10518
  e1 = Base64_map.indexOf(input.charAt(i++));
@@ -10525,6 +10550,13 @@ var Buffer_from = /* @__PURE__ */ (function() {
10525
10550
  return function() {
10526
10551
  };
10527
10552
  })();
10553
+ var buf_utf16le = /* @__PURE__ */ (function() {
10554
+ if (typeof Buffer === "undefined") return false;
10555
+ var x = Buffer_from([65, 0]);
10556
+ if (!x) return false;
10557
+ var o = x.toString("utf16le");
10558
+ return o.length == 1;
10559
+ })();
10528
10560
  function new_raw_buf(len) {
10529
10561
  if (has_buf) return Buffer.alloc ? Buffer.alloc(len) : new Buffer(len);
10530
10562
  return typeof Uint8Array != "undefined" ? new Uint8Array(len) : new Array(len);
@@ -10570,9 +10602,8 @@ var bconcat = has_buf ? function(bufs) {
10570
10602
  for (i = 0, maxlen = 0; i < bufs.length; maxlen += len, ++i) {
10571
10603
  len = bufs[i].length;
10572
10604
  if (bufs[i] instanceof Uint8Array) o.set(bufs[i], maxlen);
10573
- else if (typeof bufs[i] == "string") {
10574
- throw "wtf";
10575
- } else o.set(new Uint8Array(bufs[i]), maxlen);
10605
+ else if (typeof bufs[i] == "string") o.set(new Uint8Array(s2a(bufs[i])), maxlen);
10606
+ else o.set(new Uint8Array(bufs[i]), maxlen);
10576
10607
  }
10577
10608
  return o;
10578
10609
  }
@@ -10841,8 +10872,19 @@ function SSF_frac(x, D, mixed) {
10841
10872
  var q = Math.floor(sgn * P / Q);
10842
10873
  return [q, sgn * P - q * Q, Q];
10843
10874
  }
10875
+ function SSF_normalize_xl_unsafe(v) {
10876
+ var s = v.toPrecision(16);
10877
+ if (s.indexOf("e") > -1) {
10878
+ var m = s.slice(0, s.indexOf("e"));
10879
+ m = m.indexOf(".") > -1 ? m.slice(0, m.slice(0, 2) == "0." ? 17 : 16) : m.slice(0, 15) + fill("0", m.length - 15);
10880
+ return m + s.slice(s.indexOf("e"));
10881
+ }
10882
+ var n = s.indexOf(".") > -1 ? s.slice(0, s.slice(0, 2) == "0." ? 17 : 16) : s.slice(0, 15) + fill("0", s.length - 15);
10883
+ return Number(n);
10884
+ }
10844
10885
  function SSF_parse_date_code(v, opts, b2) {
10845
10886
  if (v > 2958465 || v < 0) return null;
10887
+ v = SSF_normalize_xl_unsafe(v);
10846
10888
  var date = v | 0, time = Math.floor(86400 * (v - date)), dow = 0;
10847
10889
  var dout = [];
10848
10890
  var out = { D: date, T: time, u: 86400 * (v - date) - time, y: 0, m: 0, d: 0, H: 0, M: 0, S: 0, q: 0 };
@@ -10882,15 +10924,6 @@ function SSF_parse_date_code(v, opts, b2) {
10882
10924
  out.q = dow;
10883
10925
  return out;
10884
10926
  }
10885
- var SSFbasedate = /* @__PURE__ */ new Date(1899, 11, 31, 0, 0, 0);
10886
- var SSFdnthresh = /* @__PURE__ */ SSFbasedate.getTime();
10887
- var SSFbase1904 = /* @__PURE__ */ new Date(1900, 2, 1, 0, 0, 0);
10888
- function datenum_local(v, date1904) {
10889
- var epoch = /* @__PURE__ */ v.getTime();
10890
- if (date1904) epoch -= 1461 * 24 * 60 * 60 * 1e3;
10891
- else if (v >= SSFbase1904) epoch += 24 * 60 * 60 * 1e3;
10892
- return (epoch - (SSFdnthresh + (/* @__PURE__ */ v.getTimezoneOffset() - /* @__PURE__ */ SSFbasedate.getTimezoneOffset()) * 6e4)) / (24 * 60 * 60 * 1e3);
10893
- }
10894
10927
  function SSF_strip_decimal(o) {
10895
10928
  return o.indexOf(".") == -1 ? o : o.replace(/(?:\.0*|(\.\d*[1-9])0+)$/, "$1");
10896
10929
  }
@@ -10911,6 +10944,7 @@ function SSF_large_exp(v) {
10911
10944
  return o.length > (v < 0 ? 12 : 11) || o === "0" || o === "-0" ? v.toPrecision(6) : o;
10912
10945
  }
10913
10946
  function SSF_general_num(v) {
10947
+ if (!isFinite(v)) return isNaN(v) ? "#NUM!" : "#DIV/0!";
10914
10948
  var V = Math.floor(Math.log(Math.abs(v)) * Math.LOG10E), o;
10915
10949
  if (V >= -4 && V <= -1) o = v.toPrecision(10 + V);
10916
10950
  else if (Math.abs(V) <= 9) o = SSF_small_exp(v);
@@ -10930,7 +10964,7 @@ function SSF_general(v, opts) {
10930
10964
  return "";
10931
10965
  case "object":
10932
10966
  if (v == null) return "";
10933
- if (v instanceof Date) return SSF_format(14, datenum_local(v, opts && opts.date1904), opts);
10967
+ if (v instanceof Date) return SSF_format(14, datenum(v, opts && opts.date1904), opts);
10934
10968
  }
10935
10969
  throw new Error("unsupported value in General format: " + v);
10936
10970
  }
@@ -11043,7 +11077,7 @@ function SSF_write_date(type2, fmt, val, ss0) {
11043
11077
  break;
11044
11078
  case "[s]":
11045
11079
  case "[ss]":
11046
- out = ((val.D * 24 + val.H) * 60 + val.M) * 60 + Math.round(val.S + val.u);
11080
+ out = ((val.D * 24 + val.H) * 60 + val.M) * 60 + (ss0 == 0 ? Math.round(val.S + val.u) : val.S);
11047
11081
  break;
11048
11082
  default:
11049
11083
  throw "bad abstime format: " + fmt;
@@ -11114,7 +11148,7 @@ function write_num_f2(r, aval, sign2) {
11114
11148
  return sign2 + (aval === 0 ? "" : "" + aval) + fill(" ", r[1].length + 2 + r[4].length);
11115
11149
  }
11116
11150
  var dec1 = /^#*0*\.([0#]+)/;
11117
- var closeparen = /\).*[0#]/;
11151
+ var closeparen = /\)[^)]*[0#]/;
11118
11152
  var phone = /\(###\) ###\\?-####/;
11119
11153
  function hashq(str) {
11120
11154
  var o = "", cc;
@@ -11598,7 +11632,7 @@ function eval_fmt(fmt, v, opts, flen) {
11598
11632
  var q = { t: c, v: c };
11599
11633
  if (dt == null) dt = SSF_parse_date_code(v, opts);
11600
11634
  if (fmt.substr(i, 3).toUpperCase() === "A/P") {
11601
- if (dt != null) q.v = dt.H >= 12 ? "P" : "A";
11635
+ if (dt != null) q.v = dt.H >= 12 ? fmt.charAt(i + 2) : c;
11602
11636
  q.t = "T";
11603
11637
  hr = "h";
11604
11638
  i += 3;
@@ -11705,15 +11739,21 @@ function eval_fmt(fmt, v, opts, flen) {
11705
11739
  if (bt < 1) bt = 1;
11706
11740
  break;
11707
11741
  case "s":
11708
- if (ssm = out[i].v.match(/\.0+$/)) ss0 = Math.max(ss0, ssm[0].length - 1);
11742
+ if (ssm = out[i].v.match(/\.0+$/)) {
11743
+ ss0 = Math.max(ss0, ssm[0].length - 1);
11744
+ bt = 4;
11745
+ }
11709
11746
  if (bt < 3) bt = 3;
11710
11747
  /* falls through */
11711
11748
  case "d":
11712
11749
  case "y":
11713
- case "M":
11714
11750
  case "e":
11715
11751
  lst = out[i].t;
11716
11752
  break;
11753
+ case "M":
11754
+ lst = out[i].t;
11755
+ if (bt < 2) bt = 2;
11756
+ break;
11717
11757
  case "m":
11718
11758
  if (lst === "s") {
11719
11759
  out[i].t = "M";
@@ -11728,10 +11768,13 @@ function eval_fmt(fmt, v, opts, flen) {
11728
11768
  if (bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;
11729
11769
  }
11730
11770
  }
11771
+ var _dt;
11731
11772
  switch (bt) {
11732
11773
  case 0:
11733
11774
  break;
11734
11775
  case 1:
11776
+ case 2:
11777
+ case 3:
11735
11778
  if (dt.u >= 0.5) {
11736
11779
  dt.u = 0;
11737
11780
  ++dt.S;
@@ -11744,9 +11787,30 @@ function eval_fmt(fmt, v, opts, flen) {
11744
11787
  dt.M = 0;
11745
11788
  ++dt.H;
11746
11789
  }
11790
+ if (dt.H >= 24) {
11791
+ dt.H = 0;
11792
+ ++dt.D;
11793
+ _dt = SSF_parse_date_code(dt.D);
11794
+ _dt.u = dt.u;
11795
+ _dt.S = dt.S;
11796
+ _dt.M = dt.M;
11797
+ _dt.H = dt.H;
11798
+ dt = _dt;
11799
+ }
11747
11800
  break;
11748
- case 2:
11749
- if (dt.u >= 0.5) {
11801
+ case 4:
11802
+ switch (ss0) {
11803
+ case 1:
11804
+ dt.u = Math.round(dt.u * 10) / 10;
11805
+ break;
11806
+ case 2:
11807
+ dt.u = Math.round(dt.u * 100) / 100;
11808
+ break;
11809
+ case 3:
11810
+ dt.u = Math.round(dt.u * 1e3) / 1e3;
11811
+ break;
11812
+ }
11813
+ if (dt.u >= 1) {
11750
11814
  dt.u = 0;
11751
11815
  ++dt.S;
11752
11816
  }
@@ -11754,6 +11818,20 @@ function eval_fmt(fmt, v, opts, flen) {
11754
11818
  dt.S = 0;
11755
11819
  ++dt.M;
11756
11820
  }
11821
+ if (dt.M >= 60) {
11822
+ dt.M = 0;
11823
+ ++dt.H;
11824
+ }
11825
+ if (dt.H >= 24) {
11826
+ dt.H = 0;
11827
+ ++dt.D;
11828
+ _dt = SSF_parse_date_code(dt.D);
11829
+ _dt.u = dt.u;
11830
+ _dt.S = dt.S;
11831
+ _dt.M = dt.M;
11832
+ _dt.H = dt.H;
11833
+ dt = _dt;
11834
+ }
11757
11835
  break;
11758
11836
  }
11759
11837
  var nstr = "", jj;
@@ -11902,6 +11980,7 @@ function choose_fmt(f, v) {
11902
11980
  if (l < 4 && lat > -1) --l;
11903
11981
  if (fmt.length > 4) throw new Error("cannot find right format for |" + fmt.join("|") + "|");
11904
11982
  if (typeof v !== "number") return [4, fmt.length === 4 || lat > -1 ? fmt[fmt.length - 1] : "@"];
11983
+ if (typeof v === "number" && !isFinite(v)) v = 0;
11905
11984
  switch (fmt.length) {
11906
11985
  case 1:
11907
11986
  fmt = lat > -1 ? ["General", "General", "General", fmt[0]] : [fmt[0], fmt[0], fmt[0], "@"];
@@ -11938,12 +12017,14 @@ function SSF_format(fmt, v, o) {
11938
12017
  break;
11939
12018
  }
11940
12019
  if (SSF_isgeneral(sfmt, 0)) return SSF_general(v, o);
11941
- if (v instanceof Date) v = datenum_local(v, o.date1904);
12020
+ if (v instanceof Date) v = datenum(v, o.date1904);
11942
12021
  var f = choose_fmt(sfmt, v);
11943
12022
  if (SSF_isgeneral(f[1])) return SSF_general(v, o);
11944
12023
  if (v === true) v = "TRUE";
11945
12024
  else if (v === false) v = "FALSE";
11946
12025
  else if (v === "" || v == null) return "";
12026
+ else if (isNaN(v) && f[1].indexOf("0") > -1) return "#NUM!";
12027
+ else if (!isFinite(v) && f[1].indexOf("0") > -1) return "#DIV/0!";
11947
12028
  return eval_fmt(f[1], v, o, f[0]);
11948
12029
  }
11949
12030
  function SSF_load(fmt, idx) {
@@ -11971,6 +12052,13 @@ function SSF_load_table(tbl) {
11971
12052
  function make_ssf() {
11972
12053
  table_fmt = SSF_init_table();
11973
12054
  }
12055
+ var bad_formats = {
12056
+ "d.m": "d\\.m"
12057
+ // Issue #2571 Google Sheets writes invalid format 'd.m', correct format is 'd"."m' or 'd\\.m'
12058
+ };
12059
+ function SSF__load(fmt, idx) {
12060
+ return SSF_load(bad_formats[fmt] || fmt, idx);
12061
+ }
11974
12062
  var CRC32 = /* @__PURE__ */ (function() {
11975
12063
  var CRC322 = {};
11976
12064
  CRC322.version = "1.2.0";
@@ -11999,7 +12087,7 @@ var CRC32 = /* @__PURE__ */ (function() {
11999
12087
  for (c = 256 + n; c < 4096; c += 256) v = table[c] = v >>> 8 ^ T[v & 255];
12000
12088
  }
12001
12089
  var out = [];
12002
- for (n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== "undefined" ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256);
12090
+ for (n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== "undefined" && typeof table.subarray == "function" ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256);
12003
12091
  return out;
12004
12092
  }
12005
12093
  var TT = slice_by_16_tables(T0);
@@ -12049,8 +12137,11 @@ var CRC32 = /* @__PURE__ */ (function() {
12049
12137
  return CRC322;
12050
12138
  })();
12051
12139
  var CFB = /* @__PURE__ */ (function _CFB() {
12052
- var exports = {};
12053
- exports.version = "1.2.1";
12140
+ var exports = (
12141
+ /*::(*/
12142
+ {}
12143
+ );
12144
+ exports.version = "1.2.2";
12054
12145
  function namecmp(l, r) {
12055
12146
  var L = l.split("/"), R = r.split("/");
12056
12147
  for (var i2 = 0, c = 0, Z = Math.min(L.length, R.length); i2 < Z; ++i2) {
@@ -12125,6 +12216,16 @@ var CFB = /* @__PURE__ */ (function _CFB() {
12125
12216
  if (p.mtime) p.mt = new Date(p.mtime * 1e3);
12126
12217
  }
12127
12218
  break;
12219
+ /* ZIP64 Extended Information Field */
12220
+ case 1:
12221
+ {
12222
+ var sz1 = blob.read_shift(4), sz2 = blob.read_shift(4);
12223
+ p.usz = sz2 * Math.pow(2, 32) + sz1;
12224
+ sz1 = blob.read_shift(4);
12225
+ sz2 = blob.read_shift(4);
12226
+ p.csz = sz2 * Math.pow(2, 32) + sz1;
12227
+ }
12228
+ break;
12128
12229
  }
12129
12230
  blob.l = tgt;
12130
12231
  o[type2] = p;
@@ -12133,7 +12234,7 @@ var CFB = /* @__PURE__ */ (function _CFB() {
12133
12234
  }
12134
12235
  var fs;
12135
12236
  function get_fs() {
12136
- return fs || (fs = {});
12237
+ return fs || (fs = _fs);
12137
12238
  }
12138
12239
  function parse(file, options) {
12139
12240
  if (file[0] == 80 && file[1] == 75) return parse_zip(file, options);
@@ -12196,7 +12297,7 @@ var CFB = /* @__PURE__ */ (function _CFB() {
12196
12297
  var sectors = sectorify(file, ssz);
12197
12298
  sleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);
12198
12299
  var sector_list = make_sector_list(sectors, dir_start, fat_addrs, ssz);
12199
- sector_list[dir_start].name = "!Directory";
12300
+ if (dir_start < sector_list.length) sector_list[dir_start].name = "!Directory";
12200
12301
  if (nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = "!MiniFAT";
12201
12302
  sector_list[fat_addrs[0]].name = "!FAT";
12202
12303
  sector_list.fat_addrs = fat_addrs;
@@ -12309,7 +12410,7 @@ var CFB = /* @__PURE__ */ (function _CFB() {
12309
12410
  if ((q2 = __readInt32LE(sector, i2 * 4)) === ENDOFCHAIN) break;
12310
12411
  fat_addrs.push(q2);
12311
12412
  }
12312
- sleuth_fat(__readInt32LE(sector, ssz - 4), cnt - 1, sectors, ssz, fat_addrs);
12413
+ if (cnt >= 1) sleuth_fat(__readInt32LE(sector, ssz - 4), cnt - 1, sectors, ssz, fat_addrs);
12313
12414
  }
12314
12415
  }
12315
12416
  function get_sector_list(sectors, start, fat_addrs, ssz, chkd) {
@@ -12497,7 +12598,8 @@ var CFB = /* @__PURE__ */ (function _CFB() {
12497
12598
  for (i2 = 0; i2 < data.length; ++i2) {
12498
12599
  var dad = dirname(data[i2][0]);
12499
12600
  s = fullPaths[dad];
12500
- if (!s) {
12601
+ while (!s) {
12602
+ while (dirname(dad) && !fullPaths[dirname(dad)]) dad = dirname(dad);
12501
12603
  data.push([dad, {
12502
12604
  name: filename(dad).replace("/", ""),
12503
12605
  type: 1,
@@ -12507,6 +12609,8 @@ var CFB = /* @__PURE__ */ (function _CFB() {
12507
12609
  content: null
12508
12610
  }]);
12509
12611
  fullPaths[dad] = true;
12612
+ dad = dirname(data[i2][0]);
12613
+ s = fullPaths[dad];
12510
12614
  }
12511
12615
  }
12512
12616
  data.sort(function(x, y) {
@@ -12646,6 +12750,10 @@ var CFB = /* @__PURE__ */ (function _CFB() {
12646
12750
  file = cfb.FileIndex[i2];
12647
12751
  if (i2 === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;
12648
12752
  var _nm = i2 === 0 && _opts.root || file.name;
12753
+ if (_nm.length > 31) {
12754
+ console.error("Name " + _nm + " will be truncated to " + _nm.slice(0, 31));
12755
+ _nm = _nm.slice(0, 31);
12756
+ }
12649
12757
  flen = 2 * (_nm.length + 1);
12650
12758
  o.write_shift(64, _nm, "utf16le");
12651
12759
  o.write_shift(2, flen);
@@ -13249,6 +13357,10 @@ var CFB = /* @__PURE__ */ (function _CFB() {
13249
13357
  blob.l += namelen + efsz + fcsz;
13250
13358
  var L = blob.l;
13251
13359
  blob.l = offset + 4;
13360
+ if (EF && EF[1]) {
13361
+ if ((EF[1] || {}).usz) usz = EF[1].usz;
13362
+ if ((EF[1] || {}).csz) csz = EF[1].csz;
13363
+ }
13252
13364
  parse_local_file(blob, csz, usz, o, EF);
13253
13365
  blob.l = L;
13254
13366
  }
@@ -13274,7 +13386,13 @@ var CFB = /* @__PURE__ */ (function _CFB() {
13274
13386
  /*:: :any)*/
13275
13387
  );
13276
13388
  if ((ef[21589] || {}).mt) date = ef[21589].mt;
13277
- if (((EF || {})[21589] || {}).mt) date = EF[21589].mt;
13389
+ if ((ef[1] || {}).usz) _usz = ef[1].usz;
13390
+ if ((ef[1] || {}).csz) _csz = ef[1].csz;
13391
+ if (EF) {
13392
+ if ((EF[21589] || {}).mt) date = EF[21589].mt;
13393
+ if ((EF[1] || {}).usz) _usz = EF[1].usz;
13394
+ if ((EF[1] || {}).csz) _csz = EF[1].csz;
13395
+ }
13278
13396
  }
13279
13397
  blob.l += efsz;
13280
13398
  var data = blob.slice(blob.l, blob.l + _csz);
@@ -13283,6 +13401,7 @@ var CFB = /* @__PURE__ */ (function _CFB() {
13283
13401
  data = _inflateRawSync(blob, _usz);
13284
13402
  break;
13285
13403
  case 0:
13404
+ blob.l += _csz;
13286
13405
  break;
13287
13406
  // TODO: scan for magic number
13288
13407
  default:
@@ -13315,17 +13434,17 @@ var CFB = /* @__PURE__ */ (function _CFB() {
13315
13434
  for (i2 = 1; i2 < cfb.FullPaths.length; ++i2) {
13316
13435
  fp = cfb.FullPaths[i2].slice(root.length);
13317
13436
  fi = cfb.FileIndex[i2];
13318
- if (!fi.size || !fi.content || fp == "Sh33tJ5") continue;
13437
+ if (!fi.size || !fi.content || Array.isArray(fi.content) && fi.content.length == 0 || fp == "Sh33tJ5") continue;
13319
13438
  var start = start_cd;
13320
13439
  var namebuf = new_buf(fp.length);
13321
13440
  for (j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 127);
13322
13441
  namebuf = namebuf.slice(0, namebuf.l);
13323
- crcs[fcnt] = CRC32.buf(
13442
+ crcs[fcnt] = typeof fi.content == "string" ? CRC32.bstr(fi.content, 0) : CRC32.buf(
13324
13443
  /*::((*/
13325
13444
  fi.content,
13326
13445
  0
13327
13446
  );
13328
- var outbuf = fi.content;
13447
+ var outbuf = typeof fi.content == "string" ? s2a(fi.content) : fi.content;
13329
13448
  if (method == 8) outbuf = _deflateRawSync(outbuf);
13330
13449
  o = new_buf(30);
13331
13450
  o.write_shift(4, 67324752);
@@ -13460,7 +13579,7 @@ var CFB = /* @__PURE__ */ (function _CFB() {
13460
13579
  for (; di < 10; ++di) {
13461
13580
  var line = data[di];
13462
13581
  if (!line || line.match(/^\s*$/)) break;
13463
- var m = line.match(/^(.*?):\s*([^\s].*)$/);
13582
+ var m = line.match(/^([^:]*?):\s*([^\s].*)$/);
13464
13583
  if (m) switch (m[1].toLowerCase()) {
13465
13584
  case "content-location":
13466
13585
  fname = m[2].trim();
@@ -13637,6 +13756,7 @@ var CFB = /* @__PURE__ */ (function _CFB() {
13637
13756
  };
13638
13757
  return exports;
13639
13758
  })();
13759
+ var _fs;
13640
13760
  function blobify(data) {
13641
13761
  if (typeof data === "string") return s2ab(data);
13642
13762
  if (Array.isArray(data)) return a2u(data);
@@ -13672,6 +13792,9 @@ function write_dl(fname, payload, enc) {
13672
13792
  }, 6e4);
13673
13793
  return url;
13674
13794
  }
13795
+ } else if (typeof URL !== "undefined" && !URL.createObjectURL && typeof chrome === "object") {
13796
+ var b64 = "data:application/octet-stream;base64," + Base64_encode_arr(new Uint8Array(blobify(data)));
13797
+ return chrome.downloads.download({ url: b64, filename: fname, saveAs: true });
13675
13798
  }
13676
13799
  }
13677
13800
  if (typeof $ !== "undefined" && typeof File !== "undefined" && typeof Folder !== "undefined") try {
@@ -13683,7 +13806,7 @@ function write_dl(fname, payload, enc) {
13683
13806
  out.close();
13684
13807
  return payload;
13685
13808
  } catch (e) {
13686
- if (!e.message || !e.message.match(/onstruct/)) throw e;
13809
+ if (!e.message || e.message.indexOf("onstruct") == -1) throw e;
13687
13810
  }
13688
13811
  throw new Error("cannot save file " + fname);
13689
13812
  }
@@ -13710,34 +13833,38 @@ function evert_arr(obj) {
13710
13833
  }
13711
13834
  return o;
13712
13835
  }
13713
- var basedate = /* @__PURE__ */ new Date(1899, 11, 30, 0, 0, 0);
13836
+ var dnthresh = /* @__PURE__ */ Date.UTC(1899, 11, 30, 0, 0, 0);
13837
+ var dnthresh1 = /* @__PURE__ */ Date.UTC(1899, 11, 31, 0, 0, 0);
13838
+ var dnthresh2 = /* @__PURE__ */ Date.UTC(1904, 0, 1, 0, 0, 0);
13714
13839
  function datenum(v, date1904) {
13715
13840
  var epoch = /* @__PURE__ */ v.getTime();
13716
- var dnthresh = /* @__PURE__ */ basedate.getTime() + (/* @__PURE__ */ v.getTimezoneOffset() - /* @__PURE__ */ basedate.getTimezoneOffset()) * 6e4;
13717
- return (epoch - dnthresh) / (24 * 60 * 60 * 1e3);
13718
- }
13719
- var good_pd_date_1 = /* @__PURE__ */ new Date("2017-02-19T19:06:09.000Z");
13720
- var good_pd_date = /* @__PURE__ */ isNaN(/* @__PURE__ */ good_pd_date_1.getFullYear()) ? /* @__PURE__ */ new Date("2/19/17") : good_pd_date_1;
13721
- var good_pd = /* @__PURE__ */ good_pd_date.getFullYear() == 2017;
13722
- function parseDate(str, fixdate) {
13723
- var d = new Date(str);
13724
- if (good_pd) {
13725
- if (fixdate > 0) d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1e3);
13726
- else if (fixdate < 0) d.setTime(d.getTime() - d.getTimezoneOffset() * 60 * 1e3);
13727
- return d;
13841
+ var res = (epoch - dnthresh) / (24 * 60 * 60 * 1e3);
13842
+ if (date1904) {
13843
+ res -= 1462;
13844
+ return res < -1402 ? res - 1 : res;
13728
13845
  }
13729
- if (str instanceof Date) return str;
13730
- if (good_pd_date.getFullYear() == 1917 && !isNaN(d.getFullYear())) {
13731
- var s = d.getFullYear();
13732
- if (str.indexOf("" + s) > -1) return d;
13733
- d.setFullYear(d.getFullYear() + 100);
13734
- return d;
13735
- }
13736
- var n = str.match(/\d+/g) || ["2017", "2", "19", "0", "0", "0"];
13737
- var out = new Date(+n[0], +n[1] - 1, +n[2], +n[3] || 0, +n[4] || 0, +n[5] || 0);
13738
- if (str.indexOf("Z") > -1) out = new Date(out.getTime() - out.getTimezoneOffset() * 60 * 1e3);
13846
+ return res < 60 ? res - 1 : res;
13847
+ }
13848
+ function numdate(v) {
13849
+ if (v >= 60 && v < 61) return v;
13850
+ var out = /* @__PURE__ */ new Date();
13851
+ out.setTime((v > 60 ? v : v + 1) * 24 * 60 * 60 * 1e3 + dnthresh);
13739
13852
  return out;
13740
13853
  }
13854
+ var pdre1 = /^(\d+):(\d+)(:\d+)?(\.\d+)?$/;
13855
+ var pdre2 = /^(\d+)-(\d+)-(\d+)$/;
13856
+ var pdre3 = /^(\d+)-(\d+)-(\d+)[T ](\d+):(\d+)(:\d+)?(\.\d+)?$/;
13857
+ function parseDate(str, date1904) {
13858
+ if (str instanceof Date) return str;
13859
+ var m = str.match(pdre1);
13860
+ if (m) return new Date((date1904 ? dnthresh2 : dnthresh1) + ((parseInt(m[1], 10) * 60 + parseInt(m[2], 10)) * 60 + (m[3] ? parseInt(m[3].slice(1), 10) : 0)) * 1e3 + (m[4] ? parseInt((m[4] + "000").slice(1, 4), 10) : 0));
13861
+ m = str.match(pdre2);
13862
+ if (m) return new Date(Date.UTC(+m[1], +m[2] - 1, +m[3], 0, 0, 0, 0));
13863
+ m = str.match(pdre3);
13864
+ if (m) return new Date(Date.UTC(+m[1], +m[2] - 1, +m[3], +m[4], +m[5], m[6] && parseInt(m[6].slice(1), 10) || 0, m[7] && parseInt((m[7] + "0000").slice(1, 4), 10) || 0));
13865
+ var d = new Date(str);
13866
+ return d;
13867
+ }
13741
13868
  function dup(o) {
13742
13869
  if (typeof JSON != "undefined" && !Array.isArray(o)) return JSON.parse(JSON.stringify(o));
13743
13870
  if (typeof o != "object" || o == null) return o;
@@ -13761,30 +13888,67 @@ function fuzzynum(s) {
13761
13888
  return "";
13762
13889
  });
13763
13890
  if (!isNaN(v = Number(ss))) return v / wt;
13764
- ss = ss.replace(/[(](.*)[)]/, function($$, $1) {
13891
+ ss = ss.replace(/[(]([^()]*)[)]/, function($$, $1) {
13765
13892
  wt = -wt;
13766
13893
  return $1;
13767
13894
  });
13768
13895
  if (!isNaN(v = Number(ss))) return v / wt;
13769
13896
  return v;
13770
13897
  }
13898
+ var FDRE1 = /^(0?\d|1[0-2])(?:|:([0-5]?\d)(?:|(\.\d+)(?:|:([0-5]?\d))|:([0-5]?\d)(|\.\d+)))\s+([ap])m?$/;
13899
+ var FDRE2 = /^([01]?\d|2[0-3])(?:|:([0-5]?\d)(?:|(\.\d+)(?:|:([0-5]?\d))|:([0-5]?\d)(|\.\d+)))$/;
13900
+ var FDISO = /^(\d+)-(\d+)-(\d+)[T ](\d+):(\d+)(:\d+)(\.\d+)?[Z]?$/;
13901
+ var utc_append_works = (/* @__PURE__ */ new Date("6/9/69 00:00 UTC")).valueOf() == -177984e5;
13902
+ function fuzzytime1(M) {
13903
+ if (!M[2]) return new Date(Date.UTC(1899, 11, 31, +M[1] % 12 + (M[7] == "p" ? 12 : 0), 0, 0, 0));
13904
+ if (M[3]) {
13905
+ if (M[4]) return new Date(Date.UTC(1899, 11, 31, +M[1] % 12 + (M[7] == "p" ? 12 : 0), +M[2], +M[4], parseFloat(M[3]) * 1e3));
13906
+ else return new Date(Date.UTC(1899, 11, 31, M[7] == "p" ? 12 : 0, +M[1], +M[2], parseFloat(M[3]) * 1e3));
13907
+ } else if (M[5]) return new Date(Date.UTC(1899, 11, 31, +M[1] % 12 + (M[7] == "p" ? 12 : 0), +M[2], +M[5], M[6] ? parseFloat(M[6]) * 1e3 : 0));
13908
+ else return new Date(Date.UTC(1899, 11, 31, +M[1] % 12 + (M[7] == "p" ? 12 : 0), +M[2], 0, 0));
13909
+ }
13910
+ function fuzzytime2(M) {
13911
+ if (!M[2]) return new Date(Date.UTC(1899, 11, 31, +M[1], 0, 0, 0));
13912
+ if (M[3]) {
13913
+ if (M[4]) return new Date(Date.UTC(1899, 11, 31, +M[1], +M[2], +M[4], parseFloat(M[3]) * 1e3));
13914
+ else return new Date(Date.UTC(1899, 11, 31, 0, +M[1], +M[2], parseFloat(M[3]) * 1e3));
13915
+ } else if (M[5]) return new Date(Date.UTC(1899, 11, 31, +M[1], +M[2], +M[5], M[6] ? parseFloat(M[6]) * 1e3 : 0));
13916
+ else return new Date(Date.UTC(1899, 11, 31, +M[1], +M[2], 0, 0));
13917
+ }
13771
13918
  var lower_months = ["january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"];
13772
13919
  function fuzzydate(s) {
13773
- var o = new Date(s), n = /* @__PURE__ */ new Date(NaN);
13774
- var y = o.getYear(), m = o.getMonth(), d = o.getDate();
13775
- if (isNaN(d)) return n;
13920
+ if (FDISO.test(s)) return s.indexOf("Z") == -1 ? local_to_utc(new Date(s)) : new Date(s);
13776
13921
  var lower = s.toLowerCase();
13922
+ var lnos = lower.replace(/\s+/g, " ").trim();
13923
+ var M = lnos.match(FDRE1);
13924
+ if (M) return fuzzytime1(M);
13925
+ M = lnos.match(FDRE2);
13926
+ if (M) return fuzzytime2(M);
13927
+ M = lnos.match(pdre3);
13928
+ if (M) return new Date(Date.UTC(+M[1], +M[2] - 1, +M[3], +M[4], +M[5], M[6] && parseInt(M[6].slice(1), 10) || 0, M[7] && parseInt((M[7] + "0000").slice(1, 4), 10) || 0));
13929
+ var o = new Date(utc_append_works && s.indexOf("UTC") == -1 ? s + " UTC" : s), n = /* @__PURE__ */ new Date(NaN);
13930
+ var y = o.getYear();
13931
+ o.getMonth();
13932
+ var d = o.getDate();
13933
+ if (isNaN(d)) return n;
13777
13934
  if (lower.match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)) {
13778
13935
  lower = lower.replace(/[^a-z]/g, "").replace(/([^a-z]|^)[ap]m?([^a-z]|$)/, "");
13779
13936
  if (lower.length > 3 && lower_months.indexOf(lower) == -1) return n;
13780
- } else if (lower.match(/[a-z]/)) return n;
13781
- if (y < 0 || y > 8099) return n;
13782
- if ((m > 0 || d > 1) && y != 101) return o;
13783
- if (s.match(/[^-0-9:,\/\\]/)) return n;
13937
+ } else if (lower.replace(/[ap]m?/, "").match(/[a-z]/)) return n;
13938
+ if (y < 0 || y > 8099 || s.match(/[^-0-9:,\/\\\ ]/)) return n;
13784
13939
  return o;
13785
13940
  }
13941
+ function utc_to_local(utc) {
13942
+ return new Date(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate(), utc.getUTCHours(), utc.getUTCMinutes(), utc.getUTCSeconds(), utc.getUTCMilliseconds());
13943
+ }
13944
+ function local_to_utc(local) {
13945
+ return new Date(Date.UTC(local.getFullYear(), local.getMonth(), local.getDate(), local.getHours(), local.getMinutes(), local.getSeconds(), local.getMilliseconds()));
13946
+ }
13786
13947
  function zip_add_file(zip, path, content) {
13787
13948
  if (zip.FullPaths) {
13949
+ if (Array.isArray(content) && typeof content[0] == "string") {
13950
+ content = content.join("");
13951
+ }
13788
13952
  if (typeof content == "string") {
13789
13953
  var res;
13790
13954
  if (has_buf) res = Buffer_from(content);
@@ -13806,7 +13970,7 @@ var encodings = {
13806
13970
  "&amp;": "&"
13807
13971
  };
13808
13972
  var rencoding = /* @__PURE__ */ evert(encodings);
13809
- var decregex = /[&<>'"]/g, charegex = /[\u0000-\u0008\u000b-\u001f]/g;
13973
+ var decregex = /[&<>'"]/g, charegex = /[\u0000-\u0008\u000b-\u001f\uFFFE-\uFFFF]/g;
13810
13974
  function escapexml(text) {
13811
13975
  var s = text + "";
13812
13976
  return s.replace(decregex, function(y) {
@@ -13927,7 +14091,7 @@ var htmldecode = /* @__PURE__ */ (function() {
13927
14091
  return [new RegExp("&" + x[0] + ";", "ig"), x[1]];
13928
14092
  });
13929
14093
  return function htmldecode2(str) {
13930
- var o = str.replace(/^[\t\n\r ]+/, "").replace(/[\t\n\r ]+$/, "").replace(/>\s+/g, ">").replace(/\s+</g, "<").replace(/[\t\n\r ]+/g, " ").replace(/<\s*[bB][rR]\s*\/?>/g, "\n").replace(/<[^>]*>/g, "");
14094
+ var o = str.replace(/^[\t\n\r ]+/, "").replace(/(^|[^\t\n\r ])[\t\n\r ]+$/, "$1").replace(/>\s+/g, ">").replace(/\b\s+</g, "<").replace(/[\t\n\r ]+/g, " ").replace(/<\s*[bB][rR]\s*\/?>/g, "\n").replace(/<[^<>]*>/g, "");
13931
14095
  for (var i = 0; i < entities.length; ++i) o = o.replace(entities[i][0], entities[i][1]);
13932
14096
  return o;
13933
14097
  };
@@ -14043,7 +14207,7 @@ var ___utf16le = function(b, s, e) {
14043
14207
  return ss.join("").replace(chr0, "");
14044
14208
  };
14045
14209
  var __utf16le = has_buf ? function(b, s, e) {
14046
- if (!Buffer.isBuffer(b)) return ___utf16le(b, s, e);
14210
+ if (!Buffer.isBuffer(b) || !buf_utf16le) return ___utf16le(b, s, e);
14047
14211
  return b.toString("utf16le", s, e).replace(chr0, "");
14048
14212
  } : ___utf16le;
14049
14213
  var ___hexlify = function(b, s, l) {
@@ -14103,12 +14267,12 @@ if (has_buf) {
14103
14267
  return len > 0 ? b.toString("utf8", i + 4, i + 4 + len - 1) : "";
14104
14268
  };
14105
14269
  __lpwstr = function lpwstr_b(b, i) {
14106
- if (!Buffer.isBuffer(b)) return ___lpwstr(b, i);
14270
+ if (!Buffer.isBuffer(b) || !buf_utf16le) return ___lpwstr(b, i);
14107
14271
  var len = 2 * b.readUInt32LE(i);
14108
14272
  return b.toString("utf16le", i + 4, i + 4 + len - 1);
14109
14273
  };
14110
14274
  __lpp4 = function lpp4_b(b, i) {
14111
- if (!Buffer.isBuffer(b)) return ___lpp4(b, i);
14275
+ if (!Buffer.isBuffer(b) || !buf_utf16le) return ___lpp4(b, i);
14112
14276
  var len = b.readUInt32LE(i);
14113
14277
  return b.toString("utf16le", i + 4, i + 4 + len);
14114
14278
  };
@@ -14146,7 +14310,7 @@ function ReadShift(size, t) {
14146
14310
  switch (t) {
14147
14311
  case "dbcs":
14148
14312
  loc = this.l;
14149
- if (has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l + 2 * size).toString("utf16le");
14313
+ if (has_buf && Buffer.isBuffer(this) && buf_utf16le) o = this.slice(this.l, this.l + 2 * size).toString("utf16le");
14150
14314
  else for (i = 0; i < size; ++i) {
14151
14315
  o += String.fromCharCode(__readUInt16LE(this, loc));
14152
14316
  loc += 2;
@@ -14297,12 +14461,12 @@ function WriteShift(t, val, f) {
14297
14461
  if (f === "dbcs") {
14298
14462
  for (i = 0; i != val.length; ++i) __writeUInt16LE(this, val.charCodeAt(i), this.l + 2 * i);
14299
14463
  size = 2 * val.length;
14300
- } else if (f === "sbcs") {
14464
+ } else if (f === "sbcs" || f == "cpstr") {
14301
14465
  {
14302
14466
  val = val.replace(/[^\x00-\x7F]/g, "_");
14303
14467
  for (i = 0; i != val.length; ++i) this[this.l + i] = val.charCodeAt(i) & 255;
14468
+ size = val.length;
14304
14469
  }
14305
- size = val.length;
14306
14470
  } else if (f === "hex") {
14307
14471
  for (; i < t; ++i) {
14308
14472
  this[this.l++] = parseInt(val.slice(2 * i, 2 * i + 2), 16) || 0;
@@ -14428,6 +14592,15 @@ function encode_range(cs, ce) {
14428
14592
  if (typeof ce !== "string") ce = encode_cell(ce);
14429
14593
  return cs == ce ? cs : cs + ":" + ce;
14430
14594
  }
14595
+ function fix_range(a1) {
14596
+ var s = decode_range(a1);
14597
+ return "$" + encode_col(s.s.c) + "$" + encode_row(s.s.r) + ":$" + encode_col(s.e.c) + "$" + encode_row(s.e.r);
14598
+ }
14599
+ function formula_quote_sheet_name(sname, opts) {
14600
+ if (!sname && true) throw new Error("empty sheet name");
14601
+ if (/[^\w\u4E00-\u9FFF\u3040-\u30FF]/.test(sname)) return "'" + sname.replace(/'/g, "''") + "'";
14602
+ return sname;
14603
+ }
14431
14604
  function safe_decode_range(range2) {
14432
14605
  var o = { s: { c: 0, r: 0 }, e: { c: 0, r: 0 } };
14433
14606
  var idx = 0, i = 0, cc = 0;
@@ -14486,10 +14659,17 @@ function sheet_to_workbook(sheet, opts) {
14486
14659
  sheets[n] = sheet;
14487
14660
  return { SheetNames: [n], Sheets: sheets };
14488
14661
  }
14662
+ function sheet_new(opts) {
14663
+ var out = {};
14664
+ var o = opts || {};
14665
+ if (o.dense) out["!data"] = [];
14666
+ return out;
14667
+ }
14489
14668
  function sheet_add_aoa(_ws, data, opts) {
14490
14669
  var o = opts || {};
14491
- var dense = _ws ? Array.isArray(_ws) : o.dense;
14492
- var ws = _ws || (dense ? [] : {});
14670
+ var dense = _ws ? _ws["!data"] != null : o.dense;
14671
+ var ws = _ws || (dense ? { "!data": [] } : {});
14672
+ if (dense && !ws["!data"]) ws["!data"] = [];
14493
14673
  var _R = 0, _C = 0;
14494
14674
  if (ws && o.origin != null) {
14495
14675
  if (typeof o.origin == "number") _R = o.origin;
@@ -14498,7 +14678,6 @@ function sheet_add_aoa(_ws, data, opts) {
14498
14678
  _R = _origin.r;
14499
14679
  _C = _origin.c;
14500
14680
  }
14501
- if (!ws["!ref"]) ws["!ref"] = "A1:A1";
14502
14681
  }
14503
14682
  var range2 = { s: { c: 1e7, r: 1e7 }, e: { c: 0, r: 0 } };
14504
14683
  if (ws["!ref"]) {
@@ -14507,23 +14686,33 @@ function sheet_add_aoa(_ws, data, opts) {
14507
14686
  range2.s.r = _range.s.r;
14508
14687
  range2.e.c = Math.max(range2.e.c, _range.e.c);
14509
14688
  range2.e.r = Math.max(range2.e.r, _range.e.r);
14510
- if (_R == -1) range2.e.r = _R = _range.e.r + 1;
14689
+ if (_R == -1) range2.e.r = _R = ws["!ref"] ? _range.e.r + 1 : 0;
14690
+ } else {
14691
+ range2.s.c = range2.e.c = range2.s.r = range2.e.r = 0;
14511
14692
  }
14693
+ var row = [], seen = false;
14512
14694
  for (var R = 0; R != data.length; ++R) {
14513
14695
  if (!data[R]) continue;
14514
14696
  if (!Array.isArray(data[R])) throw new Error("aoa_to_sheet expects an array of arrays");
14515
- for (var C = 0; C != data[R].length; ++C) {
14516
- if (typeof data[R][C] === "undefined") continue;
14517
- var cell = { v: data[R][C] };
14518
- var __R = _R + R, __C = _C + C;
14697
+ var __R = _R + R;
14698
+ if (dense) {
14699
+ if (!ws["!data"][__R]) ws["!data"][__R] = [];
14700
+ row = ws["!data"][__R];
14701
+ }
14702
+ var data_R = data[R];
14703
+ for (var C = 0; C != data_R.length; ++C) {
14704
+ if (typeof data_R[C] === "undefined") continue;
14705
+ var cell = { v: data_R[C], t: "" };
14706
+ var __C = _C + C;
14519
14707
  if (range2.s.r > __R) range2.s.r = __R;
14520
14708
  if (range2.s.c > __C) range2.s.c = __C;
14521
14709
  if (range2.e.r < __R) range2.e.r = __R;
14522
14710
  if (range2.e.c < __C) range2.e.c = __C;
14523
- if (data[R][C] && typeof data[R][C] === "object" && !Array.isArray(data[R][C]) && !(data[R][C] instanceof Date)) cell = data[R][C];
14711
+ seen = true;
14712
+ if (data_R[C] && typeof data_R[C] === "object" && !Array.isArray(data_R[C]) && !(data_R[C] instanceof Date)) cell = data_R[C];
14524
14713
  else {
14525
14714
  if (Array.isArray(cell.v)) {
14526
- cell.f = data[R][C][1];
14715
+ cell.f = data_R[C][1];
14527
14716
  cell.v = cell.v[0];
14528
14717
  }
14529
14718
  if (cell.v === null) {
@@ -14533,57 +14722,67 @@ function sheet_add_aoa(_ws, data, opts) {
14533
14722
  cell.v = 0;
14534
14723
  } else if (!o.sheetStubs) continue;
14535
14724
  else cell.t = "z";
14536
- } else if (typeof cell.v === "number") cell.t = "n";
14537
- else if (typeof cell.v === "boolean") cell.t = "b";
14725
+ } else if (typeof cell.v === "number") {
14726
+ if (isFinite(cell.v)) cell.t = "n";
14727
+ else if (isNaN(cell.v)) {
14728
+ cell.t = "e";
14729
+ cell.v = 15;
14730
+ } else {
14731
+ cell.t = "e";
14732
+ cell.v = 7;
14733
+ }
14734
+ } else if (typeof cell.v === "boolean") cell.t = "b";
14538
14735
  else if (cell.v instanceof Date) {
14539
14736
  cell.z = o.dateNF || table_fmt[14];
14737
+ if (!o.UTC) cell.v = local_to_utc(cell.v);
14540
14738
  if (o.cellDates) {
14541
14739
  cell.t = "d";
14542
- cell.w = SSF_format(cell.z, datenum(cell.v));
14740
+ cell.w = SSF_format(cell.z, datenum(cell.v, o.date1904));
14543
14741
  } else {
14544
14742
  cell.t = "n";
14545
- cell.v = datenum(cell.v);
14743
+ cell.v = datenum(cell.v, o.date1904);
14546
14744
  cell.w = SSF_format(cell.z, cell.v);
14547
14745
  }
14548
14746
  } else cell.t = "s";
14549
14747
  }
14550
14748
  if (dense) {
14551
- if (!ws[__R]) ws[__R] = [];
14552
- if (ws[__R][__C] && ws[__R][__C].z) cell.z = ws[__R][__C].z;
14553
- ws[__R][__C] = cell;
14749
+ if (row[__C] && row[__C].z) cell.z = row[__C].z;
14750
+ row[__C] = cell;
14554
14751
  } else {
14555
- var cell_ref = encode_cell({ c: __C, r: __R });
14752
+ var cell_ref = encode_col(__C) + (__R + 1);
14556
14753
  if (ws[cell_ref] && ws[cell_ref].z) cell.z = ws[cell_ref].z;
14557
14754
  ws[cell_ref] = cell;
14558
14755
  }
14559
14756
  }
14560
14757
  }
14561
- if (range2.s.c < 1e7) ws["!ref"] = encode_range(range2);
14758
+ if (seen && range2.s.c < 104e5) ws["!ref"] = encode_range(range2);
14562
14759
  return ws;
14563
14760
  }
14564
14761
  function aoa_to_sheet(data, opts) {
14565
14762
  return sheet_add_aoa(null, data, opts);
14566
14763
  }
14567
14764
  var BErr = {
14568
- /*::[*/
14569
14765
  0: "#NULL!",
14570
- /*::[*/
14571
14766
  7: "#DIV/0!",
14572
- /*::[*/
14573
14767
  15: "#VALUE!",
14574
- /*::[*/
14575
14768
  23: "#REF!",
14576
- /*::[*/
14577
14769
  29: "#NAME?",
14578
- /*::[*/
14579
14770
  36: "#NUM!",
14580
- /*::[*/
14581
14771
  42: "#N/A",
14582
- /*::[*/
14583
14772
  43: "#GETTING_DATA",
14584
- /*::[*/
14585
14773
  255: "#WTF?"
14586
14774
  };
14775
+ var RBErr = {
14776
+ "#NULL!": 0,
14777
+ "#DIV/0!": 7,
14778
+ "#VALUE!": 15,
14779
+ "#REF!": 23,
14780
+ "#NAME?": 29,
14781
+ "#NUM!": 36,
14782
+ "#N/A": 42,
14783
+ "#GETTING_DATA": 43,
14784
+ "#WTF?": 255
14785
+ };
14587
14786
  var ct2type = {
14588
14787
  /* Workbook */
14589
14788
  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": "workbooks",
@@ -14795,35 +14994,37 @@ function new_ct() {
14795
14994
  xmlns: ""
14796
14995
  };
14797
14996
  }
14798
- function write_ct(ct, opts) {
14997
+ function write_ct(ct, opts, raw) {
14799
14998
  var type2ct = evert_arr(ct2type);
14800
14999
  var o = [], v;
14801
- o[o.length] = XML_HEADER;
14802
- o[o.length] = writextag("Types", null, {
14803
- "xmlns": XMLNS.CT,
14804
- "xmlns:xsd": XMLNS.xsd,
14805
- "xmlns:xsi": XMLNS.xsi
14806
- });
14807
- o = o.concat([
14808
- ["xml", "application/xml"],
14809
- ["bin", "application/vnd.ms-excel.sheet.binary.macroEnabled.main"],
14810
- ["vml", "application/vnd.openxmlformats-officedocument.vmlDrawing"],
14811
- ["data", "application/vnd.openxmlformats-officedocument.model+data"],
14812
- /* from test files */
14813
- ["bmp", "image/bmp"],
14814
- ["png", "image/png"],
14815
- ["gif", "image/gif"],
14816
- ["emf", "image/x-emf"],
14817
- ["wmf", "image/x-wmf"],
14818
- ["jpg", "image/jpeg"],
14819
- ["jpeg", "image/jpeg"],
14820
- ["tif", "image/tiff"],
14821
- ["tiff", "image/tiff"],
14822
- ["pdf", "application/pdf"],
14823
- ["rels", "application/vnd.openxmlformats-package.relationships+xml"]
14824
- ].map(function(x) {
14825
- return writextag("Default", null, { "Extension": x[0], "ContentType": x[1] });
14826
- }));
15000
+ {
15001
+ o[o.length] = XML_HEADER;
15002
+ o[o.length] = writextag("Types", null, {
15003
+ "xmlns": XMLNS.CT,
15004
+ "xmlns:xsd": XMLNS.xsd,
15005
+ "xmlns:xsi": XMLNS.xsi
15006
+ });
15007
+ o = o.concat([
15008
+ ["xml", "application/xml"],
15009
+ ["bin", "application/vnd.ms-excel.sheet.binary.macroEnabled.main"],
15010
+ ["vml", "application/vnd.openxmlformats-officedocument.vmlDrawing"],
15011
+ ["data", "application/vnd.openxmlformats-officedocument.model+data"],
15012
+ /* from test files */
15013
+ ["bmp", "image/bmp"],
15014
+ ["png", "image/png"],
15015
+ ["gif", "image/gif"],
15016
+ ["emf", "image/x-emf"],
15017
+ ["wmf", "image/x-wmf"],
15018
+ ["jpg", "image/jpeg"],
15019
+ ["jpeg", "image/jpeg"],
15020
+ ["tif", "image/tiff"],
15021
+ ["tiff", "image/tiff"],
15022
+ ["pdf", "application/pdf"],
15023
+ ["rels", "application/vnd.openxmlformats-package.relationships+xml"]
15024
+ ].map(function(x) {
15025
+ return writextag("Default", null, { "Extension": x[0], "ContentType": x[1] });
15026
+ }));
15027
+ }
14827
15028
  var f1 = function(w) {
14828
15029
  if (ct[w] && ct[w].length > 0) {
14829
15030
  v = ct[w][0];
@@ -15059,6 +15260,7 @@ function write_sst_xml(sst, opts) {
15059
15260
  else {
15060
15261
  sitag += "<t";
15061
15262
  if (!s.t) s.t = "";
15263
+ if (typeof s.t !== "string") s.t = String(s.t);
15062
15264
  if (s.t.match(straywsregex)) sitag += ' xml:space="preserve"';
15063
15265
  sitag += ">" + escapexml(s.t) + "</t>";
15064
15266
  }
@@ -15322,58 +15524,61 @@ function write_xlmeta_xml() {
15322
15524
  o.push('<metadata xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:xlrd="http://schemas.microsoft.com/office/spreadsheetml/2017/richdata" xmlns:xda="http://schemas.microsoft.com/office/spreadsheetml/2017/dynamicarray">\n <metadataTypes count="1">\n <metadataType name="XLDAPR" minSupportedVersion="120000" copy="1" pasteAll="1" pasteValues="1" merge="1" splitFirst="1" rowColShift="1" clearFormats="1" clearComments="1" assign="1" coerce="1" cellMeta="1"/>\n </metadataTypes>\n <futureMetadata name="XLDAPR" count="1">\n <bk>\n <extLst>\n <ext uri="{bdbb8cdc-fa1e-496e-a857-3c3f30c029c3}">\n <xda:dynamicArrayProperties fDynamic="1" fCollapsed="0"/>\n </ext>\n </extLst>\n </bk>\n </futureMetadata>\n <cellMetadata count="1">\n <bk>\n <rc t="1" v="0"/>\n </bk>\n </cellMetadata>\n</metadata>');
15323
15525
  return o.join("");
15324
15526
  }
15325
- var _shapeid = 1024;
15326
- function write_comments_vml(rId, comments) {
15527
+ function write_vml(rId, comments, ws) {
15327
15528
  var csize = [21600, 21600];
15328
15529
  var bbox = ["m0,0l0", csize[1], csize[0], csize[1], csize[0], "0xe"].join(",");
15329
15530
  var o = [
15330
15531
  writextag("xml", null, { "xmlns:v": XLMLNS.v, "xmlns:o": XLMLNS.o, "xmlns:x": XLMLNS.x, "xmlns:mv": XLMLNS.mv }).replace(/\/>/, ">"),
15331
- writextag("o:shapelayout", writextag("o:idmap", null, { "v:ext": "edit", "data": rId }), { "v:ext": "edit" }),
15332
- writextag("v:shapetype", [
15333
- writextag("v:stroke", null, { joinstyle: "miter" }),
15334
- writextag("v:path", null, { gradientshapeok: "t", "o:connecttype": "rect" })
15335
- ].join(""), { id: "_x0000_t202", "o:spt": 202, coordsize: csize.join(","), path: bbox })
15532
+ writextag("o:shapelayout", writextag("o:idmap", null, { "v:ext": "edit", "data": rId }), { "v:ext": "edit" })
15336
15533
  ];
15337
- while (_shapeid < rId * 1e3) _shapeid += 1e3;
15338
- comments.forEach(function(x) {
15339
- var c = decode_cell(x[0]);
15340
- var fillopts = (
15341
- /*::(*/
15342
- { "color2": "#BEFF82", "type": "gradient" }
15343
- );
15344
- if (fillopts.type == "gradient") fillopts.angle = "-180";
15345
- var fillparm = fillopts.type == "gradient" ? writextag("o:fill", null, { type: "gradientUnscaled", "v:ext": "view" }) : null;
15346
- var fillxml = writextag("v:fill", fillparm, fillopts);
15347
- var shadata = { on: "t", "obscured": "t" };
15534
+ var _shapeid = 65536 * rId;
15535
+ var _comments = comments || [];
15536
+ if (_comments.length > 0) o.push(writextag("v:shapetype", [
15537
+ writextag("v:stroke", null, { joinstyle: "miter" }),
15538
+ writextag("v:path", null, { gradientshapeok: "t", "o:connecttype": "rect" })
15539
+ ].join(""), { id: "_x0000_t202", coordsize: csize.join(","), "o:spt": 202, path: bbox }));
15540
+ _comments.forEach(function(x) {
15348
15541
  ++_shapeid;
15349
- o = o.concat([
15350
- "<v:shape" + wxt_helper({
15351
- id: "_x0000_s" + _shapeid,
15352
- type: "#_x0000_t202",
15353
- style: "position:absolute; margin-left:80pt;margin-top:5pt;width:104pt;height:64pt;z-index:10" + (x[1].hidden ? ";visibility:hidden" : ""),
15354
- fillcolor: "#ECFAD4",
15355
- strokecolor: "#edeaa1"
15356
- }) + ">",
15357
- fillxml,
15358
- writextag("v:shadow", null, shadata),
15359
- writextag("v:path", null, { "o:connecttype": "none" }),
15360
- '<v:textbox><div style="text-align:left"></div></v:textbox>',
15361
- '<x:ClientData ObjectType="Note">',
15362
- "<x:MoveWithCells/>",
15363
- "<x:SizeWithCells/>",
15364
- /* Part 4 19.4.2.3 Anchor (Anchor) */
15365
- writetag("x:Anchor", [c.c + 1, 0, c.r + 1, 0, c.c + 3, 20, c.r + 5, 20].join(",")),
15366
- writetag("x:AutoFill", "False"),
15367
- writetag("x:Row", String(c.r)),
15368
- writetag("x:Column", String(c.c)),
15369
- x[1].hidden ? "" : "<x:Visible/>",
15370
- "</x:ClientData>",
15371
- "</v:shape>"
15372
- ]);
15542
+ o.push(write_vml_comment(x, _shapeid));
15373
15543
  });
15374
15544
  o.push("</xml>");
15375
15545
  return o.join("");
15376
15546
  }
15547
+ function write_vml_comment(x, _shapeid, ws) {
15548
+ var c = decode_cell(x[0]);
15549
+ var fillopts = (
15550
+ /*::(*/
15551
+ { "color2": "#BEFF82", "type": "gradient" }
15552
+ );
15553
+ if (fillopts.type == "gradient") fillopts.angle = "-180";
15554
+ var fillparm = fillopts.type == "gradient" ? writextag("o:fill", null, { type: "gradientUnscaled", "v:ext": "view" }) : null;
15555
+ var fillxml = writextag("v:fill", fillparm, fillopts);
15556
+ var shadata = { on: "t", "obscured": "t" };
15557
+ return [
15558
+ "<v:shape" + wxt_helper({
15559
+ id: "_x0000_s" + _shapeid,
15560
+ type: "#_x0000_t202",
15561
+ style: "position:absolute; margin-left:80pt;margin-top:5pt;width:104pt;height:64pt;z-index:10" + (x[1].hidden ? ";visibility:hidden" : ""),
15562
+ fillcolor: "#ECFAD4",
15563
+ strokecolor: "#edeaa1"
15564
+ }) + ">",
15565
+ fillxml,
15566
+ writextag("v:shadow", null, shadata),
15567
+ writextag("v:path", null, { "o:connecttype": "none" }),
15568
+ '<v:textbox><div style="text-align:left"></div></v:textbox>',
15569
+ '<x:ClientData ObjectType="Note">',
15570
+ "<x:MoveWithCells/>",
15571
+ "<x:SizeWithCells/>",
15572
+ /* Part 4 19.4.2.3 Anchor (Anchor) */
15573
+ writetag("x:Anchor", [c.c + 1, 0, c.r + 1, 0, c.c + 3, 20, c.r + 5, 20].join(",")),
15574
+ writetag("x:AutoFill", "False"),
15575
+ writetag("x:Row", String(c.r)),
15576
+ writetag("x:Column", String(c.c)),
15577
+ x[1].hidden ? "" : "<x:Visible/>",
15578
+ "</x:ClientData>",
15579
+ "</v:shape>"
15580
+ ].join("");
15581
+ }
15377
15582
  function write_comments_xml(data) {
15378
15583
  var o = [XML_HEADER, writextag("comments", null, { "xmlns": XMLNS_main[0] })];
15379
15584
  var iauthor = [];
@@ -15398,20 +15603,27 @@ function write_comments_xml(data) {
15398
15603
  o.push("</authors>");
15399
15604
  o.push("<commentList>");
15400
15605
  data.forEach(function(d) {
15401
- var lastauthor = 0, ts = [];
15606
+ var lastauthor = 0, ts = [], tcnt = 0;
15402
15607
  if (d[1][0] && d[1][0].T && d[1][0].ID) lastauthor = iauthor.indexOf("tc=" + d[1][0].ID);
15403
- else d[1].forEach(function(c) {
15608
+ d[1].forEach(function(c) {
15404
15609
  if (c.a) lastauthor = iauthor.indexOf(escapexml(c.a));
15405
- ts.push(c.t || "");
15610
+ if (c.T) ++tcnt;
15611
+ ts.push(c.t == null ? "" : escapexml(c.t));
15406
15612
  });
15407
- o.push('<comment ref="' + d[0] + '" authorId="' + lastauthor + '"><text>');
15408
- if (ts.length <= 1) o.push(writetag("t", escapexml(ts[0] || "")));
15409
- else {
15613
+ if (tcnt === 0) {
15614
+ d[1].forEach(function(c) {
15615
+ o.push('<comment ref="' + d[0] + '" authorId="' + iauthor.indexOf(escapexml(c.a)) + '"><text>');
15616
+ o.push(writetag("t", c.t == null ? "" : escapexml(c.t)));
15617
+ o.push("</text></comment>");
15618
+ });
15619
+ } else {
15620
+ if (d[1][0] && d[1][0].T && d[1][0].ID) lastauthor = iauthor.indexOf("tc=" + d[1][0].ID);
15621
+ o.push('<comment ref="' + d[0] + '" authorId="' + lastauthor + '"><text>');
15410
15622
  var t = "Comment:\n " + ts[0] + "\n";
15411
15623
  for (var i = 1; i < ts.length; ++i) t += "Reply:\n " + ts[i] + "\n";
15412
15624
  o.push(writetag("t", escapexml(t)));
15625
+ o.push("</text></comment>");
15413
15626
  }
15414
- o.push("</text></comment>");
15415
15627
  });
15416
15628
  o.push("</commentList>");
15417
15629
  if (o.length > 2) {
@@ -15461,6 +15673,11 @@ function write_people_xml(people) {
15461
15673
  return o.join("");
15462
15674
  }
15463
15675
  var VBAFMTS = ["xlsb", "xlsm", "xlam", "biff8", "xla"];
15676
+ var crefregex = /(^|[^._A-Z0-9])(\$?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])(\$?)(\d{1,7})(?![_.\(A-Za-z0-9])/g;
15677
+ try {
15678
+ crefregex = /(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})(?![_.\(A-Za-z0-9])/g;
15679
+ } catch (e) {
15680
+ }
15464
15681
  var browser_has_Map = typeof Map !== "undefined";
15465
15682
  function get_sst_id(sst, str, rev) {
15466
15683
  var i = 0, len = sst.length;
@@ -15526,7 +15743,7 @@ function get_cell_style(styles, cell, opts) {
15526
15743
  var i = 60, len = styles.length;
15527
15744
  if (z == null && opts.ssf) {
15528
15745
  for (; i < 392; ++i) if (opts.ssf[i] == null) {
15529
- SSF_load(cell.z, i);
15746
+ SSF__load(cell.z, i);
15530
15747
  opts.ssf[i] = cell.z;
15531
15748
  opts.revssf[cell.z] = z = i;
15532
15749
  break;
@@ -15628,7 +15845,7 @@ function write_ws_xml_autofilter(data, ws, wb, idx) {
15628
15845
  var name = names[i];
15629
15846
  if (name.Name != "_xlnm._FilterDatabase") continue;
15630
15847
  if (name.Sheet != idx) continue;
15631
- name.Ref = "'" + wb.SheetNames[idx] + "'!" + ref2;
15848
+ name.Ref = formula_quote_sheet_name(wb.SheetNames[idx]) + "!" + fix_range(ref2);
15632
15849
  break;
15633
15850
  }
15634
15851
  if (i == names.length) names.push({ Name: "_xlnm._FilterDatabase", Sheet: idx, Ref: "'" + wb.SheetNames[idx] + "'!" + ref2 });
@@ -15639,9 +15856,9 @@ function write_ws_xml_sheetviews(ws, opts, idx, wb) {
15639
15856
  if ((((wb || {}).Workbook || {}).Views || [])[0]) sview.rightToLeft = wb.Workbook.Views[0].RTL ? "1" : "0";
15640
15857
  return writextag("sheetViews", writextag("sheetView", null, sview), {});
15641
15858
  }
15642
- function write_ws_xml_cell(cell, ref2, ws, opts) {
15859
+ function write_ws_xml_cell(cell, ref2, ws, opts, idx, wb, date1904) {
15643
15860
  if (cell.c) ws["!comments"].push([ref2, cell.c]);
15644
- if (cell.v === void 0 && typeof cell.f !== "string" || cell.t === "z" && !cell.f) return "";
15861
+ if ((cell.v === void 0 || cell.t === "z" && !(opts || {}).sheetStubs) && typeof cell.f !== "string" && typeof cell.z == "undefined") return "";
15645
15862
  var vv = "";
15646
15863
  var oldt = cell.t, oldv = cell.v;
15647
15864
  if (cell.t !== "z") switch (cell.t) {
@@ -15649,17 +15866,26 @@ function write_ws_xml_cell(cell, ref2, ws, opts) {
15649
15866
  vv = cell.v ? "1" : "0";
15650
15867
  break;
15651
15868
  case "n":
15652
- vv = "" + cell.v;
15869
+ if (isNaN(cell.v)) {
15870
+ cell.t = "e";
15871
+ vv = BErr[cell.v = 36];
15872
+ } else if (!isFinite(cell.v)) {
15873
+ cell.t = "e";
15874
+ vv = BErr[cell.v = 7];
15875
+ } else vv = "" + cell.v;
15653
15876
  break;
15654
15877
  case "e":
15655
15878
  vv = BErr[cell.v];
15656
15879
  break;
15657
15880
  case "d":
15658
- if (opts && opts.cellDates) vv = parseDate(cell.v, -1).toISOString();
15659
- else {
15881
+ if (opts && opts.cellDates) {
15882
+ var _vv = parseDate(cell.v, date1904);
15883
+ vv = _vv.toISOString();
15884
+ if (_vv.getUTCFullYear() < 1900) vv = vv.slice(vv.indexOf("T") + 1).replace("Z", "");
15885
+ } else {
15660
15886
  cell = dup(cell);
15661
15887
  cell.t = "n";
15662
- vv = "" + (cell.v = datenum(parseDate(cell.v)));
15888
+ vv = "" + (cell.v = datenum(parseDate(cell.v, date1904), date1904));
15663
15889
  }
15664
15890
  if (typeof cell.z === "undefined") cell.z = table_fmt[14];
15665
15891
  break;
@@ -15667,7 +15893,7 @@ function write_ws_xml_cell(cell, ref2, ws, opts) {
15667
15893
  vv = cell.v;
15668
15894
  break;
15669
15895
  }
15670
- var v = writetag("v", escapexml(vv)), o = { r: ref2 };
15896
+ var v = cell.t == "z" || cell.v == null ? "" : writetag("v", escapexml(vv)), o = { r: ref2 };
15671
15897
  var os = get_cell_style(opts.cellXfs, cell, opts);
15672
15898
  if (os !== 0) o.s = os;
15673
15899
  switch (cell.t) {
@@ -15694,8 +15920,7 @@ function write_ws_xml_cell(cell, ref2, ws, opts) {
15694
15920
  v = writetag("v", "" + get_sst_id(opts.Strings, cell.v, opts.revStrings));
15695
15921
  o.t = "s";
15696
15922
  break;
15697
- }
15698
- o.t = "str";
15923
+ } else o.t = "str";
15699
15924
  break;
15700
15925
  }
15701
15926
  if (cell.t != oldt) {
@@ -15706,23 +15931,28 @@ function write_ws_xml_cell(cell, ref2, ws, opts) {
15706
15931
  var ff = cell.F && cell.F.slice(0, ref2.length) == ref2 ? { t: "array", ref: cell.F } : null;
15707
15932
  v = writextag("f", escapexml(cell.f), ff) + (cell.v != null ? v : "");
15708
15933
  }
15709
- if (cell.l) ws["!links"].push([ref2, cell.l]);
15934
+ if (cell.l) {
15935
+ cell.l.display = escapexml(vv);
15936
+ ws["!links"].push([ref2, cell.l]);
15937
+ }
15710
15938
  if (cell.D) o.cm = 1;
15711
15939
  return writextag("c", v, o);
15712
15940
  }
15713
15941
  function write_ws_xml_data(ws, opts, idx, wb) {
15714
15942
  var o = [], r = [], range2 = safe_decode_range(ws["!ref"]), cell = "", ref2, rr = "", cols = [], R = 0, C = 0, rows = ws["!rows"];
15715
- var dense = Array.isArray(ws);
15943
+ var dense = ws["!data"] != null, data = dense ? ws["!data"] : [];
15716
15944
  var params = { r: rr }, row, height = -1;
15945
+ var date1904 = (((wb || {}).Workbook || {}).WBProps || {}).date1904;
15717
15946
  for (C = range2.s.c; C <= range2.e.c; ++C) cols[C] = encode_col(C);
15718
15947
  for (R = range2.s.r; R <= range2.e.r; ++R) {
15719
15948
  r = [];
15720
15949
  rr = encode_row(R);
15950
+ var data_R = dense ? data[R] : [];
15721
15951
  for (C = range2.s.c; C <= range2.e.c; ++C) {
15722
15952
  ref2 = cols[C] + rr;
15723
- var _cell = dense ? (ws[R] || [])[C] : ws[ref2];
15953
+ var _cell = dense ? data_R[C] : ws[ref2];
15724
15954
  if (_cell === void 0) continue;
15725
- if ((cell = write_ws_xml_cell(_cell, ref2, ws, opts)) != null) r.push(cell);
15955
+ if ((cell = write_ws_xml_cell(_cell, ref2, ws, opts, idx, wb, date1904)) != null) r.push(cell);
15726
15956
  }
15727
15957
  if (r.length > 0 || rows && rows[R]) {
15728
15958
  params = { r: rr };
@@ -15794,7 +16024,7 @@ function write_ws_xml(idx, opts, wb, rels) {
15794
16024
  o[sidx = o.length] = "<sheetData/>";
15795
16025
  ws["!links"] = [];
15796
16026
  if (ws["!ref"] != null) {
15797
- rdata = write_ws_xml_data(ws, opts);
16027
+ rdata = write_ws_xml_data(ws, opts, idx, wb);
15798
16028
  if (rdata.length > 0) o[o.length] = rdata;
15799
16029
  }
15800
16030
  if (o.length > sidx + 1) {
@@ -15814,11 +16044,12 @@ function write_ws_xml(idx, opts, wb, rels) {
15814
16044
  if (!l[1].Target) return;
15815
16045
  rel = { "ref": l[0] };
15816
16046
  if (l[1].Target.charAt(0) != "#") {
15817
- rId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#.*$/, ""), RELS.HLINK);
16047
+ rId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#[\s\S]*$/, ""), RELS.HLINK);
15818
16048
  rel["r:id"] = "rId" + rId;
15819
16049
  }
15820
16050
  if ((relc = l[1].Target.indexOf("#")) > -1) rel.location = escapexml(l[1].Target.slice(relc + 1));
15821
16051
  if (l[1].Tooltip) rel.tooltip = escapexml(l[1].Tooltip);
16052
+ rel.display = l[1].display;
15822
16053
  o[o.length] = writextag("hyperlink", null, rel);
15823
16054
  });
15824
16055
  o[o.length] = "</hyperlinks>";
@@ -15862,17 +16093,21 @@ var WBPropsDef = [
15862
16093
  ["showPivotChartFilter", false, "bool"],
15863
16094
  ["updateLinks", "userSet"]
15864
16095
  ];
15865
- var badchars = /* @__PURE__ */ "][*?/\\".split("");
16096
+ var badchars = /* @__PURE__ */ ":][*?/\\".split("");
15866
16097
  function check_ws_name(n, safe) {
15867
- if (n.length > 31) {
15868
- throw new Error("Sheet names cannot exceed 31 chars");
16098
+ try {
16099
+ if (n == "") throw new Error("Sheet name cannot be blank");
16100
+ if (n.length > 31) throw new Error("Sheet name cannot exceed 31 chars");
16101
+ if (n.charCodeAt(0) == 39 || n.charCodeAt(n.length - 1) == 39) throw new Error("Sheet name cannot start or end with apostrophe (')");
16102
+ if (n.toLowerCase() == "history") throw new Error("Sheet name cannot be 'History'");
16103
+ badchars.forEach(function(c) {
16104
+ if (n.indexOf(c) == -1) return;
16105
+ throw new Error("Sheet name cannot contain : \\ / ? * [ ]");
16106
+ });
16107
+ } catch (e) {
16108
+ throw e;
15869
16109
  }
15870
- var _good = true;
15871
- badchars.forEach(function(c) {
15872
- if (n.indexOf(c) == -1) return;
15873
- throw new Error("Sheet name cannot contain : \\ / ? * [ ]");
15874
- });
15875
- return _good;
16110
+ return true;
15876
16111
  }
15877
16112
  function check_wb_names(N, S, codes) {
15878
16113
  N.forEach(function(n, i) {
@@ -15890,6 +16125,19 @@ function check_wb(wb) {
15890
16125
  var Sheets = wb.Workbook && wb.Workbook.Sheets || [];
15891
16126
  check_wb_names(wb.SheetNames, Sheets, !!wb.vbaraw);
15892
16127
  for (var i = 0; i < wb.SheetNames.length; ++i) check_ws(wb.Sheets[wb.SheetNames[i]], wb.SheetNames[i], i);
16128
+ wb.SheetNames.forEach(function(n, i2) {
16129
+ var ws = wb.Sheets[n];
16130
+ if (!ws || !ws["!autofilter"]) return;
16131
+ var DN;
16132
+ if (!wb.Workbook) wb.Workbook = {};
16133
+ if (!wb.Workbook.Names) wb.Workbook.Names = [];
16134
+ wb.Workbook.Names.forEach(function(dn) {
16135
+ if (dn.Name == "_xlnm._FilterDatabase" && dn.Sheet == i2) DN = dn;
16136
+ });
16137
+ var nn = formula_quote_sheet_name(n) + "!" + fix_range(ws["!autofilter"].ref);
16138
+ if (DN) DN.Ref = nn;
16139
+ else wb.Workbook.Names.push({ Name: "_xlnm._FilterDatabase", Sheet: i2, Ref: nn });
16140
+ });
15893
16141
  }
15894
16142
  function write_wb_xml(wb) {
15895
16143
  var o = [XML_HEADER];
@@ -15962,6 +16210,8 @@ function write_wb_xml(wb) {
15962
16210
  function make_html_row(ws, r, R, o) {
15963
16211
  var M = ws["!merges"] || [];
15964
16212
  var oo = [];
16213
+ var sp = {};
16214
+ var dense = ws["!data"] != null;
15965
16215
  for (var C = r.s.c; C <= r.e.c; ++C) {
15966
16216
  var RS = 0, CS = 0;
15967
16217
  for (var j = 0; j < M.length; ++j) {
@@ -15976,18 +16226,22 @@ function make_html_row(ws, r, R, o) {
15976
16226
  break;
15977
16227
  }
15978
16228
  if (RS < 0) continue;
15979
- var coord = encode_cell({ r: R, c: C });
15980
- var cell = o.dense ? (ws[R] || [])[C] : ws[coord];
16229
+ var coord = encode_col(C) + encode_row(R);
16230
+ var cell = dense ? (ws["!data"][R] || [])[C] : ws[coord];
16231
+ if (cell && cell.t == "n" && cell.v != null && !isFinite(cell.v)) {
16232
+ if (isNaN(cell.v)) cell = { t: "e", v: 36, w: BErr[36] };
16233
+ else cell = { t: "e", v: 7, w: BErr[7] };
16234
+ }
15981
16235
  var w = cell && cell.v != null && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || "")) || "";
15982
- var sp = {};
16236
+ sp = {};
15983
16237
  if (RS > 1) sp.rowspan = RS;
15984
16238
  if (CS > 1) sp.colspan = CS;
15985
16239
  if (o.editable) w = '<span contenteditable="true">' + w + "</span>";
15986
16240
  else if (cell) {
15987
16241
  sp["data-t"] = cell && cell.t || "z";
15988
- if (cell.v != null) sp["data-v"] = cell.v;
16242
+ if (cell.v != null) sp["data-v"] = escapehtml(cell.v instanceof Date ? cell.v.toISOString() : cell.v);
15989
16243
  if (cell.z != null) sp["data-z"] = cell.z;
15990
- if (cell.l && (cell.l.Target || "#").charAt(0) != "#") w = '<a href="' + cell.l.Target + '">' + w + "</a>";
16244
+ if (cell.l && (cell.l.Target || "#").charAt(0) != "#") w = '<a href="' + escapehtml(cell.l.Target) + '">' + w + "</a>";
15991
16245
  }
15992
16246
  sp.id = (o.id || "sjs") + "-" + coord;
15993
16247
  oo.push(writextag("td", w, sp));
@@ -16006,15 +16260,19 @@ function sheet_to_html(ws, opts) {
16006
16260
  var header = o.header != null ? o.header : HTML_BEGIN;
16007
16261
  var footer = o.footer != null ? o.footer : HTML_END;
16008
16262
  var out = [header];
16009
- var r = decode_range(ws["!ref"]);
16010
- o.dense = Array.isArray(ws);
16263
+ var r = decode_range(ws["!ref"] || "A1");
16011
16264
  out.push(make_html_preamble(ws, r, o));
16012
- for (var R = r.s.r; R <= r.e.r; ++R) out.push(make_html_row(ws, r, R, o));
16265
+ if (ws["!ref"]) for (var R = r.s.r; R <= r.e.r; ++R) out.push(make_html_row(ws, r, R, o));
16013
16266
  out.push("</table>" + footer);
16014
16267
  return out.join("");
16015
16268
  }
16016
16269
  function sheet_add_dom(ws, table, _opts) {
16270
+ var rows = table.rows;
16271
+ if (!rows) {
16272
+ throw "Unsupported origin when " + table.tagName + " is not a TABLE";
16273
+ }
16017
16274
  var opts = _opts || {};
16275
+ var dense = ws["!data"] != null;
16018
16276
  var or_R = 0, or_C = 0;
16019
16277
  if (opts.origin != null) {
16020
16278
  if (typeof opts.origin == "number") or_R = opts.origin;
@@ -16024,7 +16282,6 @@ function sheet_add_dom(ws, table, _opts) {
16024
16282
  or_C = _origin.c;
16025
16283
  }
16026
16284
  }
16027
- var rows = table.getElementsByTagName("tr");
16028
16285
  var sheetRows = Math.min(opts.sheetRows || 1e7, rows.length);
16029
16286
  var range2 = { s: { r: 0, c: 0 }, e: { r: or_R, c: or_C } };
16030
16287
  if (ws["!ref"]) {
@@ -16045,7 +16302,7 @@ function sheet_add_dom(ws, table, _opts) {
16045
16302
  if (opts.display) continue;
16046
16303
  rowinfo[R] = { hidden: true };
16047
16304
  }
16048
- var elts = row.children;
16305
+ var elts = row.cells;
16049
16306
  for (_C = C = 0; _C < elts.length; ++_C) {
16050
16307
  var elt = elts[_C];
16051
16308
  if (opts.display && is_dom_element_hidden(elt)) continue;
@@ -16065,14 +16322,16 @@ function sheet_add_dom(ws, table, _opts) {
16065
16322
  if (v != null) {
16066
16323
  if (v.length == 0) o.t = _t || "z";
16067
16324
  else if (opts.raw || v.trim().length == 0 || _t == "s") ;
16325
+ else if (_t == "e" && BErr[+v]) o = { t: "e", v: +v, w: BErr[+v] };
16068
16326
  else if (v === "TRUE") o = { t: "b", v: true };
16069
16327
  else if (v === "FALSE") o = { t: "b", v: false };
16070
16328
  else if (!isNaN(fuzzynum(v))) o = { t: "n", v: fuzzynum(v) };
16071
16329
  else if (!isNaN(fuzzydate(v).getDate())) {
16072
16330
  o = { t: "d", v: parseDate(v) };
16331
+ if (opts.UTC) o.v = local_to_utc(o.v);
16073
16332
  if (!opts.cellDates) o = { t: "n", v: datenum(o.v) };
16074
16333
  o.z = opts.dateNF || table_fmt[14];
16075
- }
16334
+ } else if (v.charCodeAt(0) == 35 && RBErr[v] != null) o = { t: "e", v: RBErr[v], w: v };
16076
16335
  }
16077
16336
  if (o.z === void 0 && z != null) o.z = z;
16078
16337
  var l = "", Aelts = elt.getElementsByTagName("A");
@@ -16082,10 +16341,10 @@ function sheet_add_dom(ws, table, _opts) {
16082
16341
  if (l.charAt(0) != "#") break;
16083
16342
  }
16084
16343
  }
16085
- if (l && l.charAt(0) != "#") o.l = { Target: l };
16086
- if (opts.dense) {
16087
- if (!ws[R + or_R]) ws[R + or_R] = [];
16088
- ws[R + or_R][C + or_C] = o;
16344
+ if (l && l.charAt(0) != "#" && l.slice(0, 11).toLowerCase() != "javascript:") o.l = { Target: l };
16345
+ if (dense) {
16346
+ if (!ws["!data"][R + or_R]) ws["!data"][R + or_R] = [];
16347
+ ws["!data"][R + or_R][C + or_C] = o;
16089
16348
  } else ws[encode_cell({ c: C + or_C, r: R + or_R })] = o;
16090
16349
  if (range2.e.c < C + or_C) range2.e.c = C + or_C;
16091
16350
  C += CS;
@@ -16100,11 +16359,13 @@ function sheet_add_dom(ws, table, _opts) {
16100
16359
  }
16101
16360
  function parse_dom_table(table, _opts) {
16102
16361
  var opts = _opts || {};
16103
- var ws = opts.dense ? [] : {};
16362
+ var ws = {};
16363
+ if (opts.dense) ws["!data"] = [];
16104
16364
  return sheet_add_dom(ws, table, _opts);
16105
16365
  }
16106
16366
  function table_to_book(table, opts) {
16107
- return sheet_to_workbook(parse_dom_table(table, opts), opts);
16367
+ var o = sheet_to_workbook(parse_dom_table(table, opts), opts);
16368
+ return o;
16108
16369
  }
16109
16370
  function is_dom_element_hidden(element) {
16110
16371
  var display = "";
@@ -16118,6 +16379,25 @@ function get_get_computed_style_function(element) {
16118
16379
  if (typeof getComputedStyle === "function") return getComputedStyle;
16119
16380
  return null;
16120
16381
  }
16382
+ /*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */
16383
+ (function() {
16384
+ try {
16385
+ if (typeof Uint8Array == "undefined")
16386
+ return "slice";
16387
+ if (typeof Uint8Array.prototype.subarray == "undefined")
16388
+ return "slice";
16389
+ if (typeof Buffer !== "undefined") {
16390
+ if (typeof Buffer.prototype.subarray == "undefined")
16391
+ return "slice";
16392
+ if ((typeof Buffer.from == "function" ? Buffer.from([72, 62]) : new Buffer([72, 62])) instanceof Uint8Array)
16393
+ return "subarray";
16394
+ return "slice";
16395
+ }
16396
+ return "subarray";
16397
+ } catch (e) {
16398
+ return "slice";
16399
+ }
16400
+ })();
16121
16401
  function fix_opts_func(defaults) {
16122
16402
  return function fix_opts(opts) {
16123
16403
  for (var i = 0; i != defaults.length; ++i) {
@@ -16142,7 +16422,6 @@ function fix_write_opts(opts) {
16142
16422
  ])(opts);
16143
16423
  }
16144
16424
  function write_zip_xlsx(wb, opts) {
16145
- _shapeid = 1024;
16146
16425
  if (wb && !wb.SSF) {
16147
16426
  wb.SSF = dup(table_fmt);
16148
16427
  }
@@ -16224,10 +16503,10 @@ function write_zip_xlsx(wb, opts) {
16224
16503
  });
16225
16504
  });
16226
16505
  if (needtc) {
16227
- cf = "xl/threadedComments/threadedComment" + rId + "." + wbext;
16506
+ cf = "xl/threadedComments/threadedComment" + rId + ".xml";
16228
16507
  zip_add_file(zip, cf, write_tcmnt_xml(comments, people, opts));
16229
16508
  ct.threadedcomments.push(cf);
16230
- add_rels(wsrels, -1, "../threadedComments/threadedComment" + rId + "." + wbext, RELS.TCMNT);
16509
+ add_rels(wsrels, -1, "../threadedComments/threadedComment" + rId + ".xml", RELS.TCMNT);
16231
16510
  }
16232
16511
  cf = "xl/comments" + rId + "." + wbext;
16233
16512
  zip_add_file(zip, cf, write_comments_xml(comments));
@@ -16236,7 +16515,7 @@ function write_zip_xlsx(wb, opts) {
16236
16515
  need_vml = true;
16237
16516
  }
16238
16517
  if (ws["!legacy"]) {
16239
- if (need_vml) zip_add_file(zip, "xl/drawings/vmlDrawing" + rId + ".vml", write_comments_vml(rId, ws["!comments"]));
16518
+ if (need_vml) zip_add_file(zip, "xl/drawings/vmlDrawing" + rId + ".vml", write_vml(rId, ws["!comments"]));
16240
16519
  }
16241
16520
  delete ws["!comments"];
16242
16521
  delete ws["!legacy"];
@@ -16361,10 +16640,10 @@ function writeSyncXLSX(wb, opts) {
16361
16640
  }
16362
16641
  return write_zip_typeXLSX(wb, o);
16363
16642
  }
16364
- function make_json_row(sheet, r, R, cols, header, hdr, dense, o) {
16643
+ function make_json_row(sheet, r, R, cols, header, hdr, o) {
16365
16644
  var rr = encode_row(R);
16366
16645
  var defval = o.defval, raw = o.raw || !Object.prototype.hasOwnProperty.call(o, "raw");
16367
- var isempty = true;
16646
+ var isempty = true, dense = sheet["!data"] != null;
16368
16647
  var row = header === 1 ? [] : {};
16369
16648
  if (header !== 1) {
16370
16649
  if (Object.defineProperty) try {
@@ -16374,9 +16653,9 @@ function make_json_row(sheet, r, R, cols, header, hdr, dense, o) {
16374
16653
  }
16375
16654
  else row.__rowNum__ = R;
16376
16655
  }
16377
- if (!dense || sheet[R]) for (var C = r.s.c; C <= r.e.c; ++C) {
16378
- var val = dense ? sheet[R][C] : sheet[cols[C] + rr];
16379
- if (val === void 0 || val.t === void 0) {
16656
+ if (!dense || sheet["!data"][R]) for (var C = r.s.c; C <= r.e.c; ++C) {
16657
+ var val = dense ? (sheet["!data"][R] || [])[C] : sheet[cols[C] + rr];
16658
+ if (val == null || val.t === void 0) {
16380
16659
  if (defval === void 0) continue;
16381
16660
  if (hdr[C] != null) {
16382
16661
  row[hdr[C]] = defval;
@@ -16392,9 +16671,14 @@ function make_json_row(sheet, r, R, cols, header, hdr, dense, o) {
16392
16671
  v = v == 0 ? null : void 0;
16393
16672
  break;
16394
16673
  case "s":
16395
- case "d":
16396
16674
  case "b":
16397
16675
  case "n":
16676
+ if (!val.z || !fmt_is_date(val.z)) break;
16677
+ v = numdate(v);
16678
+ if (typeof v == "number") break;
16679
+ /* falls through */
16680
+ case "d":
16681
+ if (!(o && (o.UTC || o.raw === false))) v = utc_to_local(new Date(v));
16398
16682
  break;
16399
16683
  default:
16400
16684
  throw new Error("unrecognized type " + val.t);
@@ -16406,7 +16690,7 @@ function make_json_row(sheet, r, R, cols, header, hdr, dense, o) {
16406
16690
  else if (raw && v === null) row[hdr[C]] = null;
16407
16691
  else continue;
16408
16692
  } else {
16409
- row[hdr[C]] = raw && (val.t !== "n" || val.t === "n" && o.rawNumbers !== false) ? v : format_cell(val, v, o);
16693
+ row[hdr[C]] = (val.t === "n" && typeof o.rawNumbers === "boolean" ? o.rawNumbers : raw) ? v : format_cell(val, v, o);
16410
16694
  }
16411
16695
  if (v != null) isempty = false;
16412
16696
  }
@@ -16439,16 +16723,16 @@ function sheet_to_json(sheet, opts) {
16439
16723
  var cols = [];
16440
16724
  var out = [];
16441
16725
  var outi = 0, counter = 0;
16442
- var dense = Array.isArray(sheet);
16726
+ var dense = sheet["!data"] != null;
16443
16727
  var R = r.s.r, C = 0;
16444
16728
  var header_cnt = {};
16445
- if (dense && !sheet[R]) sheet[R] = [];
16729
+ if (dense && !sheet["!data"][R]) sheet["!data"][R] = [];
16446
16730
  var colinfo = o.skipHidden && sheet["!cols"] || [];
16447
16731
  var rowinfo = o.skipHidden && sheet["!rows"] || [];
16448
16732
  for (C = r.s.c; C <= r.e.c; ++C) {
16449
16733
  if ((colinfo[C] || {}).hidden) continue;
16450
16734
  cols[C] = encode_col(C);
16451
- val = dense ? sheet[R][C] : sheet[cols[C] + rr];
16735
+ val = dense ? sheet["!data"][R][C] : sheet[cols[C] + rr];
16452
16736
  switch (header) {
16453
16737
  case 1:
16454
16738
  hdr[C] = C - r.s.c;
@@ -16476,19 +16760,21 @@ function sheet_to_json(sheet, opts) {
16476
16760
  }
16477
16761
  for (R = r.s.r + offset; R <= r.e.r; ++R) {
16478
16762
  if ((rowinfo[R] || {}).hidden) continue;
16479
- var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);
16763
+ var row = make_json_row(sheet, r, R, cols, header, hdr, o);
16480
16764
  if (row.isempty === false || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row;
16481
16765
  }
16482
16766
  out.length = outi;
16483
16767
  return out;
16484
16768
  }
16485
16769
  var qreg = /"/g;
16486
- function make_csv_row(sheet, r, R, cols, fs, rs, FS, o) {
16770
+ function make_csv_row(sheet, r, R, cols, fs, rs, FS, w, o) {
16487
16771
  var isempty = true;
16488
16772
  var row = [], txt = "", rr = encode_row(R);
16773
+ var dense = sheet["!data"] != null;
16774
+ var datarow = dense && sheet["!data"][R] || [];
16489
16775
  for (var C = r.s.c; C <= r.e.c; ++C) {
16490
16776
  if (!cols[C]) continue;
16491
- var val = o.dense ? (sheet[R] || [])[C] : sheet[cols[C] + rr];
16777
+ var val = dense ? datarow[C] : sheet[cols[C] + rr];
16492
16778
  if (val == null) txt = "";
16493
16779
  else if (val.v != null) {
16494
16780
  isempty = false;
@@ -16497,7 +16783,7 @@ function make_csv_row(sheet, r, R, cols, fs, rs, FS, o) {
16497
16783
  txt = '"' + txt.replace(qreg, '""') + '"';
16498
16784
  break;
16499
16785
  }
16500
- if (txt == "ID") txt = '"ID"';
16786
+ if (txt == "ID" && w == 0 && row.length == 0) txt = '"ID"';
16501
16787
  } else if (val.f != null && !val.F) {
16502
16788
  isempty = false;
16503
16789
  txt = "=" + val.f;
@@ -16505,6 +16791,7 @@ function make_csv_row(sheet, r, R, cols, fs, rs, FS, o) {
16505
16791
  } else txt = "";
16506
16792
  row.push(txt);
16507
16793
  }
16794
+ if (o.strip) while (row[row.length - 1] === "") --row.length;
16508
16795
  if (o.blankrows === false && isempty) return null;
16509
16796
  return row.join(FS);
16510
16797
  }
@@ -16515,23 +16802,19 @@ function sheet_to_csv(sheet, opts) {
16515
16802
  var r = safe_decode_range(sheet["!ref"]);
16516
16803
  var FS = o.FS !== void 0 ? o.FS : ",", fs = FS.charCodeAt(0);
16517
16804
  var RS = o.RS !== void 0 ? o.RS : "\n", rs = RS.charCodeAt(0);
16518
- var endregex = new RegExp((FS == "|" ? "\\|" : FS) + "+$");
16519
16805
  var row = "", cols = [];
16520
- o.dense = Array.isArray(sheet);
16521
16806
  var colinfo = o.skipHidden && sheet["!cols"] || [];
16522
16807
  var rowinfo = o.skipHidden && sheet["!rows"] || [];
16523
16808
  for (var C = r.s.c; C <= r.e.c; ++C) if (!(colinfo[C] || {}).hidden) cols[C] = encode_col(C);
16524
16809
  var w = 0;
16525
16810
  for (var R = r.s.r; R <= r.e.r; ++R) {
16526
16811
  if ((rowinfo[R] || {}).hidden) continue;
16527
- row = make_csv_row(sheet, r, R, cols, fs, rs, FS, o);
16812
+ row = make_csv_row(sheet, r, R, cols, fs, rs, FS, w, o);
16528
16813
  if (row == null) {
16529
16814
  continue;
16530
16815
  }
16531
- if (o.strip) row = row.replace(endregex, "");
16532
16816
  if (row || o.blankrows !== false) out.push((w++ ? RS : "") + row);
16533
16817
  }
16534
- delete o.dense;
16535
16818
  return out.join("");
16536
16819
  }
16537
16820
  function sheet_to_txt(sheet, opts) {
@@ -16541,18 +16824,18 @@ function sheet_to_txt(sheet, opts) {
16541
16824
  var s = sheet_to_csv(sheet, opts);
16542
16825
  return s;
16543
16826
  }
16544
- function sheet_to_formulae(sheet) {
16827
+ function sheet_to_formulae(sheet, opts) {
16545
16828
  var y = "", x, val = "";
16546
16829
  if (sheet == null || sheet["!ref"] == null) return [];
16547
16830
  var r = safe_decode_range(sheet["!ref"]), rr = "", cols = [], C;
16548
16831
  var cmds = [];
16549
- var dense = Array.isArray(sheet);
16832
+ var dense = sheet["!data"] != null;
16550
16833
  for (C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);
16551
16834
  for (var R = r.s.r; R <= r.e.r; ++R) {
16552
16835
  rr = encode_row(R);
16553
16836
  for (C = r.s.c; C <= r.e.c; ++C) {
16554
16837
  y = cols[C] + rr;
16555
- x = dense ? (sheet[R] || [])[C] : sheet[y];
16838
+ x = dense ? (sheet["!data"][R] || [])[C] : sheet[y];
16556
16839
  val = "";
16557
16840
  if (x === void 0) continue;
16558
16841
  else if (x.F != null) {
@@ -16562,6 +16845,7 @@ function sheet_to_formulae(sheet) {
16562
16845
  if (y.indexOf(":") == -1) y = y + ":" + y;
16563
16846
  }
16564
16847
  if (x.f != null) val = x.f;
16848
+ else if (opts && opts.values === false) continue;
16565
16849
  else if (x.t == "z") continue;
16566
16850
  else if (x.t == "n" && x.v != null) val = "" + x.v;
16567
16851
  else if (x.t == "b") val = x.v ? "TRUE" : "FALSE";
@@ -16576,8 +16860,10 @@ function sheet_to_formulae(sheet) {
16576
16860
  }
16577
16861
  function sheet_add_json(_ws, js, opts) {
16578
16862
  var o = opts || {};
16863
+ var dense = _ws ? _ws["!data"] != null : o.dense;
16579
16864
  var offset = +!o.skipHeader;
16580
16865
  var ws = _ws || {};
16866
+ if (!_ws && dense) ws["!data"] = [];
16581
16867
  var _R = 0, _C = 0;
16582
16868
  if (ws && o.origin != null) {
16583
16869
  if (typeof o.origin == "number") _R = o.origin;
@@ -16587,7 +16873,6 @@ function sheet_add_json(_ws, js, opts) {
16587
16873
  _C = _origin.c;
16588
16874
  }
16589
16875
  }
16590
- var cell;
16591
16876
  var range2 = { s: { c: 0, r: 0 }, e: { c: _C, r: _R + js.length - 1 + offset } };
16592
16877
  if (ws["!ref"]) {
16593
16878
  var _range = safe_decode_range(ws["!ref"]);
@@ -16604,33 +16889,40 @@ function sheet_add_json(_ws, js, opts) {
16604
16889
  }
16605
16890
  }
16606
16891
  var hdr = o.header || [], C = 0;
16892
+ var ROW = [];
16607
16893
  js.forEach(function(JS, R) {
16894
+ if (dense && !ws["!data"][_R + R + offset]) ws["!data"][_R + R + offset] = [];
16895
+ if (dense) ROW = ws["!data"][_R + R + offset];
16608
16896
  keys(JS).forEach(function(k) {
16609
16897
  if ((C = hdr.indexOf(k)) == -1) hdr[C = hdr.length] = k;
16610
16898
  var v = JS[k];
16611
16899
  var t = "z";
16612
16900
  var z = "";
16613
- var ref2 = encode_cell({ c: _C + C, r: _R + R + offset });
16614
- cell = ws_get_cell_stub(ws, ref2);
16901
+ var ref2 = dense ? "" : encode_col(_C + C) + encode_row(_R + R + offset);
16902
+ var cell = dense ? ROW[_C + C] : ws[ref2];
16615
16903
  if (v && typeof v === "object" && !(v instanceof Date)) {
16616
- ws[ref2] = v;
16904
+ if (dense) ROW[_C + C] = v;
16905
+ else ws[ref2] = v;
16617
16906
  } else {
16618
16907
  if (typeof v == "number") t = "n";
16619
16908
  else if (typeof v == "boolean") t = "b";
16620
16909
  else if (typeof v == "string") t = "s";
16621
16910
  else if (v instanceof Date) {
16622
16911
  t = "d";
16912
+ if (!o.UTC) v = local_to_utc(v);
16623
16913
  if (!o.cellDates) {
16624
16914
  t = "n";
16625
16915
  v = datenum(v);
16626
16916
  }
16627
- z = o.dateNF || table_fmt[14];
16917
+ z = cell != null && cell.z && fmt_is_date(cell.z) ? cell.z : o.dateNF || table_fmt[14];
16628
16918
  } else if (v === null && o.nullError) {
16629
16919
  t = "e";
16630
16920
  v = 0;
16631
16921
  }
16632
- if (!cell) ws[ref2] = cell = { t, v };
16633
- else {
16922
+ if (!cell) {
16923
+ if (!dense) ws[ref2] = cell = { t, v };
16924
+ else ROW[_C + C] = cell = { t, v };
16925
+ } else {
16634
16926
  cell.t = t;
16635
16927
  cell.v = v;
16636
16928
  delete cell.w;
@@ -16643,7 +16935,11 @@ function sheet_add_json(_ws, js, opts) {
16643
16935
  });
16644
16936
  range2.e.c = Math.max(range2.e.c, _C + hdr.length - 1);
16645
16937
  var __R = encode_row(_R);
16646
- if (offset) for (C = 0; C < hdr.length; ++C) ws[encode_col(C + _C) + __R] = { t: "s", v: hdr[C] };
16938
+ if (dense && !ws["!data"][_R]) ws["!data"][_R] = [];
16939
+ if (offset) for (C = 0; C < hdr.length; ++C) {
16940
+ if (dense) ws["!data"][_R][C + _C] = { t: "s", v: hdr[C] };
16941
+ else ws[encode_col(C + _C) + __R] = { t: "s", v: hdr[C] };
16942
+ }
16647
16943
  ws["!ref"] = encode_range(range2);
16648
16944
  return ws;
16649
16945
  }
@@ -16652,15 +16948,15 @@ function json_to_sheet(js, opts) {
16652
16948
  }
16653
16949
  function ws_get_cell_stub(ws, R, C) {
16654
16950
  if (typeof R == "string") {
16655
- if (Array.isArray(ws)) {
16951
+ if (ws["!data"] != null) {
16656
16952
  var RC = decode_cell(R);
16657
- if (!ws[RC.r]) ws[RC.r] = [];
16658
- return ws[RC.r][RC.c] || (ws[RC.r][RC.c] = { t: "z" });
16953
+ if (!ws["!data"][RC.r]) ws["!data"][RC.r] = [];
16954
+ return ws["!data"][RC.r][RC.c] || (ws["!data"][RC.r][RC.c] = { t: "z" });
16659
16955
  }
16660
16956
  return ws[R] || (ws[R] = { t: "z" });
16661
16957
  }
16662
16958
  if (typeof R != "number") return ws_get_cell_stub(ws, encode_cell(R));
16663
- return ws_get_cell_stub(ws, encode_cell({ r: R, c: C || 0 }));
16959
+ return ws_get_cell_stub(ws, encode_col(C || 0) + encode_row(R));
16664
16960
  }
16665
16961
  function wb_sheet_idx(wb, sh) {
16666
16962
  if (typeof sh == "number") {
@@ -16672,8 +16968,10 @@ function wb_sheet_idx(wb, sh) {
16672
16968
  throw new Error("Cannot find sheet name |" + sh + "|");
16673
16969
  } else throw new Error("Cannot find sheet |" + sh + "|");
16674
16970
  }
16675
- function book_new() {
16676
- return { SheetNames: [], Sheets: {} };
16971
+ function book_new(ws, wsname) {
16972
+ var wb = { SheetNames: [], Sheets: {} };
16973
+ if (ws) book_append_sheet(wb, ws, wsname || "Sheet1");
16974
+ return wb;
16677
16975
  }
16678
16976
  function book_append_sheet(wb, ws, name, roll) {
16679
16977
  var i = 1;
@@ -16681,10 +16979,10 @@ function book_append_sheet(wb, ws, name, roll) {
16681
16979
  for (; i <= 65535; ++i, name = void 0) if (wb.SheetNames.indexOf(name = "Sheet" + i) == -1) break;
16682
16980
  }
16683
16981
  if (!name || wb.SheetNames.length >= 65535) throw new Error("Too many worksheets");
16684
- if (roll && wb.SheetNames.indexOf(name) >= 0) {
16685
- var m = name.match(/(^.*?)(\d+)$/);
16686
- i = m && +m[2] || 0;
16687
- var root = m && m[1] || name;
16982
+ if (roll && wb.SheetNames.indexOf(name) >= 0 && name.length < 32) {
16983
+ var m = name.match(/\d+$/);
16984
+ i = m && +m[0] || 0;
16985
+ var root = m && name.slice(0, m.index) || name;
16688
16986
  for (++i; i <= 65535; ++i) if (wb.SheetNames.indexOf(name = root + i) == -1) break;
16689
16987
  }
16690
16988
  check_ws_name(name);
@@ -16741,6 +17039,12 @@ function sheet_set_array_formula(ws, range2, formula, dynamic) {
16741
17039
  if (dynamic) cell.D = true;
16742
17040
  }
16743
17041
  }
17042
+ var wsr = decode_range(ws["!ref"]);
17043
+ if (wsr.s.r > rng.s.r) wsr.s.r = rng.s.r;
17044
+ if (wsr.s.c > rng.s.c) wsr.s.c = rng.s.c;
17045
+ if (wsr.e.r < rng.e.r) wsr.e.r = rng.e.r;
17046
+ if (wsr.e.c < rng.e.c) wsr.e.c = rng.e.c;
17047
+ ws["!ref"] = encode_range(wsr);
16744
17048
  return ws;
16745
17049
  }
16746
17050
  var utils$1 = {
@@ -16754,6 +17058,7 @@ var utils$1 = {
16754
17058
  decode_cell,
16755
17059
  decode_range,
16756
17060
  format_cell,
17061
+ sheet_new,
16757
17062
  sheet_add_aoa,
16758
17063
  sheet_add_json,
16759
17064
  sheet_add_dom,
@@ -16954,7 +17259,7 @@ class BarSeries extends XmlComponent {
16954
17259
  errorBars,
16955
17260
  categories,
16956
17261
  values,
16957
- shape,
17262
+ shapeFmt,
16958
17263
  extensionList
16959
17264
  } = _l, options = __objRest(_l, [
16960
17265
  "invertIfNegative",
@@ -16965,7 +17270,7 @@ class BarSeries extends XmlComponent {
16965
17270
  "errorBars",
16966
17271
  "categories",
16967
17272
  "values",
16968
- "shape",
17273
+ "shapeFmt",
16969
17274
  "extensionList"
16970
17275
  ]);
16971
17276
  super("c:ser");
@@ -17008,8 +17313,8 @@ class BarSeries extends XmlComponent {
17008
17313
  })
17009
17314
  );
17010
17315
  }
17011
- if (shape) {
17012
- this.root.push(new StringEnumValueElement("c:shape", shape, ""));
17316
+ if (shapeFmt) {
17317
+ this.root.push(new StringEnumValueElement("c:shape", shapeFmt, ""));
17013
17318
  }
17014
17319
  if (extensionList) {
17015
17320
  this.root.push(new ExtensionList(extensionList));
@@ -29483,7 +29788,7 @@ const patchDocument = (_0) => __async(null, [_0], function* ({
29483
29788
  relationshipAdditions.push({
29484
29789
  key,
29485
29790
  entries: chartEntries.map(([tempId], index) => ({
29486
- name: `chart${index + 1}`,
29791
+ name: `chart${index + 1}.xml`,
29487
29792
  path: "charts",
29488
29793
  type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart",
29489
29794
  repl: tempId