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