forked from sheetjs/sheetjs
version bump 0.18.12
This commit is contained in:
parent
1491302aa4
commit
81b231d866
|
@ -58,11 +58,11 @@ make.cmd
|
|||
xlsworker.js
|
||||
shim.js
|
||||
test.js
|
||||
hotcross.mjs
|
||||
test.mjs
|
||||
test.ts
|
||||
test.mts
|
||||
testnocp.ts
|
||||
testbun.mjs
|
||||
.jscs.json
|
||||
.gitmodules
|
||||
.travis.yml
|
||||
|
|
|
@ -4,6 +4,12 @@ This log is intended to keep track of backwards-incompatible changes, including
|
|||
but not limited to API changes and file location changes. Minor behavioral
|
||||
changes may not be included if they are not expected to break existing code.
|
||||
|
||||
## v0.18.12
|
||||
|
||||
* `package.json` added types in `exports` structure
|
||||
* uncapped NUMBERS single-sheet single-table export
|
||||
* DBF export records using supported codepages
|
||||
|
||||
## v0.18.11
|
||||
|
||||
* Base64 input ignore data URI wrapper
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
|
||||
/* vim: set ts=2: */
|
||||
/*exported XLSX */
|
||||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */
|
||||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false, Set:false */
|
||||
var XLSX = {};
|
||||
function make_xlsx_lib(XLSX){
|
||||
|
|
|
@ -1 +1 @@
|
|||
XLSX.version = '0.18.11';
|
||||
XLSX.version = '0.18.12';
|
||||
|
|
|
@ -71,7 +71,7 @@ var bconcat = has_buf ? function(bufs) { return Buffer.concat(bufs.map(function(
|
|||
for(i = 0, maxlen = 0; i < bufs.length; maxlen += len, ++i) {
|
||||
len = bufs[i].length;
|
||||
if(bufs[i] instanceof Uint8Array) o.set(bufs[i], maxlen);
|
||||
else if(typeof bufs[i] == "string") { throw "wtf"; }
|
||||
else if(typeof bufs[i] == "string") o.set(new Uint8Array(s2a(bufs[i])), maxlen);
|
||||
else o.set(new Uint8Array(bufs[i]), maxlen);
|
||||
}
|
||||
return o;
|
||||
|
|
|
@ -1500,9 +1500,9 @@ function write_zip(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes*/
|
|||
var namebuf = new_buf(fp.length);
|
||||
for(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);
|
||||
namebuf = namebuf.slice(0, namebuf.l);
|
||||
crcs[fcnt] = CRC32.buf(/*::((*/fi.content/*::||[]):any)*/, 0);
|
||||
crcs[fcnt] = typeof fi.content == "string" ? CRC32.bstr(fi.content, 0) : CRC32.buf(/*::((*/fi.content/*::||[]):any)*/, 0);
|
||||
|
||||
var outbuf = fi.content/*::||[]*/;
|
||||
var outbuf = typeof fi.content == "string" ? s2a(fi.content) : fi.content/*::||[]*/;
|
||||
if(method == 8) outbuf = _deflateRawSync(outbuf);
|
||||
|
||||
/* local file header */
|
||||
|
|
|
@ -238,8 +238,7 @@ function dbf_to_workbook(buf, opts)/*:Workbook*/ {
|
|||
var o = sheet_to_workbook(dbf_to_sheet(buf, opts), opts);
|
||||
o.bookType = "dbf";
|
||||
return o;
|
||||
}
|
||||
catch(e) { if(opts && opts.WTF) throw e; }
|
||||
} catch(e) { if(opts && opts.WTF) throw e; }
|
||||
return ({SheetNames:[],Sheets:{}});
|
||||
}
|
||||
|
||||
|
|
|
@ -36,12 +36,12 @@ function safe_parse_sheet(zip, path/*:string*/, relsPath/*:string*/, sheet, idx/
|
|||
sheets[sheet] = _ws;
|
||||
|
||||
/* scan rels for comments and threaded comments */
|
||||
var tcomments = [];
|
||||
var comments = [], tcomments = [];
|
||||
if(sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function(n) {
|
||||
var dfile = "";
|
||||
if(sheetRels[sheet][n].Type == RELS.CMNT) {
|
||||
dfile = resolve_path(sheetRels[sheet][n].Target, path);
|
||||
var comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);
|
||||
comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);
|
||||
if(!comments || !comments.length) return;
|
||||
sheet_insert_comments(_ws, comments, false);
|
||||
}
|
||||
|
|
|
@ -101,7 +101,8 @@ function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
|
|||
/* TODO: something more intelligent with themes */
|
||||
|
||||
f = "xl/theme/theme1.xml";
|
||||
zip_add_file(zip, f, write_theme(wb.Themes, opts));
|
||||
var ww = write_theme(wb.Themes, opts);
|
||||
zip_add_file(zip, f, ww);
|
||||
ct.themes.push(f);
|
||||
add_rels(opts.wbrels, -1, "theme/theme1.xml", RELS.THEME);
|
||||
|
||||
|
|
|
@ -213,10 +213,10 @@ function sheet_add_json(_ws/*:?Worksheet*/, js/*:Array<any>*/, opts)/*:Worksheet
|
|||
if(_R == -1) { _R = 0; range.e.r = js.length - 1 + offset; }
|
||||
}
|
||||
var hdr/*:Array<string>*/ = o.header || [], C = 0;
|
||||
|
||||
var ROW = [];
|
||||
js.forEach(function (JS, R/*:number*/) {
|
||||
if(!ws[_R + R + offset]) ws[_R + R + offset] = [];
|
||||
var ROW = ws[_R + R + offset];
|
||||
if(dense && !ws[_R + R + offset]) ws[_R + R + offset] = [];
|
||||
if(dense) ROW = ws[_R + R + offset];
|
||||
keys(JS).forEach(function(k) {
|
||||
if((C=hdr.indexOf(k)) == -1) hdr[C=hdr.length] = k;
|
||||
var v = JS[k];
|
||||
|
@ -239,8 +239,7 @@ function sheet_add_json(_ws/*:?Worksheet*/, js/*:Array<any>*/, opts)/*:Worksheet
|
|||
if(!cell) {
|
||||
if(!dense) ws[ref] = cell = ({t:t, v:v}/*:any*/);
|
||||
else ROW[_C + C] = cell = ({t:t, v:v}/*:any*/);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
cell.t = t; cell.v = v;
|
||||
delete cell.w; delete cell.R;
|
||||
if(z) cell.z = z;
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -157,10 +157,10 @@ var DO_NOT_EXPORT_CODEPAGE = true;
|
|||
/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
|
||||
/* vim: set ts=2: */
|
||||
/*exported XLSX */
|
||||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */
|
||||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false, Set:false */
|
||||
var XLSX = {};
|
||||
function make_xlsx_lib(XLSX){
|
||||
XLSX.version = '0.18.11';
|
||||
XLSX.version = '0.18.12';
|
||||
var current_codepage = 1200, current_ansi = 1252;
|
||||
/*global cptable:true, window */
|
||||
var $cptable;
|
||||
|
@ -379,7 +379,7 @@ var bconcat = has_buf ? function(bufs) { return Buffer.concat(bufs.map(function(
|
|||
for(i = 0, maxlen = 0; i < bufs.length; maxlen += len, ++i) {
|
||||
len = bufs[i].length;
|
||||
if(bufs[i] instanceof Uint8Array) o.set(bufs[i], maxlen);
|
||||
else if(typeof bufs[i] == "string") { throw "wtf"; }
|
||||
else if(typeof bufs[i] == "string") o.set(new Uint8Array(s2a(bufs[i])), maxlen);
|
||||
else o.set(new Uint8Array(bufs[i]), maxlen);
|
||||
}
|
||||
return o;
|
||||
|
@ -2952,9 +2952,9 @@ function write_zip(cfb, options) {
|
|||
var namebuf = new_buf(fp.length);
|
||||
for(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);
|
||||
namebuf = namebuf.slice(0, namebuf.l);
|
||||
crcs[fcnt] = CRC32.buf(fi.content, 0);
|
||||
crcs[fcnt] = typeof fi.content == "string" ? CRC32.bstr(fi.content, 0) : CRC32.buf(fi.content, 0);
|
||||
|
||||
var outbuf = fi.content;
|
||||
var outbuf = typeof fi.content == "string" ? s2a(fi.content) : fi.content;
|
||||
if(method == 8) outbuf = _deflateRawSync(outbuf);
|
||||
|
||||
/* local file header */
|
||||
|
@ -4167,7 +4167,7 @@ for(i = 0; i != val.length; ++i) {
|
|||
}
|
||||
size = val.length;
|
||||
} else if(typeof $cptable !== 'undefined' && f == 'cpstr') {
|
||||
cpp = $cptable.utils.encode(current_ansi, val);
|
||||
cpp = $cptable.utils.encode(current_codepage, val);
|
||||
/* replace null bytes with _ when relevant */
|
||||
if(cpp.length == val.length) for(i = 0; i < val.length; ++i) if(cpp[i] == 0 && val.charCodeAt(i) != 0) cpp[i] = 0x5F;
|
||||
if(cpp.length == 2 * val.length) for(i = 0; i < val.length; ++i) if(cpp[2*i] == 0 && cpp[2*i+1] == 0 && val.charCodeAt(i) != 0) cpp[2*i] = 0x5F;
|
||||
|
@ -7712,7 +7712,6 @@ function parse_RString(blob, length, opts) {
|
|||
cell.val = str;
|
||||
return cell;
|
||||
}
|
||||
/* from js-harb (C) 2014-present SheetJS */
|
||||
var DBF_SUPPORTED_VERSIONS = [0x02, 0x03, 0x30, 0x31, 0x83, 0x8B, 0x8C, 0xF5];
|
||||
var DBF = (function() {
|
||||
var dbf_codepage_map = {
|
||||
|
@ -7952,14 +7951,14 @@ function dbf_to_workbook(buf, opts) {
|
|||
var o = sheet_to_workbook(dbf_to_sheet(buf, opts), opts);
|
||||
o.bookType = "dbf";
|
||||
return o;
|
||||
}
|
||||
catch(e) { if(opts && opts.WTF) throw e; }
|
||||
} catch(e) { if(opts && opts.WTF) throw e; }
|
||||
return ({SheetNames:[],Sheets:{}});
|
||||
}
|
||||
|
||||
var _RLEN = { 'B': 8, 'C': 250, 'L': 1, 'D': 8, '?': 0, '': 0 };
|
||||
function sheet_to_dbf(ws, opts) {
|
||||
var o = opts || {};
|
||||
var old_cp = current_codepage;
|
||||
if(+o.codepage >= 0) set_cp(+o.codepage);
|
||||
if(o.type == "string") throw new Error("Cannot write DBF to JS string");
|
||||
var ba = buf_array();
|
||||
|
@ -8022,11 +8021,17 @@ function sheet_to_dbf(ws, opts) {
|
|||
h.write_shift(2, 296 + 32 * hcnt);
|
||||
h.write_shift(2, rlen);
|
||||
for(i=0; i < 4; ++i) h.write_shift(4, 0);
|
||||
h.write_shift(4, 0x00000000 | ((+dbf_reverse_map[current_ansi] || 0x03)<<8));
|
||||
var cp = +dbf_reverse_map[current_codepage] || 0x03;
|
||||
h.write_shift(4, 0x00000000 | (cp<<8));
|
||||
if(dbf_codepage_map[cp] != +o.codepage) {
|
||||
console.error("DBF Unsupported codepage " + current_codepage + ", using 1252");
|
||||
current_codepage = 1252;
|
||||
}
|
||||
|
||||
for(i = 0, j = 0; i < headers.length; ++i) {
|
||||
if(headers[i] == null) continue;
|
||||
var hf = ba.next(32);
|
||||
/* TODO: test how applications handle non-ASCII field names */
|
||||
var _f = (headers[i].slice(-10) + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00").slice(0, 11);
|
||||
hf.write_shift(1, _f, "sbcs");
|
||||
hf.write_shift(1, coltypes[i] == '?' ? 'C' : coltypes[i], "sbcs");
|
||||
|
@ -8075,6 +8080,7 @@ function sheet_to_dbf(ws, opts) {
|
|||
}
|
||||
// data
|
||||
}
|
||||
current_codepage = old_cp;
|
||||
ba.next(1).write_shift(1, 0x1A);
|
||||
return ba.end();
|
||||
}
|
||||
|
@ -12027,7 +12033,7 @@ function parse_xlmeta_xml(data, name, opts) {
|
|||
lastmeta.offsets.push(+y.i);
|
||||
break;
|
||||
default:
|
||||
if (!pass && opts.WTF)
|
||||
if (!pass && (opts == null ? void 0 : opts.WTF))
|
||||
throw new Error("unrecognized " + y[0] + " in metadata");
|
||||
}
|
||||
return x;
|
||||
|
@ -23177,8 +23183,11 @@ function stru8(str) {
|
|||
return typeof TextEncoder != "undefined" ? new TextEncoder().encode(str) : s2a(utf8write(str));
|
||||
}
|
||||
function u8contains(body, search) {
|
||||
var L = body.indexOf(search[0]);
|
||||
if (L == -1)
|
||||
return false;
|
||||
outer:
|
||||
for (var L = 0; L <= body.length - search.length; ++L) {
|
||||
for (; L <= body.length - search.length; ++L) {
|
||||
for (var j = 0; j < search.length; ++j)
|
||||
if (body[L + j] != search[j])
|
||||
continue outer;
|
||||
|
@ -23287,6 +23296,18 @@ function write_varint49(v) {
|
|||
}
|
||||
return usz[subarray](0, L);
|
||||
}
|
||||
function parse_packed_varints(buf) {
|
||||
var ptr = [0];
|
||||
var out = [];
|
||||
while (ptr[0] < buf.length)
|
||||
out.push(parse_varint49(buf, ptr));
|
||||
return out;
|
||||
}
|
||||
function write_packed_varints(nums) {
|
||||
return u8concat(nums.map(function(x) {
|
||||
return write_varint49(x);
|
||||
}));
|
||||
}
|
||||
function varint_to_i32(buf) {
|
||||
var l = 0, i32 = buf[l] & 127;
|
||||
varint:
|
||||
|
@ -23571,11 +23592,11 @@ function numbers_format_cell(cell, t, flags, ofmt, nfmt) {
|
|||
dur:
|
||||
if (flags & (ver > 4 ? 8 : 4) && cell.t == "n" && ctype == 7) {
|
||||
var dstyle = ((_a = fmt[7]) == null ? void 0 : _a[0]) ? parse_varint49(fmt[7][0].data) : -1;
|
||||
if (dstyle == -1)
|
||||
break dur;
|
||||
var dmin = ((_b = fmt[15]) == null ? void 0 : _b[0]) ? parse_varint49(fmt[15][0].data) : -1;
|
||||
var dmax = ((_c = fmt[16]) == null ? void 0 : _c[0]) ? parse_varint49(fmt[16][0].data) : -1;
|
||||
var auto = ((_d = fmt[40]) == null ? void 0 : _d[0]) ? parse_varint49(fmt[40][0].data) : -1;
|
||||
if (dstyle == -1)
|
||||
break dur;
|
||||
var d = cell.v, dd = d;
|
||||
autodur:
|
||||
if (auto) {
|
||||
|
@ -23755,35 +23776,30 @@ function parse_old_storage(buf, lut, v) {
|
|||
}
|
||||
function parse_new_storage(buf, lut) {
|
||||
var dv = u8_to_dataview(buf);
|
||||
var flags = dv.getUint32(8, true);
|
||||
var flags = dv.getUint32(4, true);
|
||||
var fields = dv.getUint32(8, true);
|
||||
var doff = 12;
|
||||
var ridx = -1, sidx = -1, zidx = -1, d128 = NaN, ieee = NaN, dt = new Date(2001, 0, 1);
|
||||
if (flags & 1) {
|
||||
if (fields & 1) {
|
||||
d128 = readDecimal128LE(buf, doff);
|
||||
doff += 16;
|
||||
}
|
||||
if (flags & 2) {
|
||||
if (fields & 2) {
|
||||
ieee = dv.getFloat64(doff, true);
|
||||
doff += 8;
|
||||
}
|
||||
if (flags & 4) {
|
||||
if (fields & 4) {
|
||||
dt.setTime(dt.getTime() + dv.getFloat64(doff, true) * 1e3);
|
||||
doff += 8;
|
||||
}
|
||||
if (flags & 8) {
|
||||
if (fields & 8) {
|
||||
sidx = dv.getUint32(doff, true);
|
||||
doff += 4;
|
||||
}
|
||||
if (flags & 16) {
|
||||
if (fields & 16) {
|
||||
ridx = dv.getUint32(doff, true);
|
||||
doff += 4;
|
||||
}
|
||||
doff += popcnt(flags & 8160) * 4;
|
||||
if (flags & 516096) {
|
||||
if (zidx == -1)
|
||||
zidx = dv.getUint32(doff, true);
|
||||
doff += 4;
|
||||
}
|
||||
var ret;
|
||||
var t = buf[1];
|
||||
switch (t) {
|
||||
|
@ -23808,21 +23824,22 @@ function parse_new_storage(buf, lut) {
|
|||
ret = { t: "e", v: 0 };
|
||||
break;
|
||||
case 9:
|
||||
{
|
||||
if (ridx > -1)
|
||||
ret = { t: "s", v: lut.rsst[ridx] };
|
||||
else
|
||||
throw new Error("Unsupported cell type ".concat(buf[1], " : ").concat(flags & 31, " : ").concat(buf[subarray](0, 4)));
|
||||
}
|
||||
ret = { t: "s", v: lut.rsst[ridx] };
|
||||
break;
|
||||
case 10:
|
||||
ret = { t: "n", v: d128 };
|
||||
break;
|
||||
default:
|
||||
throw new Error("Unsupported cell type ".concat(buf[1], " : ").concat(flags & 31, " : ").concat(buf[subarray](0, 4)));
|
||||
throw new Error("Unsupported cell type ".concat(buf[1], " : ").concat(fields & 31, " : ").concat(buf[subarray](0, 4)));
|
||||
}
|
||||
doff += popcnt(fields & 8160) * 4;
|
||||
if (fields & 516096) {
|
||||
if (zidx == -1)
|
||||
zidx = dv.getUint32(doff, true);
|
||||
doff += 4;
|
||||
}
|
||||
if (zidx > -1)
|
||||
numbers_format_cell(ret, t | 5 << 8, flags >> 13, lut.ofmt[zidx], lut.nfmt[zidx]);
|
||||
numbers_format_cell(ret, t | 5 << 8, fields >> 13, lut.ofmt[zidx], lut.nfmt[zidx]);
|
||||
if (t == 7)
|
||||
ret.v /= 86400;
|
||||
return ret;
|
||||
|
@ -23859,7 +23876,7 @@ function write_new_storage(cell, sst) {
|
|||
}
|
||||
function write_old_storage(cell, sst) {
|
||||
var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, flags = 0;
|
||||
out[0] = 3;
|
||||
out[0] = 4;
|
||||
switch (cell.t) {
|
||||
case "n":
|
||||
out[2] = 2;
|
||||
|
@ -23884,7 +23901,7 @@ function write_old_storage(cell, sst) {
|
|||
default:
|
||||
throw "unsupported cell type " + cell.t;
|
||||
}
|
||||
dv.setUint32(4, flags, true);
|
||||
dv.setUint32(8, flags, true);
|
||||
return out[subarray](0, l);
|
||||
}
|
||||
function parse_cell_storage(buf, lut) {
|
||||
|
@ -24240,42 +24257,26 @@ function write_tile_row(tri, data, SST, wide) {
|
|||
}
|
||||
function write_iwam(type, payload) {
|
||||
return {
|
||||
meta: [[], [{ type: 0, data: write_varint49(type) }]],
|
||||
meta: [
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(type) }]
|
||||
],
|
||||
data: payload
|
||||
};
|
||||
}
|
||||
var USE_WIDE_ROWS = true;
|
||||
function write_numbers_iwa(wb, opts) {
|
||||
var _a;
|
||||
if (!opts || !opts.numbers)
|
||||
throw new Error("Must pass a `numbers` option -- check the README");
|
||||
var ws = wb.Sheets[wb.SheetNames[0]];
|
||||
if (wb.SheetNames.length > 1)
|
||||
console.error("The Numbers writer currently writes only the first table");
|
||||
var range = decode_range(ws["!ref"]);
|
||||
range.s.r = range.s.c = 0;
|
||||
var trunc = false;
|
||||
if (range.e.c > 999) {
|
||||
trunc = true;
|
||||
range.e.c = 999;
|
||||
}
|
||||
if (range.e.r > 254) {
|
||||
trunc = true;
|
||||
range.e.r = 254;
|
||||
}
|
||||
if (trunc)
|
||||
console.error("The Numbers writer is currently limited to ".concat(encode_range(range)));
|
||||
var data = sheet_to_json(ws, { range: range, header: 1 });
|
||||
var SST = ["~Sh33tJ5~"];
|
||||
data.forEach(function(row) {
|
||||
return row.forEach(function(cell) {
|
||||
if (typeof cell == "string")
|
||||
SST.push(cell);
|
||||
});
|
||||
});
|
||||
function get_unique_msgid(dep, dependents) {
|
||||
if (!dependents.last)
|
||||
dependents.last = 927262;
|
||||
for (var i = dependents.last; i < 2e6; ++i)
|
||||
if (!dependents[i]) {
|
||||
dependents[dependents.last = i] = dep;
|
||||
return i;
|
||||
}
|
||||
throw new Error("Too many messages");
|
||||
}
|
||||
function build_numbers_deps(cfb) {
|
||||
var dependents = {};
|
||||
var indices = [];
|
||||
var cfb = CFB.read(opts.numbers, { type: "base64" });
|
||||
cfb.FileIndex.map(function(fi, idx) {
|
||||
return [fi, cfb.FullPaths[idx]];
|
||||
}).forEach(function(row) {
|
||||
|
@ -24284,30 +24285,27 @@ function write_numbers_iwa(wb, opts) {
|
|||
return;
|
||||
if (!fi.name.match(/\.iwa/))
|
||||
return;
|
||||
var old_content = fi.content;
|
||||
var raw1 = decompress_iwa_file(old_content);
|
||||
var x2 = parse_iwa_file(raw1);
|
||||
x2.forEach(function(packet2) {
|
||||
indices.push(packet2.id);
|
||||
dependents[packet2.id] = { deps: [], location: fp, type: varint_to_i32(packet2.messages[0].meta[1][0].data) };
|
||||
if (fi.name.match(/OperationStorage/))
|
||||
return;
|
||||
parse_iwa_file(decompress_iwa_file(fi.content)).forEach(function(packet) {
|
||||
indices.push(packet.id);
|
||||
dependents[packet.id] = { deps: [], location: fp, type: varint_to_i32(packet.messages[0].meta[1][0].data) };
|
||||
});
|
||||
});
|
||||
indices.sort(function(x2, y) {
|
||||
return x2 - y;
|
||||
indices.sort(function(x, y) {
|
||||
return x - y;
|
||||
});
|
||||
var indices_varint = indices.filter(function(x2) {
|
||||
return x2 > 1;
|
||||
}).map(function(x2) {
|
||||
return [x2, write_varint49(x2)];
|
||||
var indices_varint = indices.filter(function(x) {
|
||||
return x > 1;
|
||||
}).map(function(x) {
|
||||
return [x, write_varint49(x)];
|
||||
});
|
||||
cfb.FileIndex.map(function(fi, idx) {
|
||||
return [fi, cfb.FullPaths[idx]];
|
||||
}).forEach(function(row) {
|
||||
var fi = row[0];
|
||||
cfb.FileIndex.forEach(function(fi) {
|
||||
if (!fi.name.match(/\.iwa/))
|
||||
return;
|
||||
var x2 = parse_iwa_file(decompress_iwa_file(fi.content));
|
||||
x2.forEach(function(ia) {
|
||||
if (fi.name.match(/OperationStorage/))
|
||||
return;
|
||||
parse_iwa_file(decompress_iwa_file(fi.content)).forEach(function(ia) {
|
||||
indices_varint.forEach(function(ivi) {
|
||||
if (ia.messages.some(function(mess) {
|
||||
return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);
|
||||
|
@ -24317,190 +24315,130 @@ function write_numbers_iwa(wb, opts) {
|
|||
});
|
||||
});
|
||||
});
|
||||
function get_unique_msgid(dep) {
|
||||
for (var i = 927262; i < 2e6; ++i)
|
||||
if (!dependents[i]) {
|
||||
dependents[i] = dep;
|
||||
return i;
|
||||
}
|
||||
throw new Error("Too many messages");
|
||||
}
|
||||
var entry = CFB.find(cfb, dependents[1].location);
|
||||
if (!entry)
|
||||
return dependents;
|
||||
}
|
||||
function write_numbers_iwa(wb, opts) {
|
||||
if (!opts || !opts.numbers)
|
||||
throw new Error("Must pass a `numbers` option -- check the README");
|
||||
var cfb = CFB.read(opts.numbers, { type: "base64" });
|
||||
var dependents = build_numbers_deps(cfb);
|
||||
var cfb_DA = CFB.find(cfb, dependents[1].location);
|
||||
if (!cfb_DA)
|
||||
throw "Could not find ".concat(dependents[1].location, " in Numbers template");
|
||||
var x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
var docroot;
|
||||
for (var xi = 0; xi < x.length; ++xi) {
|
||||
var packet = x[xi];
|
||||
if (packet.id == 1)
|
||||
docroot = packet;
|
||||
}
|
||||
var iwa_DA = parse_iwa_file(decompress_iwa_file(cfb_DA.content));
|
||||
var docroot = iwa_DA.find(function(packet) {
|
||||
return packet.id == 1;
|
||||
});
|
||||
if (docroot == null)
|
||||
throw "Could not find message ".concat(1, " in Numbers template");
|
||||
var sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[1][0].data);
|
||||
entry = CFB.find(cfb, dependents[sheetrootref].location);
|
||||
var sheetrefs = mappa(parse_shallow(docroot.messages[0].data)[1], parse_TSP_Reference);
|
||||
wb.SheetNames.forEach(function(name, idx) {
|
||||
return write_numbers_ws(cfb, dependents, wb.Sheets[name], name, idx, sheetrefs[idx]);
|
||||
});
|
||||
return cfb;
|
||||
}
|
||||
function numbers_iwa_doit(cfb, deps, id, cb) {
|
||||
var entry = CFB.find(cfb, deps[id].location);
|
||||
if (!entry)
|
||||
throw "Could not find ".concat(dependents[sheetrootref].location, " in Numbers template");
|
||||
x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
for (xi = 0; xi < x.length; ++xi) {
|
||||
packet = x[xi];
|
||||
if (packet.id == sheetrootref)
|
||||
docroot = packet;
|
||||
}
|
||||
var sheetref = parse_shallow(docroot.messages[0].data);
|
||||
{
|
||||
sheetref[1] = [{ type: 2, data: stru8(wb.SheetNames[0]) }];
|
||||
}
|
||||
docroot.messages[0].data = write_shallow(sheetref);
|
||||
throw "Could not find ".concat(deps[id].location, " in Numbers template");
|
||||
var x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
var ainfo = x.find(function(packet) {
|
||||
return packet.id == id;
|
||||
});
|
||||
cb(ainfo, x);
|
||||
entry.content = compress_iwa_file(write_iwa_file(x));
|
||||
entry.size = entry.content.length;
|
||||
sheetrootref = parse_TSP_Reference(sheetref[2][0].data);
|
||||
entry = CFB.find(cfb, dependents[sheetrootref].location);
|
||||
}
|
||||
function numbers_iwa_find(cfb, deps, id) {
|
||||
var entry = CFB.find(cfb, deps[id].location);
|
||||
if (!entry)
|
||||
throw "Could not find ".concat(dependents[sheetrootref].location, " in Numbers template");
|
||||
x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
for (xi = 0; xi < x.length; ++xi) {
|
||||
packet = x[xi];
|
||||
if (packet.id == sheetrootref)
|
||||
docroot = packet;
|
||||
throw "Could not find ".concat(deps[id].location, " in Numbers template");
|
||||
var x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
var ainfo = x.find(function(packet) {
|
||||
return packet.id == id;
|
||||
});
|
||||
return ainfo;
|
||||
}
|
||||
function write_numbers_ws(cfb, deps, ws, wsname, sheetidx, rootref) {
|
||||
if (sheetidx >= 1)
|
||||
return console.error("The Numbers writer currently writes only the first table");
|
||||
var drawables = [];
|
||||
numbers_iwa_doit(cfb, deps, rootref, function(docroot) {
|
||||
var sheetref = parse_shallow(docroot.messages[0].data);
|
||||
{
|
||||
sheetref[1] = [{ type: 2, data: stru8(wsname) }];
|
||||
drawables = mappa(sheetref[2], parse_TSP_Reference);
|
||||
}
|
||||
docroot.messages[0].data = write_shallow(sheetref);
|
||||
});
|
||||
var tia = numbers_iwa_find(cfb, deps, drawables[0]);
|
||||
var tmaref = parse_TSP_Reference(parse_shallow(tia.messages[0].data)[2][0].data);
|
||||
numbers_iwa_doit(cfb, deps, tmaref, function(docroot, x) {
|
||||
return write_numbers_tma(cfb, deps, ws, docroot, x, tmaref);
|
||||
});
|
||||
}
|
||||
var USE_WIDE_ROWS = true;
|
||||
function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
|
||||
var _a, _b;
|
||||
var range = decode_range(ws["!ref"]);
|
||||
range.s.r = range.s.c = 0;
|
||||
var trunc = false;
|
||||
if (range.e.c > 999) {
|
||||
trunc = true;
|
||||
range.e.c = 999;
|
||||
}
|
||||
sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[2][0].data);
|
||||
entry = CFB.find(cfb, dependents[sheetrootref].location);
|
||||
if (!entry)
|
||||
throw "Could not find ".concat(dependents[sheetrootref].location, " in Numbers template");
|
||||
x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
for (xi = 0; xi < x.length; ++xi) {
|
||||
packet = x[xi];
|
||||
if (packet.id == sheetrootref)
|
||||
docroot = packet;
|
||||
if (range.e.r > 999999) {
|
||||
trunc = true;
|
||||
range.e.r = 999999;
|
||||
}
|
||||
var pb = parse_shallow(docroot.messages[0].data);
|
||||
if (trunc)
|
||||
console.error("Truncating to ".concat(encode_range(range)));
|
||||
var data = sheet_to_json(ws, { range: range, header: 1 });
|
||||
var SST = ["~Sh33tJ5~"], SST_set = new Set(SST);
|
||||
data.forEach(function(row) {
|
||||
return row.forEach(function(cell) {
|
||||
if (typeof cell == "string" && !SST_set.has(cell)) {
|
||||
SST.push(cell);
|
||||
SST_set.add(cell);
|
||||
}
|
||||
});
|
||||
});
|
||||
var loc = deps[tmaref].location;
|
||||
loc = loc.replace(/^Root Entry\//, "");
|
||||
loc = loc.replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
var pb = parse_shallow(tmaroot.messages[0].data);
|
||||
{
|
||||
pb[6][0].data = write_varint49(range.e.r + 1);
|
||||
pb[7][0].data = write_varint49(range.e.c + 1);
|
||||
var cruidsref = parse_TSP_Reference(pb[46][0].data);
|
||||
var oldbucket = CFB.find(cfb, dependents[cruidsref].location);
|
||||
if (!oldbucket)
|
||||
throw "Could not find ".concat(dependents[cruidsref].location, " in Numbers template");
|
||||
var _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));
|
||||
{
|
||||
for (var j = 0; j < _x.length; ++j) {
|
||||
if (_x[j].id == cruidsref)
|
||||
break;
|
||||
}
|
||||
if (_x[j].id != cruidsref)
|
||||
throw "Bad ColumnRowUIDMapArchive";
|
||||
var cruids = parse_shallow(_x[j].messages[0].data);
|
||||
cruids[1] = [];
|
||||
cruids[2] = [], cruids[3] = [];
|
||||
for (var C = 0; C <= range.e.c; ++C) {
|
||||
cruids[1].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(C + 420690) }],
|
||||
[{ type: 0, data: write_varint49(C + 420690) }]
|
||||
]) });
|
||||
cruids[2].push({ type: 0, data: write_varint49(C) });
|
||||
cruids[3].push({ type: 0, data: write_varint49(C) });
|
||||
}
|
||||
cruids[4] = [];
|
||||
cruids[5] = [], cruids[6] = [];
|
||||
for (var R = 0; R <= range.e.r; ++R) {
|
||||
cruids[4].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(R + 726270) }],
|
||||
[{ type: 0, data: write_varint49(R + 726270) }]
|
||||
]) });
|
||||
cruids[5].push({ type: 0, data: write_varint49(R) });
|
||||
cruids[6].push({ type: 0, data: write_varint49(R) });
|
||||
}
|
||||
_x[j].messages[0].data = write_shallow(cruids);
|
||||
}
|
||||
oldbucket.content = compress_iwa_file(write_iwa_file(_x));
|
||||
oldbucket.size = oldbucket.content.length;
|
||||
delete pb[46];
|
||||
var store = parse_shallow(pb[4][0].data);
|
||||
{
|
||||
store[7][0].data = write_varint49(range.e.r + 1);
|
||||
var row_headers = parse_shallow(store[1][0].data);
|
||||
var row_header_ref = parse_TSP_Reference(row_headers[2][0].data);
|
||||
oldbucket = CFB.find(cfb, dependents[row_header_ref].location);
|
||||
if (!oldbucket)
|
||||
throw "Could not find ".concat(dependents[cruidsref].location, " in Numbers template");
|
||||
_x = parse_iwa_file(decompress_iwa_file(oldbucket.content));
|
||||
{
|
||||
if (_x[0].id != row_header_ref)
|
||||
throw "Bad HeaderStorageBucket";
|
||||
var base_bucket = parse_shallow(_x[0].messages[0].data);
|
||||
if ((_a = base_bucket == null ? void 0 : base_bucket[2]) == null ? void 0 : _a[0])
|
||||
for (R = 0; R < data.length; ++R) {
|
||||
var row_header_ref = parse_TSP_Reference(parse_shallow(store[1][0].data)[2][0].data);
|
||||
numbers_iwa_doit(cfb, deps, row_header_ref, function(rowhead, _x) {
|
||||
var _a2;
|
||||
var base_bucket = parse_shallow(rowhead.messages[0].data);
|
||||
if ((_a2 = base_bucket == null ? void 0 : base_bucket[2]) == null ? void 0 : _a2[0])
|
||||
for (var R2 = 0; R2 < data.length; ++R2) {
|
||||
var _bucket = parse_shallow(base_bucket[2][0].data);
|
||||
_bucket[1][0].data = write_varint49(R);
|
||||
_bucket[4][0].data = write_varint49(data[R].length);
|
||||
base_bucket[2][R] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };
|
||||
_bucket[1][0].data = write_varint49(R2);
|
||||
_bucket[4][0].data = write_varint49(data[R2].length);
|
||||
base_bucket[2][R2] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };
|
||||
}
|
||||
_x[0].messages[0].data = write_shallow(base_bucket);
|
||||
}
|
||||
oldbucket.content = compress_iwa_file(write_iwa_file(_x));
|
||||
oldbucket.size = oldbucket.content.length;
|
||||
rowhead.messages[0].data = write_shallow(base_bucket);
|
||||
});
|
||||
var col_header_ref = parse_TSP_Reference(store[2][0].data);
|
||||
oldbucket = CFB.find(cfb, dependents[col_header_ref].location);
|
||||
if (!oldbucket)
|
||||
throw "Could not find ".concat(dependents[cruidsref].location, " in Numbers template");
|
||||
_x = parse_iwa_file(decompress_iwa_file(oldbucket.content));
|
||||
{
|
||||
if (_x[0].id != col_header_ref)
|
||||
throw "Bad HeaderStorageBucket";
|
||||
base_bucket = parse_shallow(_x[0].messages[0].data);
|
||||
for (C = 0; C <= range.e.c; ++C) {
|
||||
_bucket = parse_shallow(base_bucket[2][0].data);
|
||||
numbers_iwa_doit(cfb, deps, col_header_ref, function(colhead, _x) {
|
||||
var base_bucket = parse_shallow(colhead.messages[0].data);
|
||||
for (var C = 0; C <= range.e.c; ++C) {
|
||||
var _bucket = parse_shallow(base_bucket[2][0].data);
|
||||
_bucket[1][0].data = write_varint49(C);
|
||||
_bucket[4][0].data = write_varint49(range.e.r + 1);
|
||||
base_bucket[2][C] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };
|
||||
}
|
||||
_x[0].messages[0].data = write_shallow(base_bucket);
|
||||
}
|
||||
oldbucket.content = compress_iwa_file(write_iwa_file(_x));
|
||||
oldbucket.size = oldbucket.content.length;
|
||||
if (ws["!merges"]) {
|
||||
var mergeid = get_unique_msgid({
|
||||
type: 6144,
|
||||
deps: [sheetrootref],
|
||||
location: dependents[sheetrootref].location
|
||||
});
|
||||
var mergedata = [[], []];
|
||||
ws["!merges"].forEach(function(m) {
|
||||
mergedata[1].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 5, data: new Uint8Array(new Uint16Array([m.s.r, m.s.c]).buffer) }]
|
||||
]) }],
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 5, data: new Uint8Array(new Uint16Array([m.e.r - m.s.r + 1, m.e.c - m.s.c + 1]).buffer) }]
|
||||
]) }]
|
||||
]) });
|
||||
});
|
||||
store[13] = [{ type: 2, data: write_TSP_Reference(mergeid) }];
|
||||
x.push({
|
||||
id: mergeid,
|
||||
messages: [write_iwam(6144, write_shallow(mergedata))]
|
||||
});
|
||||
}
|
||||
colhead.messages[0].data = write_shallow(base_bucket);
|
||||
});
|
||||
var sstref = parse_TSP_Reference(store[4][0].data);
|
||||
(function() {
|
||||
var sentry = CFB.find(cfb, dependents[sstref].location);
|
||||
if (!sentry)
|
||||
throw "Could not find ".concat(dependents[sstref].location, " in Numbers template");
|
||||
var sx = parse_iwa_file(decompress_iwa_file(sentry.content));
|
||||
var sstroot;
|
||||
for (var sxi = 0; sxi < sx.length; ++sxi) {
|
||||
var packet2 = sx[sxi];
|
||||
if (packet2.id == sstref)
|
||||
sstroot = packet2;
|
||||
}
|
||||
if (sstroot == null)
|
||||
throw "Could not find message ".concat(sstref, " in Numbers template");
|
||||
numbers_iwa_doit(cfb, deps, sstref, function(sstroot) {
|
||||
var sstdata = parse_shallow(sstroot.messages[0].data);
|
||||
{
|
||||
sstdata[3] = [];
|
||||
|
@ -24514,62 +24452,215 @@ function write_numbers_iwa(wb, opts) {
|
|||
});
|
||||
}
|
||||
sstroot.messages[0].data = write_shallow(sstdata);
|
||||
sentry.content = compress_iwa_file(write_iwa_file(sx));
|
||||
sentry.size = sentry.content.length;
|
||||
})();
|
||||
var tile = parse_shallow(store[3][0].data);
|
||||
});
|
||||
var rbtree = parse_shallow(store[9][0].data);
|
||||
rbtree[1] = [];
|
||||
var tilestore = parse_shallow(store[3][0].data);
|
||||
{
|
||||
var t = tile[1][0];
|
||||
tile[3] = [{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }];
|
||||
var tl = parse_shallow(t.data);
|
||||
var tstride = 256;
|
||||
tilestore[2] = [{ type: 0, data: write_varint49(tstride) }];
|
||||
var tileref = parse_TSP_Reference(parse_shallow(tilestore[1][0].data)[2][0].data);
|
||||
var save_token = 0;
|
||||
{
|
||||
var tileref = parse_TSP_Reference(tl[2][0].data);
|
||||
(function() {
|
||||
var tentry = CFB.find(cfb, dependents[tileref].location);
|
||||
if (!tentry)
|
||||
throw "Could not find ".concat(dependents[tileref].location, " in Numbers template");
|
||||
var tx = parse_iwa_file(decompress_iwa_file(tentry.content));
|
||||
var tileroot;
|
||||
for (var sxi = 0; sxi < tx.length; ++sxi) {
|
||||
var packet2 = tx[sxi];
|
||||
if (packet2.id == tileref)
|
||||
tileroot = packet2;
|
||||
}
|
||||
var tiledata = parse_shallow(tileroot.messages[0].data);
|
||||
{
|
||||
delete tiledata[6];
|
||||
delete tile[7];
|
||||
var rowload = new Uint8Array(tiledata[5][0].data);
|
||||
tiledata[5] = [];
|
||||
for (var R2 = 0; R2 <= range.e.r; ++R2) {
|
||||
var tilerow = parse_shallow(rowload);
|
||||
write_tile_row(tilerow, data[R2], SST, USE_WIDE_ROWS);
|
||||
tilerow[1][0].data = write_varint49(R2);
|
||||
tiledata[5].push({ data: write_shallow(tilerow), type: 2 });
|
||||
}
|
||||
tiledata[1] = [{ type: 0, data: write_varint49(0) }];
|
||||
tiledata[2] = [{ type: 0, data: write_varint49(0) }];
|
||||
tiledata[3] = [{ type: 0, data: write_varint49(0) }];
|
||||
tiledata[4] = [{ type: 0, data: write_varint49(range.e.r + 1) }];
|
||||
tiledata[6] = [{ type: 0, data: write_varint49(5) }];
|
||||
tiledata[7] = [{ type: 0, data: write_varint49(1) }];
|
||||
tiledata[8] = [{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }];
|
||||
}
|
||||
tileroot.messages[0].data = write_shallow(tiledata);
|
||||
tentry.content = compress_iwa_file(write_iwa_file(tx));
|
||||
tentry.size = tentry.content.length;
|
||||
})();
|
||||
CFB.utils.cfb_del(cfb, deps[tileref].location);
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
var lst = mlist[3].filter(function(m) {
|
||||
return parse_varint49(parse_shallow(m.data)[1][0].data) == tileref;
|
||||
});
|
||||
if (lst && lst.length > 0)
|
||||
save_token = parse_varint49(parse_shallow(lst[0].data)[12][0].data);
|
||||
mlist[3] = mlist[3].filter(function(m) {
|
||||
return parse_varint49(parse_shallow(m.data)[1][0].data) != tileref;
|
||||
});
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a2, _b2;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a2 = mm[3]) == null ? void 0 : _a2[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6] = parent[6].filter(function(m) {
|
||||
return parse_varint49(parse_shallow(m.data)[1][0].data) != tileref;
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
}
|
||||
tilestore[1] = [];
|
||||
var ntiles = Math.ceil((range.e.r + 1) / tstride);
|
||||
for (var tidx = 0; tidx < ntiles; ++tidx) {
|
||||
var newtileid = get_unique_msgid({
|
||||
deps: [],
|
||||
location: "",
|
||||
type: 6002
|
||||
}, deps);
|
||||
deps[newtileid].location = "Root Entry/Index/Tables/Tile-".concat(newtileid, ".iwa");
|
||||
var tiledata = [
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[{ type: 0, data: write_varint49(Math.min(range.e.r + 1, (tidx + 1) * tstride)) }],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[{ type: 0, data: write_varint49(Math.min((tidx + 1) * tstride, range.e.r + 1) - tidx * tstride) }],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(5) }],
|
||||
[{ type: 0, data: write_varint49(1) }],
|
||||
[{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }]
|
||||
];
|
||||
for (var R = tidx * tstride; R <= Math.min(range.e.r, (tidx + 1) * tstride - 1); ++R) {
|
||||
var tilerow = [
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[{ type: 2, data: new Uint8Array([]) }],
|
||||
[{ type: 2, data: new Uint8Array(Array.from({ length: 510 }, function() {
|
||||
return 255;
|
||||
})) }],
|
||||
[{ type: 0, data: write_varint49(5) }],
|
||||
[{ type: 2, data: new Uint8Array([]) }],
|
||||
[{ type: 2, data: new Uint8Array(Array.from({ length: 510 }, function() {
|
||||
return 255;
|
||||
})) }],
|
||||
[{ type: 0, data: write_varint49(1) }]
|
||||
];
|
||||
write_tile_row(tilerow, data[R], SST, USE_WIDE_ROWS);
|
||||
tilerow[1][0].data = write_varint49(R - tidx * tstride);
|
||||
tiledata[5].push({ data: write_shallow(tilerow), type: 2 });
|
||||
}
|
||||
tilestore[1].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(tidx) }],
|
||||
[{ type: 2, data: write_TSP_Reference(newtileid) }]
|
||||
]) });
|
||||
var newtile = {
|
||||
id: newtileid,
|
||||
messages: [write_iwam(6002, write_shallow(tiledata))]
|
||||
};
|
||||
var tilecontent = compress_iwa_file(write_iwa_file([newtile]));
|
||||
CFB.utils.cfb_add(cfb, "/Index/Tables/Tile-".concat(newtileid, ".iwa"), tilecontent);
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
mlist[3].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newtileid) }],
|
||||
[{ type: 2, data: stru8("Tables/Tile") }],
|
||||
[{ type: 2, data: stru8("Tables/Tile-".concat(newtileid)) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(save_token) }]
|
||||
]) });
|
||||
mlist[1] = [{ type: 0, data: write_varint49(Math.max(newtileid + 1, parse_varint49(mlist[1][0].data))) }];
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a2, _b2;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a2 = mm[3]) == null ? void 0 : _a2[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newtileid) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
var orefs = ((_a = tmaroot.messages[0].meta[5]) == null ? void 0 : _a[0]) ? parse_packed_varints(tmaroot.messages[0].meta[5][0].data) : [];
|
||||
var orefidx = orefs.indexOf(newtileid);
|
||||
if (orefidx == -1) {
|
||||
orefs[orefidx = orefs.length] = newtileid;
|
||||
tmaroot.messages[0].meta[5] = [{ type: 2, data: write_packed_varints(orefs) }];
|
||||
}
|
||||
rbtree[1].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(tidx * tstride) }],
|
||||
[{ type: 0, data: write_varint49(tidx) }]
|
||||
]) });
|
||||
}
|
||||
t.data = write_shallow(tl);
|
||||
}
|
||||
store[3][0].data = write_shallow(tile);
|
||||
store[3][0].data = write_shallow(tilestore);
|
||||
store[9][0].data = write_shallow(rbtree);
|
||||
store[10] = [{ type: 2, data: new Uint8Array([]) }];
|
||||
if (ws["!merges"]) {
|
||||
var mergeid = get_unique_msgid({
|
||||
type: 6144,
|
||||
deps: [tmaref],
|
||||
location: deps[tmaref].location
|
||||
}, deps);
|
||||
tmafile.push({
|
||||
id: mergeid,
|
||||
messages: [write_iwam(6144, write_shallow([
|
||||
[],
|
||||
ws["!merges"].map(function(m) {
|
||||
return { type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 5, data: new Uint8Array(new Uint16Array([m.s.r, m.s.c]).buffer) }]
|
||||
]) }],
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 5, data: new Uint8Array(new Uint16Array([m.e.r - m.s.r + 1, m.e.c - m.s.c + 1]).buffer) }]
|
||||
]) }]
|
||||
]) };
|
||||
})
|
||||
]))]
|
||||
});
|
||||
store[13] = [{ type: 2, data: write_TSP_Reference(mergeid) }];
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a2, _b2;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a2 = mm[3]) == null ? void 0 : _a2[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(mergeid) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
orefs = ((_b = tmaroot.messages[0].meta[5]) == null ? void 0 : _b[0]) ? parse_packed_varints(tmaroot.messages[0].meta[5][0].data) : [];
|
||||
orefidx = orefs.indexOf(mergeid);
|
||||
if (orefidx == -1) {
|
||||
orefs[orefidx = orefs.length] = mergeid;
|
||||
tmaroot.messages[0].meta[5] = [{ type: 2, data: write_packed_varints(orefs) }];
|
||||
}
|
||||
} else
|
||||
delete store[13];
|
||||
}
|
||||
pb[4][0].data = write_shallow(store);
|
||||
}
|
||||
docroot.messages[0].data = write_shallow(pb);
|
||||
entry.content = compress_iwa_file(write_iwa_file(x));
|
||||
entry.size = entry.content.length;
|
||||
return cfb;
|
||||
tmaroot.messages[0].data = write_shallow(pb);
|
||||
}
|
||||
function fix_opts_func(defaults) {
|
||||
return function fix_opts(opts) {
|
||||
|
@ -24655,12 +24746,12 @@ function safe_parse_sheet(zip, path, relsPath, sheet, idx, sheetRels, sheets, st
|
|||
sheets[sheet] = _ws;
|
||||
|
||||
/* scan rels for comments and threaded comments */
|
||||
var tcomments = [];
|
||||
var comments = [], tcomments = [];
|
||||
if(sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function(n) {
|
||||
var dfile = "";
|
||||
if(sheetRels[sheet][n].Type == RELS.CMNT) {
|
||||
dfile = resolve_path(sheetRels[sheet][n].Target, path);
|
||||
var comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);
|
||||
comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);
|
||||
if(!comments || !comments.length) return;
|
||||
sheet_insert_comments(_ws, comments, false);
|
||||
}
|
||||
|
@ -25019,7 +25110,8 @@ f = "docProps/app.xml";
|
|||
/* TODO: something more intelligent with themes */
|
||||
|
||||
f = "xl/theme/theme1.xml";
|
||||
zip_add_file(zip, f, write_theme(wb.Themes, opts));
|
||||
var ww = write_theme(wb.Themes, opts);
|
||||
zip_add_file(zip, f, ww);
|
||||
ct.themes.push(f);
|
||||
add_rels(opts.wbrels, -1, "theme/theme1.xml", RELS.THEME);
|
||||
|
||||
|
@ -25739,10 +25831,10 @@ function sheet_add_json(_ws, js, opts) {
|
|||
if(_R == -1) { _R = 0; range.e.r = js.length - 1 + offset; }
|
||||
}
|
||||
var hdr = o.header || [], C = 0;
|
||||
|
||||
var ROW = [];
|
||||
js.forEach(function (JS, R) {
|
||||
if(!ws[_R + R + offset]) ws[_R + R + offset] = [];
|
||||
var ROW = ws[_R + R + offset];
|
||||
if(dense && !ws[_R + R + offset]) ws[_R + R + offset] = [];
|
||||
if(dense) ROW = ws[_R + R + offset];
|
||||
keys(JS).forEach(function(k) {
|
||||
if((C=hdr.indexOf(k)) == -1) hdr[C=hdr.length] = k;
|
||||
var v = JS[k];
|
||||
|
@ -25765,8 +25857,7 @@ function sheet_add_json(_ws, js, opts) {
|
|||
if(!cell) {
|
||||
if(!dense) ws[ref] = cell = ({t:t, v:v});
|
||||
else ROW[_C + C] = cell = ({t:t, v:v});
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
cell.t = t; cell.v = v;
|
||||
delete cell.w; delete cell.R;
|
||||
if(z) cell.z = z;
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "xlsx",
|
||||
"version": "0.18.11",
|
||||
"version": "0.18.12",
|
||||
"author": "sheetjs",
|
||||
"description": "SheetJS Spreadsheet data parser and writer",
|
||||
"keywords": [
|
||||
|
|
6
test.js
6
test.js
|
@ -56,6 +56,8 @@ if(!browser) {
|
|||
for(var _fileAi = 0; _fileAi < _fileA.length; ++_fileAi) if(test_file(_fileA[_fileAi])) fileA.push(_fileA[_fileAi]);
|
||||
}
|
||||
|
||||
var can_write_numbers = typeof Set !== "undefined" && typeof Array.prototype.findIndex == "function" && typeof Uint8Array !== "undefined" && typeof Uint8Array.prototype.indexOf == "function";
|
||||
|
||||
/* Excel enforces 31 character sheet limit, although technical file limit is 255 */
|
||||
function fixsheetname(x/*:string*/)/*:string*/ { return x.substr(0,31); }
|
||||
|
||||
|
@ -1453,6 +1455,7 @@ describe('parse features', function() {
|
|||
"xlsx"/*, "xlsm" */, "xlsb"/* xls / xla / biff# */, "xlml", "ods", "fods"/*, "csv", "txt", */, "sylk", "html", "dif", "rtf"/*, "prn", "eth"*/, "dbf", "numbers"
|
||||
].forEach(function(r) {
|
||||
if(!XLSX_ZAHL) XLSX_ZAHL=require("./dist/xlsx.zahl");
|
||||
if(r == "numbers" && !can_write_numbers) return;
|
||||
var ws = X.utils.aoa_to_sheet([ ["a", "b", "c"], [1, 2, 3] ]);
|
||||
var wb = X.utils.book_new(); X.utils.book_append_sheet(wb, ws, "Sheet1");
|
||||
var data = X.write(wb, {type: TYPE, bookType: r, WTF: true, numbers:XLSX_ZAHL });
|
||||
|
@ -1627,6 +1630,7 @@ describe('roundtrip features', function() {
|
|||
|
||||
describe('should preserve merge cells', function() {
|
||||
["xlsx", "xlsb", "xlml", "ods", "biff8", "numbers"].forEach(function(f) { it(f, function() {
|
||||
if(f == "numbers" && !can_write_numbers) return;
|
||||
var wb1 = X.read(fs.readFileSync(paths.mcxlsx), {type:TYPE});
|
||||
var wb2 = X.read(X.write(wb1,{bookType:f,type:'binary',numbers:XLSX_ZAHL}),{type:'binary'});
|
||||
var m1 = wb1.Sheets["Merge"]['!merges'].map(X.utils.encode_range);
|
||||
|
@ -2363,7 +2367,7 @@ describe('numbers', function() {
|
|||
assert.equal(get_cell(ws, "B11").v, true);
|
||||
assert.equal(get_cell(ws, "B13").v, 50);
|
||||
});
|
||||
it('should cap cols at 1000 (ALL)', function() {
|
||||
if(can_write_numbers) it('should cap cols at 1000 (ALL)', function() {
|
||||
var aoa = [[1], [], []]; aoa[1][999] = 2; aoa[2][1000] = 3;
|
||||
var ws1 = X.utils.aoa_to_sheet(aoa);
|
||||
var wb1 = X.utils.book_new(); X.utils.book_append_sheet(wb1, ws1, "Sheet1");
|
||||
|
|
|
@ -58,6 +58,8 @@ if(!browser) {
|
|||
for(var _fileAi = 0; _fileAi < _fileA.length; ++_fileAi) if(test_file(_fileA[_fileAi])) fileA.push(_fileA[_fileAi]);
|
||||
}
|
||||
|
||||
var can_write_numbers = typeof Set !== "undefined" && typeof Array.prototype.findIndex == "function" && typeof Uint8Array !== "undefined" && typeof Uint8Array.prototype.indexOf == "function";
|
||||
|
||||
/* Excel enforces 31 character sheet limit, although technical file limit is 255 */
|
||||
function fixsheetname(x/*:string*/)/*:string*/ { return x.substr(0,31); }
|
||||
|
||||
|
@ -1443,6 +1445,7 @@ describe('parse features', function() {
|
|||
// TODO: keep in sync with BookType, support other formats
|
||||
"xlsx"/*, "xlsm" */, "xlsb"/* xls / xla / biff# */, "xlml", "ods", "fods"/*, "csv", "txt", */, "sylk", "html", "dif", "rtf"/*, "prn", "eth"*/, "dbf", "numbers"
|
||||
].forEach(function(r) {
|
||||
if(r == "numbers" && !can_write_numbers) return;
|
||||
var ws = X.utils.aoa_to_sheet([ ["a", "b", "c"], [1, 2, 3] ]);
|
||||
var wb = X.utils.book_new(); X.utils.book_append_sheet(wb, ws, "Sheet1");
|
||||
var data = X.write(wb, {type: TYPE, bookType: r, WTF: true, numbers:XLSX_ZAHL });
|
||||
|
@ -1613,6 +1616,7 @@ describe('roundtrip features', function() {
|
|||
|
||||
describe('should preserve merge cells', function() {
|
||||
["xlsx", "xlsb", "xlml", "ods", "biff8", "numbers"].forEach(function(f) { it(f, function() {
|
||||
if(f == "numbers" && !can_write_numbers) return;
|
||||
var wb1 = X.read(fs.readFileSync(paths.mcxlsx), {type:TYPE});
|
||||
var wb2 = X.read(X.write(wb1,{bookType:f,type:'binary',numbers:XLSX_ZAHL}),{type:'binary'});
|
||||
var m1 = wb1.Sheets["Merge"]['!merges'].map(X.utils.encode_range);
|
||||
|
@ -2349,7 +2353,7 @@ describe('numbers', function() {
|
|||
assert.equal(get_cell(ws, "B11").v, true);
|
||||
assert.equal(get_cell(ws, "B13").v, 50);
|
||||
});
|
||||
it('should cap cols at 1000 (ALL)', function() {
|
||||
if(can_write_numbers) it('should cap cols at 1000 (ALL)', function() {
|
||||
var aoa = [[1], [], []]; aoa[1][999] = 2; aoa[2][1000] = 3;
|
||||
var ws1 = X.utils.aoa_to_sheet(aoa);
|
||||
var wb1 = X.utils.book_new(); X.utils.book_append_sheet(wb1, ws1, "Sheet1");
|
||||
|
|
6
test.mts
6
test.mts
|
@ -78,6 +78,8 @@ if(!browser) {
|
|||
for(var _fileAi = 0; _fileAi < _fileA.length; ++_fileAi) if(test_file(_fileA[_fileAi])) fileA.push(_fileA[_fileAi]);
|
||||
}
|
||||
|
||||
var can_write_numbers = typeof Set !== "undefined" && typeof Array.prototype.findIndex == "function" && typeof Uint8Array !== "undefined" && typeof Uint8Array.prototype.indexOf == "function";
|
||||
|
||||
/* Excel enforces 31 character sheet limit, although technical file limit is 255 */
|
||||
function fixsheetname(x: string): string { return x.substr(0,31); }
|
||||
|
||||
|
@ -1408,6 +1410,7 @@ describe('parse features', function() {
|
|||
// TODO: keep in sync with BookType, support other formats
|
||||
"xlsx"/*, "xlsm" */, "xlsb"/* xls / xla / biff# */, "xlml", "ods", "fods"/*, "csv", "txt", */, "sylk", "html", "dif", "rtf"/*, "prn", "eth"*/, "dbf", "numbers"
|
||||
] as X.BookType[]).forEach(function(r: X.BookType) {
|
||||
if(r == "numbers" && !can_write_numbers) return;
|
||||
var ws = X.utils.aoa_to_sheet([ ["a", "b", "c"], [1, 2, 3] ]);
|
||||
var wb = X.utils.book_new(); X.utils.book_append_sheet(wb, ws, "Sheet1");
|
||||
var data = X.write(wb, {type: TYPE, bookType: r, WTF: true, numbers:XLSX_ZAHL });
|
||||
|
@ -1573,6 +1576,7 @@ describe('roundtrip features', function() {
|
|||
|
||||
describe('should preserve merge cells', function() {
|
||||
var mcf = ["xlsx", "xlsb", "xlml", "ods", "biff8", "numbers"] as Array<X.BookType>; for(let mci = 0; mci < mcf.length; ++mci) { let f = mcf[mci]; it(f, function() {
|
||||
if(f == "numbers" && !can_write_numbers) return;
|
||||
var wb1 = X.read(fs.readFileSync(paths.mcxlsx), {type:TYPE});
|
||||
var wb2 = X.read(X.write(wb1,{bookType:f,type:'binary',numbers:XLSX_ZAHL}),{type:'binary'});
|
||||
var m1 = wb1.Sheets["Merge"]?.['!merges']?.map(X.utils.encode_range);
|
||||
|
@ -2295,7 +2299,7 @@ describe('numbers', function() {
|
|||
assert.equal(get_cell(ws, "B11").v, true);
|
||||
assert.equal(get_cell(ws, "B13").v, 50);
|
||||
});
|
||||
it('should cap cols at 1000 (ALL)', function() {
|
||||
if(can_write_numbers) it('should cap cols at 1000 (ALL)', function() {
|
||||
var aoa = [[1], [], []]; aoa[1][999] = 2; aoa[2][1000] = 3;
|
||||
var ws1 = X.utils.aoa_to_sheet(aoa);
|
||||
var wb1 = X.utils.book_new(); X.utils.book_append_sheet(wb1, ws1, "Sheet1");
|
||||
|
|
6
test.ts
6
test.ts
|
@ -78,6 +78,8 @@ if(!browser) {
|
|||
for(var _fileAi = 0; _fileAi < _fileA.length; ++_fileAi) if(test_file(_fileA[_fileAi])) fileA.push(_fileA[_fileAi]);
|
||||
}
|
||||
|
||||
var can_write_numbers = typeof Set !== "undefined" && typeof Array.prototype.findIndex == "function" && typeof Uint8Array !== "undefined" && typeof Uint8Array.prototype.indexOf == "function";
|
||||
|
||||
/* Excel enforces 31 character sheet limit, although technical file limit is 255 */
|
||||
function fixsheetname(x: string): string { return x.substr(0,31); }
|
||||
|
||||
|
@ -1408,6 +1410,7 @@ Deno.test('parse features', async function(t) {
|
|||
// TODO: keep in sync with BookType, support other formats
|
||||
"xlsx"/*, "xlsm" */, "xlsb"/* xls / xla / biff# */, "xlml", "ods", "fods"/*, "csv", "txt", */, "sylk", "html", "dif", "rtf"/*, "prn", "eth"*/, "dbf", "numbers"
|
||||
] as X.BookType[]).forEach(function(r: X.BookType) {
|
||||
if(r == "numbers" && !can_write_numbers) return;
|
||||
var ws = X.utils.aoa_to_sheet([ ["a", "b", "c"], [1, 2, 3] ]);
|
||||
var wb = X.utils.book_new(); X.utils.book_append_sheet(wb, ws, "Sheet1");
|
||||
var data = X.write(wb, {type: TYPE, bookType: r, WTF: true, numbers:XLSX_ZAHL });
|
||||
|
@ -1573,6 +1576,7 @@ Deno.test('roundtrip features', async function(t) {
|
|||
|
||||
await t.step('should preserve merge cells', async function(t) {
|
||||
var mcf = ["xlsx", "xlsb", "xlml", "ods", "biff8", "numbers"] as Array<X.BookType>; for(let mci = 0; mci < mcf.length; ++mci) { let f = mcf[mci]; await t.step(f, async function(t) {
|
||||
if(f == "numbers" && !can_write_numbers) return;
|
||||
var wb1 = X.read(fs.readFileSync(paths.mcxlsx), {type:TYPE});
|
||||
var wb2 = X.read(X.write(wb1,{bookType:f,type:'binary',numbers:XLSX_ZAHL}),{type:'binary'});
|
||||
var m1 = wb1.Sheets["Merge"]?.['!merges']?.map(X.utils.encode_range);
|
||||
|
@ -2295,7 +2299,7 @@ Deno.test('numbers', async function(t) {
|
|||
assert.equal(get_cell(ws, "B11").v, true);
|
||||
assert.equal(get_cell(ws, "B13").v, 50);
|
||||
});
|
||||
await t.step('should cap cols at 1000 (ALL)', async function(t) {
|
||||
if(can_write_numbers) await t.step('should cap cols at 1000 (ALL)', async function(t) {
|
||||
var aoa = [[1], [], []]; aoa[1][999] = 2; aoa[2][1000] = 3;
|
||||
var ws1 = X.utils.aoa_to_sheet(aoa);
|
||||
var wb1 = X.utils.book_new(); X.utils.book_append_sheet(wb1, ws1, "Sheet1");
|
||||
|
|
|
@ -77,6 +77,8 @@ if(!browser) {
|
|||
for(var _fileAi = 0; _fileAi < _fileA.length; ++_fileAi) if(test_file(_fileA[_fileAi])) fileA.push(_fileA[_fileAi]);
|
||||
}
|
||||
|
||||
var can_write_numbers = typeof Set !== "undefined" && typeof Array.prototype.findIndex == "function" && typeof Uint8Array !== "undefined" && typeof Uint8Array.prototype.indexOf == "function";
|
||||
|
||||
/* Excel enforces 31 character sheet limit, although technical file limit is 255 */
|
||||
function fixsheetname(x: string): string { return x.substr(0,31); }
|
||||
|
||||
|
@ -1407,6 +1409,7 @@ Deno.test('parse features', async function(t) {
|
|||
// TODO: keep in sync with BookType, support other formats
|
||||
"xlsx"/*, "xlsm" */, "xlsb"/* xls / xla / biff# */, "xlml", "ods", "fods"/*, "csv", "txt", */, "sylk", "html", "dif", "rtf"/*, "prn", "eth"*/, "dbf", "numbers"
|
||||
] as X.BookType[]).forEach(function(r: X.BookType) {
|
||||
if(r == "numbers" && !can_write_numbers) return;
|
||||
var ws = X.utils.aoa_to_sheet([ ["a", "b", "c"], [1, 2, 3] ]);
|
||||
var wb = X.utils.book_new(); X.utils.book_append_sheet(wb, ws, "Sheet1");
|
||||
var data = X.write(wb, {type: TYPE, bookType: r, WTF: true, numbers:XLSX_ZAHL });
|
||||
|
@ -1572,6 +1575,7 @@ Deno.test('roundtrip features', async function(t) {
|
|||
|
||||
await t.step('should preserve merge cells', async function(t) {
|
||||
var mcf = ["xlsx", "xlsb", "xlml", "ods", "biff8", "numbers"] as Array<X.BookType>; for(let mci = 0; mci < mcf.length; ++mci) { let f = mcf[mci]; await t.step(f, async function(t) {
|
||||
if(f == "numbers" && !can_write_numbers) return;
|
||||
var wb1 = X.read(fs.readFileSync(paths.mcxlsx), {type:TYPE});
|
||||
var wb2 = X.read(X.write(wb1,{bookType:f,type:'binary',numbers:XLSX_ZAHL}),{type:'binary'});
|
||||
var m1 = wb1.Sheets["Merge"]?.['!merges']?.map(X.utils.encode_range);
|
||||
|
@ -2294,7 +2298,7 @@ Deno.test('numbers', async function(t) {
|
|||
assert.equal(get_cell(ws, "B11").v, true);
|
||||
assert.equal(get_cell(ws, "B13").v, 50);
|
||||
});
|
||||
await t.step('should cap cols at 1000 (ALL)', async function(t) {
|
||||
if(can_write_numbers) await t.step('should cap cols at 1000 (ALL)', async function(t) {
|
||||
var aoa = [[1], [], []]; aoa[1][999] = 2; aoa[2][1000] = 3;
|
||||
var ws1 = X.utils.aoa_to_sheet(aoa);
|
||||
var wb1 = X.utils.book_new(); X.utils.book_append_sheet(wb1, ws1, "Sheet1");
|
||||
|
|
|
@ -56,6 +56,8 @@ if(!browser) {
|
|||
for(var _fileAi = 0; _fileAi < _fileA.length; ++_fileAi) if(test_file(_fileA[_fileAi])) fileA.push(_fileA[_fileAi]);
|
||||
}
|
||||
|
||||
var can_write_numbers = typeof Set !== "undefined" && typeof Array.prototype.findIndex == "function" && typeof Uint8Array !== "undefined" && typeof Uint8Array.prototype.indexOf == "function";
|
||||
|
||||
/* Excel enforces 31 character sheet limit, although technical file limit is 255 */
|
||||
function fixsheetname(x/*:string*/)/*:string*/ { return x.substr(0,31); }
|
||||
|
||||
|
@ -1452,6 +1454,7 @@ describe('parse features', function() {
|
|||
// TODO: keep in sync with BookType, support other formats
|
||||
"xlsx"/*, "xlsm" */, "xlsb"/* xls / xla / biff# */, "xlml", "ods", "fods"/*, "csv", "txt", */, "sylk", "html", "dif", "rtf"/*, "prn", "eth"*/, "dbf", "numbers"
|
||||
].forEach(function(r) {
|
||||
if(r == "numbers" && !can_write_numbers) return;
|
||||
var ws = X.utils.aoa_to_sheet([ ["a", "b", "c"], [1, 2, 3] ]);
|
||||
var wb = X.utils.book_new(); X.utils.book_append_sheet(wb, ws, "Sheet1");
|
||||
var data = X.write(wb, {type: TYPE, bookType: r, WTF: true, numbers:XLSX_ZAHL });
|
||||
|
@ -1626,6 +1629,7 @@ describe('roundtrip features', function() {
|
|||
|
||||
describe('should preserve merge cells', function() {
|
||||
["xlsx", "xlsb", "xlml", "ods", "biff8", "numbers"].forEach(function(f) { it(f, function() {
|
||||
if(f == "numbers" && !can_write_numbers) return;
|
||||
var wb1 = X.read(fs.readFileSync(paths.mcxlsx), {type:TYPE});
|
||||
var wb2 = X.read(X.write(wb1,{bookType:f,type:'binary',numbers:XLSX_ZAHL}),{type:'binary'});
|
||||
var m1 = wb1.Sheets["Merge"]['!merges'].map(X.utils.encode_range);
|
||||
|
@ -2362,7 +2366,7 @@ describe('numbers', function() {
|
|||
assert.equal(get_cell(ws, "B11").v, true);
|
||||
assert.equal(get_cell(ws, "B13").v, 50);
|
||||
});
|
||||
it('should cap cols at 1000 (ALL)', function() {
|
||||
if(can_write_numbers) it('should cap cols at 1000 (ALL)', function() {
|
||||
var aoa = [[1], [], []]; aoa[1][999] = 2; aoa[2][1000] = 3;
|
||||
var ws1 = X.utils.aoa_to_sheet(aoa);
|
||||
var wb1 = X.utils.book_new(); X.utils.book_append_sheet(wb1, ws1, "Sheet1");
|
||||
|
|
684
xlsx.flow.js
684
xlsx.flow.js
|
@ -1,10 +1,10 @@
|
|||
/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
|
||||
/* vim: set ts=2: */
|
||||
/*exported XLSX */
|
||||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */
|
||||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false, Set:false */
|
||||
var XLSX = {};
|
||||
function make_xlsx_lib(XLSX){
|
||||
XLSX.version = '0.18.11';
|
||||
XLSX.version = '0.18.12';
|
||||
var current_codepage = 1200, current_ansi = 1252;
|
||||
/*:: declare var cptable:any; */
|
||||
/*global cptable:true, window */
|
||||
|
@ -225,7 +225,7 @@ var bconcat = has_buf ? function(bufs) { return Buffer.concat(bufs.map(function(
|
|||
for(i = 0, maxlen = 0; i < bufs.length; maxlen += len, ++i) {
|
||||
len = bufs[i].length;
|
||||
if(bufs[i] instanceof Uint8Array) o.set(bufs[i], maxlen);
|
||||
else if(typeof bufs[i] == "string") { throw "wtf"; }
|
||||
else if(typeof bufs[i] == "string") o.set(new Uint8Array(s2a(bufs[i])), maxlen);
|
||||
else o.set(new Uint8Array(bufs[i]), maxlen);
|
||||
}
|
||||
return o;
|
||||
|
@ -2863,9 +2863,9 @@ function write_zip(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes*/
|
|||
var namebuf = new_buf(fp.length);
|
||||
for(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);
|
||||
namebuf = namebuf.slice(0, namebuf.l);
|
||||
crcs[fcnt] = CRC32.buf(/*::((*/fi.content/*::||[]):any)*/, 0);
|
||||
crcs[fcnt] = typeof fi.content == "string" ? CRC32.bstr(fi.content, 0) : CRC32.buf(/*::((*/fi.content/*::||[]):any)*/, 0);
|
||||
|
||||
var outbuf = fi.content/*::||[]*/;
|
||||
var outbuf = typeof fi.content == "string" ? s2a(fi.content) : fi.content/*::||[]*/;
|
||||
if(method == 8) outbuf = _deflateRawSync(outbuf);
|
||||
|
||||
/* local file header */
|
||||
|
@ -7885,8 +7885,7 @@ function dbf_to_workbook(buf, opts)/*:Workbook*/ {
|
|||
var o = sheet_to_workbook(dbf_to_sheet(buf, opts), opts);
|
||||
o.bookType = "dbf";
|
||||
return o;
|
||||
}
|
||||
catch(e) { if(opts && opts.WTF) throw e; }
|
||||
} catch(e) { if(opts && opts.WTF) throw e; }
|
||||
return ({SheetNames:[],Sheets:{}});
|
||||
}
|
||||
|
||||
|
@ -11971,7 +11970,7 @@ function parse_xlmeta_xml(data, name, opts) {
|
|||
lastmeta.offsets.push(+y.i);
|
||||
break;
|
||||
default:
|
||||
if (!pass && opts.WTF)
|
||||
if (!pass && (opts == null ? void 0 : opts.WTF))
|
||||
throw new Error("unrecognized " + y[0] + " in metadata");
|
||||
}
|
||||
return x;
|
||||
|
@ -23138,8 +23137,11 @@ function stru8(str) {
|
|||
return typeof TextEncoder != "undefined" ? new TextEncoder().encode(str) : s2a(utf8write(str));
|
||||
}
|
||||
function u8contains(body, search) {
|
||||
var L = body.indexOf(search[0]);
|
||||
if (L == -1)
|
||||
return false;
|
||||
outer:
|
||||
for (var L = 0; L <= body.length - search.length; ++L) {
|
||||
for (; L <= body.length - search.length; ++L) {
|
||||
for (var j = 0; j < search.length; ++j)
|
||||
if (body[L + j] != search[j])
|
||||
continue outer;
|
||||
|
@ -23248,6 +23250,18 @@ function write_varint49(v) {
|
|||
}
|
||||
return usz[subarray](0, L);
|
||||
}
|
||||
function parse_packed_varints(buf) {
|
||||
var ptr = [0];
|
||||
var out = [];
|
||||
while (ptr[0] < buf.length)
|
||||
out.push(parse_varint49(buf, ptr));
|
||||
return out;
|
||||
}
|
||||
function write_packed_varints(nums) {
|
||||
return u8concat(nums.map(function(x) {
|
||||
return write_varint49(x);
|
||||
}));
|
||||
}
|
||||
function varint_to_i32(buf) {
|
||||
var l = 0, i32 = buf[l] & 127;
|
||||
varint:
|
||||
|
@ -23532,11 +23546,11 @@ function numbers_format_cell(cell, t, flags, ofmt, nfmt) {
|
|||
dur:
|
||||
if (flags & (ver > 4 ? 8 : 4) && cell.t == "n" && ctype == 7) {
|
||||
var dstyle = ((_a = fmt[7]) == null ? void 0 : _a[0]) ? parse_varint49(fmt[7][0].data) : -1;
|
||||
if (dstyle == -1)
|
||||
break dur;
|
||||
var dmin = ((_b = fmt[15]) == null ? void 0 : _b[0]) ? parse_varint49(fmt[15][0].data) : -1;
|
||||
var dmax = ((_c = fmt[16]) == null ? void 0 : _c[0]) ? parse_varint49(fmt[16][0].data) : -1;
|
||||
var auto = ((_d = fmt[40]) == null ? void 0 : _d[0]) ? parse_varint49(fmt[40][0].data) : -1;
|
||||
if (dstyle == -1)
|
||||
break dur;
|
||||
var d = cell.v, dd = d;
|
||||
autodur:
|
||||
if (auto) {
|
||||
|
@ -23716,35 +23730,30 @@ function parse_old_storage(buf, lut, v) {
|
|||
}
|
||||
function parse_new_storage(buf, lut) {
|
||||
var dv = u8_to_dataview(buf);
|
||||
var flags = dv.getUint32(8, true);
|
||||
var flags = dv.getUint32(4, true);
|
||||
var fields = dv.getUint32(8, true);
|
||||
var doff = 12;
|
||||
var ridx = -1, sidx = -1, zidx = -1, d128 = NaN, ieee = NaN, dt = new Date(2001, 0, 1);
|
||||
if (flags & 1) {
|
||||
if (fields & 1) {
|
||||
d128 = readDecimal128LE(buf, doff);
|
||||
doff += 16;
|
||||
}
|
||||
if (flags & 2) {
|
||||
if (fields & 2) {
|
||||
ieee = dv.getFloat64(doff, true);
|
||||
doff += 8;
|
||||
}
|
||||
if (flags & 4) {
|
||||
if (fields & 4) {
|
||||
dt.setTime(dt.getTime() + dv.getFloat64(doff, true) * 1e3);
|
||||
doff += 8;
|
||||
}
|
||||
if (flags & 8) {
|
||||
if (fields & 8) {
|
||||
sidx = dv.getUint32(doff, true);
|
||||
doff += 4;
|
||||
}
|
||||
if (flags & 16) {
|
||||
if (fields & 16) {
|
||||
ridx = dv.getUint32(doff, true);
|
||||
doff += 4;
|
||||
}
|
||||
doff += popcnt(flags & 8160) * 4;
|
||||
if (flags & 516096) {
|
||||
if (zidx == -1)
|
||||
zidx = dv.getUint32(doff, true);
|
||||
doff += 4;
|
||||
}
|
||||
var ret;
|
||||
var t = buf[1];
|
||||
switch (t) {
|
||||
|
@ -23769,21 +23778,22 @@ function parse_new_storage(buf, lut) {
|
|||
ret = { t: "e", v: 0 };
|
||||
break;
|
||||
case 9:
|
||||
{
|
||||
if (ridx > -1)
|
||||
ret = { t: "s", v: lut.rsst[ridx] };
|
||||
else
|
||||
throw new Error("Unsupported cell type ".concat(buf[1], " : ").concat(flags & 31, " : ").concat(buf[subarray](0, 4)));
|
||||
}
|
||||
ret = { t: "s", v: lut.rsst[ridx] };
|
||||
break;
|
||||
case 10:
|
||||
ret = { t: "n", v: d128 };
|
||||
break;
|
||||
default:
|
||||
throw new Error("Unsupported cell type ".concat(buf[1], " : ").concat(flags & 31, " : ").concat(buf[subarray](0, 4)));
|
||||
throw new Error("Unsupported cell type ".concat(buf[1], " : ").concat(fields & 31, " : ").concat(buf[subarray](0, 4)));
|
||||
}
|
||||
doff += popcnt(fields & 8160) * 4;
|
||||
if (fields & 516096) {
|
||||
if (zidx == -1)
|
||||
zidx = dv.getUint32(doff, true);
|
||||
doff += 4;
|
||||
}
|
||||
if (zidx > -1)
|
||||
numbers_format_cell(ret, t | 5 << 8, flags >> 13, lut.ofmt[zidx], lut.nfmt[zidx]);
|
||||
numbers_format_cell(ret, t | 5 << 8, fields >> 13, lut.ofmt[zidx], lut.nfmt[zidx]);
|
||||
if (t == 7)
|
||||
ret.v /= 86400;
|
||||
return ret;
|
||||
|
@ -23820,7 +23830,7 @@ function write_new_storage(cell, sst) {
|
|||
}
|
||||
function write_old_storage(cell, sst) {
|
||||
var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, flags = 0;
|
||||
out[0] = 3;
|
||||
out[0] = 4;
|
||||
switch (cell.t) {
|
||||
case "n":
|
||||
out[2] = 2;
|
||||
|
@ -23845,7 +23855,7 @@ function write_old_storage(cell, sst) {
|
|||
default:
|
||||
throw "unsupported cell type " + cell.t;
|
||||
}
|
||||
dv.setUint32(4, flags, true);
|
||||
dv.setUint32(8, flags, true);
|
||||
return out[subarray](0, l);
|
||||
}
|
||||
function parse_cell_storage(buf, lut) {
|
||||
|
@ -24201,42 +24211,26 @@ function write_tile_row(tri, data, SST, wide) {
|
|||
}
|
||||
function write_iwam(type, payload) {
|
||||
return {
|
||||
meta: [[], [{ type: 0, data: write_varint49(type) }]],
|
||||
meta: [
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(type) }]
|
||||
],
|
||||
data: payload
|
||||
};
|
||||
}
|
||||
var USE_WIDE_ROWS = true;
|
||||
function write_numbers_iwa(wb, opts) {
|
||||
var _a;
|
||||
if (!opts || !opts.numbers)
|
||||
throw new Error("Must pass a `numbers` option -- check the README");
|
||||
var ws = wb.Sheets[wb.SheetNames[0]];
|
||||
if (wb.SheetNames.length > 1)
|
||||
console.error("The Numbers writer currently writes only the first table");
|
||||
var range = decode_range(ws["!ref"]);
|
||||
range.s.r = range.s.c = 0;
|
||||
var trunc = false;
|
||||
if (range.e.c > 999) {
|
||||
trunc = true;
|
||||
range.e.c = 999;
|
||||
}
|
||||
if (range.e.r > 254) {
|
||||
trunc = true;
|
||||
range.e.r = 254;
|
||||
}
|
||||
if (trunc)
|
||||
console.error("The Numbers writer is currently limited to ".concat(encode_range(range)));
|
||||
var data = sheet_to_json(ws, { range: range, header: 1 });
|
||||
var SST = ["~Sh33tJ5~"];
|
||||
data.forEach(function(row) {
|
||||
return row.forEach(function(cell) {
|
||||
if (typeof cell == "string")
|
||||
SST.push(cell);
|
||||
});
|
||||
});
|
||||
function get_unique_msgid(dep, dependents) {
|
||||
if (!dependents.last)
|
||||
dependents.last = 927262;
|
||||
for (var i = dependents.last; i < 2e6; ++i)
|
||||
if (!dependents[i]) {
|
||||
dependents[dependents.last = i] = dep;
|
||||
return i;
|
||||
}
|
||||
throw new Error("Too many messages");
|
||||
}
|
||||
function build_numbers_deps(cfb) {
|
||||
var dependents = {};
|
||||
var indices = [];
|
||||
var cfb = CFB.read(opts.numbers, { type: "base64" });
|
||||
cfb.FileIndex.map(function(fi, idx) {
|
||||
return [fi, cfb.FullPaths[idx]];
|
||||
}).forEach(function(row) {
|
||||
|
@ -24245,30 +24239,27 @@ function write_numbers_iwa(wb, opts) {
|
|||
return;
|
||||
if (!fi.name.match(/\.iwa/))
|
||||
return;
|
||||
var old_content = fi.content;
|
||||
var raw1 = decompress_iwa_file(old_content);
|
||||
var x2 = parse_iwa_file(raw1);
|
||||
x2.forEach(function(packet2) {
|
||||
indices.push(packet2.id);
|
||||
dependents[packet2.id] = { deps: [], location: fp, type: varint_to_i32(packet2.messages[0].meta[1][0].data) };
|
||||
if (fi.name.match(/OperationStorage/))
|
||||
return;
|
||||
parse_iwa_file(decompress_iwa_file(fi.content)).forEach(function(packet) {
|
||||
indices.push(packet.id);
|
||||
dependents[packet.id] = { deps: [], location: fp, type: varint_to_i32(packet.messages[0].meta[1][0].data) };
|
||||
});
|
||||
});
|
||||
indices.sort(function(x2, y) {
|
||||
return x2 - y;
|
||||
indices.sort(function(x, y) {
|
||||
return x - y;
|
||||
});
|
||||
var indices_varint = indices.filter(function(x2) {
|
||||
return x2 > 1;
|
||||
}).map(function(x2) {
|
||||
return [x2, write_varint49(x2)];
|
||||
var indices_varint = indices.filter(function(x) {
|
||||
return x > 1;
|
||||
}).map(function(x) {
|
||||
return [x, write_varint49(x)];
|
||||
});
|
||||
cfb.FileIndex.map(function(fi, idx) {
|
||||
return [fi, cfb.FullPaths[idx]];
|
||||
}).forEach(function(row) {
|
||||
var fi = row[0];
|
||||
cfb.FileIndex.forEach(function(fi) {
|
||||
if (!fi.name.match(/\.iwa/))
|
||||
return;
|
||||
var x2 = parse_iwa_file(decompress_iwa_file(fi.content));
|
||||
x2.forEach(function(ia) {
|
||||
if (fi.name.match(/OperationStorage/))
|
||||
return;
|
||||
parse_iwa_file(decompress_iwa_file(fi.content)).forEach(function(ia) {
|
||||
indices_varint.forEach(function(ivi) {
|
||||
if (ia.messages.some(function(mess) {
|
||||
return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);
|
||||
|
@ -24278,190 +24269,130 @@ function write_numbers_iwa(wb, opts) {
|
|||
});
|
||||
});
|
||||
});
|
||||
function get_unique_msgid(dep) {
|
||||
for (var i = 927262; i < 2e6; ++i)
|
||||
if (!dependents[i]) {
|
||||
dependents[i] = dep;
|
||||
return i;
|
||||
}
|
||||
throw new Error("Too many messages");
|
||||
}
|
||||
var entry = CFB.find(cfb, dependents[1].location);
|
||||
if (!entry)
|
||||
return dependents;
|
||||
}
|
||||
function write_numbers_iwa(wb, opts) {
|
||||
if (!opts || !opts.numbers)
|
||||
throw new Error("Must pass a `numbers` option -- check the README");
|
||||
var cfb = CFB.read(opts.numbers, { type: "base64" });
|
||||
var dependents = build_numbers_deps(cfb);
|
||||
var cfb_DA = CFB.find(cfb, dependents[1].location);
|
||||
if (!cfb_DA)
|
||||
throw "Could not find ".concat(dependents[1].location, " in Numbers template");
|
||||
var x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
var docroot;
|
||||
for (var xi = 0; xi < x.length; ++xi) {
|
||||
var packet = x[xi];
|
||||
if (packet.id == 1)
|
||||
docroot = packet;
|
||||
}
|
||||
var iwa_DA = parse_iwa_file(decompress_iwa_file(cfb_DA.content));
|
||||
var docroot = iwa_DA.find(function(packet) {
|
||||
return packet.id == 1;
|
||||
});
|
||||
if (docroot == null)
|
||||
throw "Could not find message ".concat(1, " in Numbers template");
|
||||
var sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[1][0].data);
|
||||
entry = CFB.find(cfb, dependents[sheetrootref].location);
|
||||
var sheetrefs = mappa(parse_shallow(docroot.messages[0].data)[1], parse_TSP_Reference);
|
||||
wb.SheetNames.forEach(function(name, idx) {
|
||||
return write_numbers_ws(cfb, dependents, wb.Sheets[name], name, idx, sheetrefs[idx]);
|
||||
});
|
||||
return cfb;
|
||||
}
|
||||
function numbers_iwa_doit(cfb, deps, id, cb) {
|
||||
var entry = CFB.find(cfb, deps[id].location);
|
||||
if (!entry)
|
||||
throw "Could not find ".concat(dependents[sheetrootref].location, " in Numbers template");
|
||||
x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
for (xi = 0; xi < x.length; ++xi) {
|
||||
packet = x[xi];
|
||||
if (packet.id == sheetrootref)
|
||||
docroot = packet;
|
||||
}
|
||||
var sheetref = parse_shallow(docroot.messages[0].data);
|
||||
{
|
||||
sheetref[1] = [{ type: 2, data: stru8(wb.SheetNames[0]) }];
|
||||
}
|
||||
docroot.messages[0].data = write_shallow(sheetref);
|
||||
throw "Could not find ".concat(deps[id].location, " in Numbers template");
|
||||
var x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
var ainfo = x.find(function(packet) {
|
||||
return packet.id == id;
|
||||
});
|
||||
cb(ainfo, x);
|
||||
entry.content = compress_iwa_file(write_iwa_file(x));
|
||||
entry.size = entry.content.length;
|
||||
sheetrootref = parse_TSP_Reference(sheetref[2][0].data);
|
||||
entry = CFB.find(cfb, dependents[sheetrootref].location);
|
||||
}
|
||||
function numbers_iwa_find(cfb, deps, id) {
|
||||
var entry = CFB.find(cfb, deps[id].location);
|
||||
if (!entry)
|
||||
throw "Could not find ".concat(dependents[sheetrootref].location, " in Numbers template");
|
||||
x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
for (xi = 0; xi < x.length; ++xi) {
|
||||
packet = x[xi];
|
||||
if (packet.id == sheetrootref)
|
||||
docroot = packet;
|
||||
throw "Could not find ".concat(deps[id].location, " in Numbers template");
|
||||
var x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
var ainfo = x.find(function(packet) {
|
||||
return packet.id == id;
|
||||
});
|
||||
return ainfo;
|
||||
}
|
||||
function write_numbers_ws(cfb, deps, ws, wsname, sheetidx, rootref) {
|
||||
if (sheetidx >= 1)
|
||||
return console.error("The Numbers writer currently writes only the first table");
|
||||
var drawables = [];
|
||||
numbers_iwa_doit(cfb, deps, rootref, function(docroot) {
|
||||
var sheetref = parse_shallow(docroot.messages[0].data);
|
||||
{
|
||||
sheetref[1] = [{ type: 2, data: stru8(wsname) }];
|
||||
drawables = mappa(sheetref[2], parse_TSP_Reference);
|
||||
}
|
||||
docroot.messages[0].data = write_shallow(sheetref);
|
||||
});
|
||||
var tia = numbers_iwa_find(cfb, deps, drawables[0]);
|
||||
var tmaref = parse_TSP_Reference(parse_shallow(tia.messages[0].data)[2][0].data);
|
||||
numbers_iwa_doit(cfb, deps, tmaref, function(docroot, x) {
|
||||
return write_numbers_tma(cfb, deps, ws, docroot, x, tmaref);
|
||||
});
|
||||
}
|
||||
var USE_WIDE_ROWS = true;
|
||||
function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
|
||||
var _a, _b;
|
||||
var range = decode_range(ws["!ref"]);
|
||||
range.s.r = range.s.c = 0;
|
||||
var trunc = false;
|
||||
if (range.e.c > 999) {
|
||||
trunc = true;
|
||||
range.e.c = 999;
|
||||
}
|
||||
sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[2][0].data);
|
||||
entry = CFB.find(cfb, dependents[sheetrootref].location);
|
||||
if (!entry)
|
||||
throw "Could not find ".concat(dependents[sheetrootref].location, " in Numbers template");
|
||||
x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
for (xi = 0; xi < x.length; ++xi) {
|
||||
packet = x[xi];
|
||||
if (packet.id == sheetrootref)
|
||||
docroot = packet;
|
||||
if (range.e.r > 999999) {
|
||||
trunc = true;
|
||||
range.e.r = 999999;
|
||||
}
|
||||
var pb = parse_shallow(docroot.messages[0].data);
|
||||
if (trunc)
|
||||
console.error("Truncating to ".concat(encode_range(range)));
|
||||
var data = sheet_to_json(ws, { range: range, header: 1 });
|
||||
var SST = ["~Sh33tJ5~"], SST_set = new Set(SST);
|
||||
data.forEach(function(row) {
|
||||
return row.forEach(function(cell) {
|
||||
if (typeof cell == "string" && !SST_set.has(cell)) {
|
||||
SST.push(cell);
|
||||
SST_set.add(cell);
|
||||
}
|
||||
});
|
||||
});
|
||||
var loc = deps[tmaref].location;
|
||||
loc = loc.replace(/^Root Entry\//, "");
|
||||
loc = loc.replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
var pb = parse_shallow(tmaroot.messages[0].data);
|
||||
{
|
||||
pb[6][0].data = write_varint49(range.e.r + 1);
|
||||
pb[7][0].data = write_varint49(range.e.c + 1);
|
||||
var cruidsref = parse_TSP_Reference(pb[46][0].data);
|
||||
var oldbucket = CFB.find(cfb, dependents[cruidsref].location);
|
||||
if (!oldbucket)
|
||||
throw "Could not find ".concat(dependents[cruidsref].location, " in Numbers template");
|
||||
var _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));
|
||||
{
|
||||
for (var j = 0; j < _x.length; ++j) {
|
||||
if (_x[j].id == cruidsref)
|
||||
break;
|
||||
}
|
||||
if (_x[j].id != cruidsref)
|
||||
throw "Bad ColumnRowUIDMapArchive";
|
||||
var cruids = parse_shallow(_x[j].messages[0].data);
|
||||
cruids[1] = [];
|
||||
cruids[2] = [], cruids[3] = [];
|
||||
for (var C = 0; C <= range.e.c; ++C) {
|
||||
cruids[1].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(C + 420690) }],
|
||||
[{ type: 0, data: write_varint49(C + 420690) }]
|
||||
]) });
|
||||
cruids[2].push({ type: 0, data: write_varint49(C) });
|
||||
cruids[3].push({ type: 0, data: write_varint49(C) });
|
||||
}
|
||||
cruids[4] = [];
|
||||
cruids[5] = [], cruids[6] = [];
|
||||
for (var R = 0; R <= range.e.r; ++R) {
|
||||
cruids[4].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(R + 726270) }],
|
||||
[{ type: 0, data: write_varint49(R + 726270) }]
|
||||
]) });
|
||||
cruids[5].push({ type: 0, data: write_varint49(R) });
|
||||
cruids[6].push({ type: 0, data: write_varint49(R) });
|
||||
}
|
||||
_x[j].messages[0].data = write_shallow(cruids);
|
||||
}
|
||||
oldbucket.content = compress_iwa_file(write_iwa_file(_x));
|
||||
oldbucket.size = oldbucket.content.length;
|
||||
delete pb[46];
|
||||
var store = parse_shallow(pb[4][0].data);
|
||||
{
|
||||
store[7][0].data = write_varint49(range.e.r + 1);
|
||||
var row_headers = parse_shallow(store[1][0].data);
|
||||
var row_header_ref = parse_TSP_Reference(row_headers[2][0].data);
|
||||
oldbucket = CFB.find(cfb, dependents[row_header_ref].location);
|
||||
if (!oldbucket)
|
||||
throw "Could not find ".concat(dependents[cruidsref].location, " in Numbers template");
|
||||
_x = parse_iwa_file(decompress_iwa_file(oldbucket.content));
|
||||
{
|
||||
if (_x[0].id != row_header_ref)
|
||||
throw "Bad HeaderStorageBucket";
|
||||
var base_bucket = parse_shallow(_x[0].messages[0].data);
|
||||
if ((_a = base_bucket == null ? void 0 : base_bucket[2]) == null ? void 0 : _a[0])
|
||||
for (R = 0; R < data.length; ++R) {
|
||||
var row_header_ref = parse_TSP_Reference(parse_shallow(store[1][0].data)[2][0].data);
|
||||
numbers_iwa_doit(cfb, deps, row_header_ref, function(rowhead, _x) {
|
||||
var _a2;
|
||||
var base_bucket = parse_shallow(rowhead.messages[0].data);
|
||||
if ((_a2 = base_bucket == null ? void 0 : base_bucket[2]) == null ? void 0 : _a2[0])
|
||||
for (var R2 = 0; R2 < data.length; ++R2) {
|
||||
var _bucket = parse_shallow(base_bucket[2][0].data);
|
||||
_bucket[1][0].data = write_varint49(R);
|
||||
_bucket[4][0].data = write_varint49(data[R].length);
|
||||
base_bucket[2][R] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };
|
||||
_bucket[1][0].data = write_varint49(R2);
|
||||
_bucket[4][0].data = write_varint49(data[R2].length);
|
||||
base_bucket[2][R2] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };
|
||||
}
|
||||
_x[0].messages[0].data = write_shallow(base_bucket);
|
||||
}
|
||||
oldbucket.content = compress_iwa_file(write_iwa_file(_x));
|
||||
oldbucket.size = oldbucket.content.length;
|
||||
rowhead.messages[0].data = write_shallow(base_bucket);
|
||||
});
|
||||
var col_header_ref = parse_TSP_Reference(store[2][0].data);
|
||||
oldbucket = CFB.find(cfb, dependents[col_header_ref].location);
|
||||
if (!oldbucket)
|
||||
throw "Could not find ".concat(dependents[cruidsref].location, " in Numbers template");
|
||||
_x = parse_iwa_file(decompress_iwa_file(oldbucket.content));
|
||||
{
|
||||
if (_x[0].id != col_header_ref)
|
||||
throw "Bad HeaderStorageBucket";
|
||||
base_bucket = parse_shallow(_x[0].messages[0].data);
|
||||
for (C = 0; C <= range.e.c; ++C) {
|
||||
_bucket = parse_shallow(base_bucket[2][0].data);
|
||||
numbers_iwa_doit(cfb, deps, col_header_ref, function(colhead, _x) {
|
||||
var base_bucket = parse_shallow(colhead.messages[0].data);
|
||||
for (var C = 0; C <= range.e.c; ++C) {
|
||||
var _bucket = parse_shallow(base_bucket[2][0].data);
|
||||
_bucket[1][0].data = write_varint49(C);
|
||||
_bucket[4][0].data = write_varint49(range.e.r + 1);
|
||||
base_bucket[2][C] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };
|
||||
}
|
||||
_x[0].messages[0].data = write_shallow(base_bucket);
|
||||
}
|
||||
oldbucket.content = compress_iwa_file(write_iwa_file(_x));
|
||||
oldbucket.size = oldbucket.content.length;
|
||||
if (ws["!merges"]) {
|
||||
var mergeid = get_unique_msgid({
|
||||
type: 6144,
|
||||
deps: [sheetrootref],
|
||||
location: dependents[sheetrootref].location
|
||||
});
|
||||
var mergedata = [[], []];
|
||||
ws["!merges"].forEach(function(m) {
|
||||
mergedata[1].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 5, data: new Uint8Array(new Uint16Array([m.s.r, m.s.c]).buffer) }]
|
||||
]) }],
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 5, data: new Uint8Array(new Uint16Array([m.e.r - m.s.r + 1, m.e.c - m.s.c + 1]).buffer) }]
|
||||
]) }]
|
||||
]) });
|
||||
});
|
||||
store[13] = [{ type: 2, data: write_TSP_Reference(mergeid) }];
|
||||
x.push({
|
||||
id: mergeid,
|
||||
messages: [write_iwam(6144, write_shallow(mergedata))]
|
||||
});
|
||||
}
|
||||
colhead.messages[0].data = write_shallow(base_bucket);
|
||||
});
|
||||
var sstref = parse_TSP_Reference(store[4][0].data);
|
||||
(function() {
|
||||
var sentry = CFB.find(cfb, dependents[sstref].location);
|
||||
if (!sentry)
|
||||
throw "Could not find ".concat(dependents[sstref].location, " in Numbers template");
|
||||
var sx = parse_iwa_file(decompress_iwa_file(sentry.content));
|
||||
var sstroot;
|
||||
for (var sxi = 0; sxi < sx.length; ++sxi) {
|
||||
var packet2 = sx[sxi];
|
||||
if (packet2.id == sstref)
|
||||
sstroot = packet2;
|
||||
}
|
||||
if (sstroot == null)
|
||||
throw "Could not find message ".concat(sstref, " in Numbers template");
|
||||
numbers_iwa_doit(cfb, deps, sstref, function(sstroot) {
|
||||
var sstdata = parse_shallow(sstroot.messages[0].data);
|
||||
{
|
||||
sstdata[3] = [];
|
||||
|
@ -24475,62 +24406,215 @@ function write_numbers_iwa(wb, opts) {
|
|||
});
|
||||
}
|
||||
sstroot.messages[0].data = write_shallow(sstdata);
|
||||
sentry.content = compress_iwa_file(write_iwa_file(sx));
|
||||
sentry.size = sentry.content.length;
|
||||
})();
|
||||
var tile = parse_shallow(store[3][0].data);
|
||||
});
|
||||
var rbtree = parse_shallow(store[9][0].data);
|
||||
rbtree[1] = [];
|
||||
var tilestore = parse_shallow(store[3][0].data);
|
||||
{
|
||||
var t = tile[1][0];
|
||||
tile[3] = [{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }];
|
||||
var tl = parse_shallow(t.data);
|
||||
var tstride = 256;
|
||||
tilestore[2] = [{ type: 0, data: write_varint49(tstride) }];
|
||||
var tileref = parse_TSP_Reference(parse_shallow(tilestore[1][0].data)[2][0].data);
|
||||
var save_token = 0;
|
||||
{
|
||||
var tileref = parse_TSP_Reference(tl[2][0].data);
|
||||
(function() {
|
||||
var tentry = CFB.find(cfb, dependents[tileref].location);
|
||||
if (!tentry)
|
||||
throw "Could not find ".concat(dependents[tileref].location, " in Numbers template");
|
||||
var tx = parse_iwa_file(decompress_iwa_file(tentry.content));
|
||||
var tileroot;
|
||||
for (var sxi = 0; sxi < tx.length; ++sxi) {
|
||||
var packet2 = tx[sxi];
|
||||
if (packet2.id == tileref)
|
||||
tileroot = packet2;
|
||||
}
|
||||
var tiledata = parse_shallow(tileroot.messages[0].data);
|
||||
{
|
||||
delete tiledata[6];
|
||||
delete tile[7];
|
||||
var rowload = new Uint8Array(tiledata[5][0].data);
|
||||
tiledata[5] = [];
|
||||
for (var R2 = 0; R2 <= range.e.r; ++R2) {
|
||||
var tilerow = parse_shallow(rowload);
|
||||
write_tile_row(tilerow, data[R2], SST, USE_WIDE_ROWS);
|
||||
tilerow[1][0].data = write_varint49(R2);
|
||||
tiledata[5].push({ data: write_shallow(tilerow), type: 2 });
|
||||
}
|
||||
tiledata[1] = [{ type: 0, data: write_varint49(0) }];
|
||||
tiledata[2] = [{ type: 0, data: write_varint49(0) }];
|
||||
tiledata[3] = [{ type: 0, data: write_varint49(0) }];
|
||||
tiledata[4] = [{ type: 0, data: write_varint49(range.e.r + 1) }];
|
||||
tiledata[6] = [{ type: 0, data: write_varint49(5) }];
|
||||
tiledata[7] = [{ type: 0, data: write_varint49(1) }];
|
||||
tiledata[8] = [{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }];
|
||||
}
|
||||
tileroot.messages[0].data = write_shallow(tiledata);
|
||||
tentry.content = compress_iwa_file(write_iwa_file(tx));
|
||||
tentry.size = tentry.content.length;
|
||||
})();
|
||||
CFB.utils.cfb_del(cfb, deps[tileref].location);
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
var lst = mlist[3].filter(function(m) {
|
||||
return parse_varint49(parse_shallow(m.data)[1][0].data) == tileref;
|
||||
});
|
||||
if (lst && lst.length > 0)
|
||||
save_token = parse_varint49(parse_shallow(lst[0].data)[12][0].data);
|
||||
mlist[3] = mlist[3].filter(function(m) {
|
||||
return parse_varint49(parse_shallow(m.data)[1][0].data) != tileref;
|
||||
});
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a2, _b2;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a2 = mm[3]) == null ? void 0 : _a2[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6] = parent[6].filter(function(m) {
|
||||
return parse_varint49(parse_shallow(m.data)[1][0].data) != tileref;
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
}
|
||||
tilestore[1] = [];
|
||||
var ntiles = Math.ceil((range.e.r + 1) / tstride);
|
||||
for (var tidx = 0; tidx < ntiles; ++tidx) {
|
||||
var newtileid = get_unique_msgid({
|
||||
deps: [],
|
||||
location: "",
|
||||
type: 6002
|
||||
}, deps);
|
||||
deps[newtileid].location = "Root Entry/Index/Tables/Tile-".concat(newtileid, ".iwa");
|
||||
var tiledata = [
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[{ type: 0, data: write_varint49(Math.min(range.e.r + 1, (tidx + 1) * tstride)) }],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[{ type: 0, data: write_varint49(Math.min((tidx + 1) * tstride, range.e.r + 1) - tidx * tstride) }],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(5) }],
|
||||
[{ type: 0, data: write_varint49(1) }],
|
||||
[{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }]
|
||||
];
|
||||
for (var R = tidx * tstride; R <= Math.min(range.e.r, (tidx + 1) * tstride - 1); ++R) {
|
||||
var tilerow = [
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[{ type: 2, data: new Uint8Array([]) }],
|
||||
[{ type: 2, data: new Uint8Array(Array.from({ length: 510 }, function() {
|
||||
return 255;
|
||||
})) }],
|
||||
[{ type: 0, data: write_varint49(5) }],
|
||||
[{ type: 2, data: new Uint8Array([]) }],
|
||||
[{ type: 2, data: new Uint8Array(Array.from({ length: 510 }, function() {
|
||||
return 255;
|
||||
})) }],
|
||||
[{ type: 0, data: write_varint49(1) }]
|
||||
];
|
||||
write_tile_row(tilerow, data[R], SST, USE_WIDE_ROWS);
|
||||
tilerow[1][0].data = write_varint49(R - tidx * tstride);
|
||||
tiledata[5].push({ data: write_shallow(tilerow), type: 2 });
|
||||
}
|
||||
tilestore[1].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(tidx) }],
|
||||
[{ type: 2, data: write_TSP_Reference(newtileid) }]
|
||||
]) });
|
||||
var newtile = {
|
||||
id: newtileid,
|
||||
messages: [write_iwam(6002, write_shallow(tiledata))]
|
||||
};
|
||||
var tilecontent = compress_iwa_file(write_iwa_file([newtile]));
|
||||
CFB.utils.cfb_add(cfb, "/Index/Tables/Tile-".concat(newtileid, ".iwa"), tilecontent);
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
mlist[3].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newtileid) }],
|
||||
[{ type: 2, data: stru8("Tables/Tile") }],
|
||||
[{ type: 2, data: stru8("Tables/Tile-".concat(newtileid)) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(save_token) }]
|
||||
]) });
|
||||
mlist[1] = [{ type: 0, data: write_varint49(Math.max(newtileid + 1, parse_varint49(mlist[1][0].data))) }];
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a2, _b2;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a2 = mm[3]) == null ? void 0 : _a2[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newtileid) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
var orefs = ((_a = tmaroot.messages[0].meta[5]) == null ? void 0 : _a[0]) ? parse_packed_varints(tmaroot.messages[0].meta[5][0].data) : [];
|
||||
var orefidx = orefs.indexOf(newtileid);
|
||||
if (orefidx == -1) {
|
||||
orefs[orefidx = orefs.length] = newtileid;
|
||||
tmaroot.messages[0].meta[5] = [{ type: 2, data: write_packed_varints(orefs) }];
|
||||
}
|
||||
rbtree[1].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(tidx * tstride) }],
|
||||
[{ type: 0, data: write_varint49(tidx) }]
|
||||
]) });
|
||||
}
|
||||
t.data = write_shallow(tl);
|
||||
}
|
||||
store[3][0].data = write_shallow(tile);
|
||||
store[3][0].data = write_shallow(tilestore);
|
||||
store[9][0].data = write_shallow(rbtree);
|
||||
store[10] = [{ type: 2, data: new Uint8Array([]) }];
|
||||
if (ws["!merges"]) {
|
||||
var mergeid = get_unique_msgid({
|
||||
type: 6144,
|
||||
deps: [tmaref],
|
||||
location: deps[tmaref].location
|
||||
}, deps);
|
||||
tmafile.push({
|
||||
id: mergeid,
|
||||
messages: [write_iwam(6144, write_shallow([
|
||||
[],
|
||||
ws["!merges"].map(function(m) {
|
||||
return { type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 5, data: new Uint8Array(new Uint16Array([m.s.r, m.s.c]).buffer) }]
|
||||
]) }],
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 5, data: new Uint8Array(new Uint16Array([m.e.r - m.s.r + 1, m.e.c - m.s.c + 1]).buffer) }]
|
||||
]) }]
|
||||
]) };
|
||||
})
|
||||
]))]
|
||||
});
|
||||
store[13] = [{ type: 2, data: write_TSP_Reference(mergeid) }];
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a2, _b2;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a2 = mm[3]) == null ? void 0 : _a2[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(mergeid) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
orefs = ((_b = tmaroot.messages[0].meta[5]) == null ? void 0 : _b[0]) ? parse_packed_varints(tmaroot.messages[0].meta[5][0].data) : [];
|
||||
orefidx = orefs.indexOf(mergeid);
|
||||
if (orefidx == -1) {
|
||||
orefs[orefidx = orefs.length] = mergeid;
|
||||
tmaroot.messages[0].meta[5] = [{ type: 2, data: write_packed_varints(orefs) }];
|
||||
}
|
||||
} else
|
||||
delete store[13];
|
||||
}
|
||||
pb[4][0].data = write_shallow(store);
|
||||
}
|
||||
docroot.messages[0].data = write_shallow(pb);
|
||||
entry.content = compress_iwa_file(write_iwa_file(x));
|
||||
entry.size = entry.content.length;
|
||||
return cfb;
|
||||
tmaroot.messages[0].data = write_shallow(pb);
|
||||
}
|
||||
function fix_opts_func(defaults/*:Array<Array<any> >*/)/*:{(o:any):void}*/ {
|
||||
return function fix_opts(opts) {
|
||||
|
@ -24616,12 +24700,12 @@ function safe_parse_sheet(zip, path/*:string*/, relsPath/*:string*/, sheet, idx/
|
|||
sheets[sheet] = _ws;
|
||||
|
||||
/* scan rels for comments and threaded comments */
|
||||
var tcomments = [];
|
||||
var comments = [], tcomments = [];
|
||||
if(sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function(n) {
|
||||
var dfile = "";
|
||||
if(sheetRels[sheet][n].Type == RELS.CMNT) {
|
||||
dfile = resolve_path(sheetRels[sheet][n].Target, path);
|
||||
var comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);
|
||||
comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);
|
||||
if(!comments || !comments.length) return;
|
||||
sheet_insert_comments(_ws, comments, false);
|
||||
}
|
||||
|
@ -24983,7 +25067,8 @@ function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
|
|||
/* TODO: something more intelligent with themes */
|
||||
|
||||
f = "xl/theme/theme1.xml";
|
||||
zip_add_file(zip, f, write_theme(wb.Themes, opts));
|
||||
var ww = write_theme(wb.Themes, opts);
|
||||
zip_add_file(zip, f, ww);
|
||||
ct.themes.push(f);
|
||||
add_rels(opts.wbrels, -1, "theme/theme1.xml", RELS.THEME);
|
||||
|
||||
|
@ -25711,10 +25796,10 @@ function sheet_add_json(_ws/*:?Worksheet*/, js/*:Array<any>*/, opts)/*:Worksheet
|
|||
if(_R == -1) { _R = 0; range.e.r = js.length - 1 + offset; }
|
||||
}
|
||||
var hdr/*:Array<string>*/ = o.header || [], C = 0;
|
||||
|
||||
var ROW = [];
|
||||
js.forEach(function (JS, R/*:number*/) {
|
||||
if(!ws[_R + R + offset]) ws[_R + R + offset] = [];
|
||||
var ROW = ws[_R + R + offset];
|
||||
if(dense && !ws[_R + R + offset]) ws[_R + R + offset] = [];
|
||||
if(dense) ROW = ws[_R + R + offset];
|
||||
keys(JS).forEach(function(k) {
|
||||
if((C=hdr.indexOf(k)) == -1) hdr[C=hdr.length] = k;
|
||||
var v = JS[k];
|
||||
|
@ -25737,8 +25822,7 @@ function sheet_add_json(_ws/*:?Worksheet*/, js/*:Array<any>*/, opts)/*:Worksheet
|
|||
if(!cell) {
|
||||
if(!dense) ws[ref] = cell = ({t:t, v:v}/*:any*/);
|
||||
else ROW[_C + C] = cell = ({t:t, v:v}/*:any*/);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
cell.t = t; cell.v = v;
|
||||
delete cell.w; delete cell.R;
|
||||
if(z) cell.z = z;
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
|
||||
/* vim: set ts=2: */
|
||||
/*exported XLSX */
|
||||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */
|
||||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false, Set:false */
|
||||
var XLSX = {};
|
||||
function make_xlsx_lib(XLSX){
|
||||
XLSX.version = '0.18.11';
|
||||
XLSX.version = '0.18.12';
|
||||
var current_codepage = 1200, current_ansi = 1252;
|
||||
/*global cptable:true, window */
|
||||
var $cptable;
|
||||
|
@ -223,7 +223,7 @@ var bconcat = has_buf ? function(bufs) { return Buffer.concat(bufs.map(function(
|
|||
for(i = 0, maxlen = 0; i < bufs.length; maxlen += len, ++i) {
|
||||
len = bufs[i].length;
|
||||
if(bufs[i] instanceof Uint8Array) o.set(bufs[i], maxlen);
|
||||
else if(typeof bufs[i] == "string") { throw "wtf"; }
|
||||
else if(typeof bufs[i] == "string") o.set(new Uint8Array(s2a(bufs[i])), maxlen);
|
||||
else o.set(new Uint8Array(bufs[i]), maxlen);
|
||||
}
|
||||
return o;
|
||||
|
@ -2796,9 +2796,9 @@ function write_zip(cfb, options) {
|
|||
var namebuf = new_buf(fp.length);
|
||||
for(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);
|
||||
namebuf = namebuf.slice(0, namebuf.l);
|
||||
crcs[fcnt] = CRC32.buf(fi.content, 0);
|
||||
crcs[fcnt] = typeof fi.content == "string" ? CRC32.bstr(fi.content, 0) : CRC32.buf(fi.content, 0);
|
||||
|
||||
var outbuf = fi.content;
|
||||
var outbuf = typeof fi.content == "string" ? s2a(fi.content) : fi.content;
|
||||
if(method == 8) outbuf = _deflateRawSync(outbuf);
|
||||
|
||||
/* local file header */
|
||||
|
@ -7795,8 +7795,7 @@ function dbf_to_workbook(buf, opts) {
|
|||
var o = sheet_to_workbook(dbf_to_sheet(buf, opts), opts);
|
||||
o.bookType = "dbf";
|
||||
return o;
|
||||
}
|
||||
catch(e) { if(opts && opts.WTF) throw e; }
|
||||
} catch(e) { if(opts && opts.WTF) throw e; }
|
||||
return ({SheetNames:[],Sheets:{}});
|
||||
}
|
||||
|
||||
|
@ -11878,7 +11877,7 @@ function parse_xlmeta_xml(data, name, opts) {
|
|||
lastmeta.offsets.push(+y.i);
|
||||
break;
|
||||
default:
|
||||
if (!pass && opts.WTF)
|
||||
if (!pass && (opts == null ? void 0 : opts.WTF))
|
||||
throw new Error("unrecognized " + y[0] + " in metadata");
|
||||
}
|
||||
return x;
|
||||
|
@ -23028,8 +23027,11 @@ function stru8(str) {
|
|||
return typeof TextEncoder != "undefined" ? new TextEncoder().encode(str) : s2a(utf8write(str));
|
||||
}
|
||||
function u8contains(body, search) {
|
||||
var L = body.indexOf(search[0]);
|
||||
if (L == -1)
|
||||
return false;
|
||||
outer:
|
||||
for (var L = 0; L <= body.length - search.length; ++L) {
|
||||
for (; L <= body.length - search.length; ++L) {
|
||||
for (var j = 0; j < search.length; ++j)
|
||||
if (body[L + j] != search[j])
|
||||
continue outer;
|
||||
|
@ -23138,6 +23140,18 @@ function write_varint49(v) {
|
|||
}
|
||||
return usz[subarray](0, L);
|
||||
}
|
||||
function parse_packed_varints(buf) {
|
||||
var ptr = [0];
|
||||
var out = [];
|
||||
while (ptr[0] < buf.length)
|
||||
out.push(parse_varint49(buf, ptr));
|
||||
return out;
|
||||
}
|
||||
function write_packed_varints(nums) {
|
||||
return u8concat(nums.map(function(x) {
|
||||
return write_varint49(x);
|
||||
}));
|
||||
}
|
||||
function varint_to_i32(buf) {
|
||||
var l = 0, i32 = buf[l] & 127;
|
||||
varint:
|
||||
|
@ -23422,11 +23436,11 @@ function numbers_format_cell(cell, t, flags, ofmt, nfmt) {
|
|||
dur:
|
||||
if (flags & (ver > 4 ? 8 : 4) && cell.t == "n" && ctype == 7) {
|
||||
var dstyle = ((_a = fmt[7]) == null ? void 0 : _a[0]) ? parse_varint49(fmt[7][0].data) : -1;
|
||||
if (dstyle == -1)
|
||||
break dur;
|
||||
var dmin = ((_b = fmt[15]) == null ? void 0 : _b[0]) ? parse_varint49(fmt[15][0].data) : -1;
|
||||
var dmax = ((_c = fmt[16]) == null ? void 0 : _c[0]) ? parse_varint49(fmt[16][0].data) : -1;
|
||||
var auto = ((_d = fmt[40]) == null ? void 0 : _d[0]) ? parse_varint49(fmt[40][0].data) : -1;
|
||||
if (dstyle == -1)
|
||||
break dur;
|
||||
var d = cell.v, dd = d;
|
||||
autodur:
|
||||
if (auto) {
|
||||
|
@ -23606,35 +23620,30 @@ function parse_old_storage(buf, lut, v) {
|
|||
}
|
||||
function parse_new_storage(buf, lut) {
|
||||
var dv = u8_to_dataview(buf);
|
||||
var flags = dv.getUint32(8, true);
|
||||
var flags = dv.getUint32(4, true);
|
||||
var fields = dv.getUint32(8, true);
|
||||
var doff = 12;
|
||||
var ridx = -1, sidx = -1, zidx = -1, d128 = NaN, ieee = NaN, dt = new Date(2001, 0, 1);
|
||||
if (flags & 1) {
|
||||
if (fields & 1) {
|
||||
d128 = readDecimal128LE(buf, doff);
|
||||
doff += 16;
|
||||
}
|
||||
if (flags & 2) {
|
||||
if (fields & 2) {
|
||||
ieee = dv.getFloat64(doff, true);
|
||||
doff += 8;
|
||||
}
|
||||
if (flags & 4) {
|
||||
if (fields & 4) {
|
||||
dt.setTime(dt.getTime() + dv.getFloat64(doff, true) * 1e3);
|
||||
doff += 8;
|
||||
}
|
||||
if (flags & 8) {
|
||||
if (fields & 8) {
|
||||
sidx = dv.getUint32(doff, true);
|
||||
doff += 4;
|
||||
}
|
||||
if (flags & 16) {
|
||||
if (fields & 16) {
|
||||
ridx = dv.getUint32(doff, true);
|
||||
doff += 4;
|
||||
}
|
||||
doff += popcnt(flags & 8160) * 4;
|
||||
if (flags & 516096) {
|
||||
if (zidx == -1)
|
||||
zidx = dv.getUint32(doff, true);
|
||||
doff += 4;
|
||||
}
|
||||
var ret;
|
||||
var t = buf[1];
|
||||
switch (t) {
|
||||
|
@ -23659,21 +23668,22 @@ function parse_new_storage(buf, lut) {
|
|||
ret = { t: "e", v: 0 };
|
||||
break;
|
||||
case 9:
|
||||
{
|
||||
if (ridx > -1)
|
||||
ret = { t: "s", v: lut.rsst[ridx] };
|
||||
else
|
||||
throw new Error("Unsupported cell type ".concat(buf[1], " : ").concat(flags & 31, " : ").concat(buf[subarray](0, 4)));
|
||||
}
|
||||
ret = { t: "s", v: lut.rsst[ridx] };
|
||||
break;
|
||||
case 10:
|
||||
ret = { t: "n", v: d128 };
|
||||
break;
|
||||
default:
|
||||
throw new Error("Unsupported cell type ".concat(buf[1], " : ").concat(flags & 31, " : ").concat(buf[subarray](0, 4)));
|
||||
throw new Error("Unsupported cell type ".concat(buf[1], " : ").concat(fields & 31, " : ").concat(buf[subarray](0, 4)));
|
||||
}
|
||||
doff += popcnt(fields & 8160) * 4;
|
||||
if (fields & 516096) {
|
||||
if (zidx == -1)
|
||||
zidx = dv.getUint32(doff, true);
|
||||
doff += 4;
|
||||
}
|
||||
if (zidx > -1)
|
||||
numbers_format_cell(ret, t | 5 << 8, flags >> 13, lut.ofmt[zidx], lut.nfmt[zidx]);
|
||||
numbers_format_cell(ret, t | 5 << 8, fields >> 13, lut.ofmt[zidx], lut.nfmt[zidx]);
|
||||
if (t == 7)
|
||||
ret.v /= 86400;
|
||||
return ret;
|
||||
|
@ -23710,7 +23720,7 @@ function write_new_storage(cell, sst) {
|
|||
}
|
||||
function write_old_storage(cell, sst) {
|
||||
var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, flags = 0;
|
||||
out[0] = 3;
|
||||
out[0] = 4;
|
||||
switch (cell.t) {
|
||||
case "n":
|
||||
out[2] = 2;
|
||||
|
@ -23735,7 +23745,7 @@ function write_old_storage(cell, sst) {
|
|||
default:
|
||||
throw "unsupported cell type " + cell.t;
|
||||
}
|
||||
dv.setUint32(4, flags, true);
|
||||
dv.setUint32(8, flags, true);
|
||||
return out[subarray](0, l);
|
||||
}
|
||||
function parse_cell_storage(buf, lut) {
|
||||
|
@ -24091,42 +24101,26 @@ function write_tile_row(tri, data, SST, wide) {
|
|||
}
|
||||
function write_iwam(type, payload) {
|
||||
return {
|
||||
meta: [[], [{ type: 0, data: write_varint49(type) }]],
|
||||
meta: [
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(type) }]
|
||||
],
|
||||
data: payload
|
||||
};
|
||||
}
|
||||
var USE_WIDE_ROWS = true;
|
||||
function write_numbers_iwa(wb, opts) {
|
||||
var _a;
|
||||
if (!opts || !opts.numbers)
|
||||
throw new Error("Must pass a `numbers` option -- check the README");
|
||||
var ws = wb.Sheets[wb.SheetNames[0]];
|
||||
if (wb.SheetNames.length > 1)
|
||||
console.error("The Numbers writer currently writes only the first table");
|
||||
var range = decode_range(ws["!ref"]);
|
||||
range.s.r = range.s.c = 0;
|
||||
var trunc = false;
|
||||
if (range.e.c > 999) {
|
||||
trunc = true;
|
||||
range.e.c = 999;
|
||||
}
|
||||
if (range.e.r > 254) {
|
||||
trunc = true;
|
||||
range.e.r = 254;
|
||||
}
|
||||
if (trunc)
|
||||
console.error("The Numbers writer is currently limited to ".concat(encode_range(range)));
|
||||
var data = sheet_to_json(ws, { range: range, header: 1 });
|
||||
var SST = ["~Sh33tJ5~"];
|
||||
data.forEach(function(row) {
|
||||
return row.forEach(function(cell) {
|
||||
if (typeof cell == "string")
|
||||
SST.push(cell);
|
||||
});
|
||||
});
|
||||
function get_unique_msgid(dep, dependents) {
|
||||
if (!dependents.last)
|
||||
dependents.last = 927262;
|
||||
for (var i = dependents.last; i < 2e6; ++i)
|
||||
if (!dependents[i]) {
|
||||
dependents[dependents.last = i] = dep;
|
||||
return i;
|
||||
}
|
||||
throw new Error("Too many messages");
|
||||
}
|
||||
function build_numbers_deps(cfb) {
|
||||
var dependents = {};
|
||||
var indices = [];
|
||||
var cfb = CFB.read(opts.numbers, { type: "base64" });
|
||||
cfb.FileIndex.map(function(fi, idx) {
|
||||
return [fi, cfb.FullPaths[idx]];
|
||||
}).forEach(function(row) {
|
||||
|
@ -24135,30 +24129,27 @@ function write_numbers_iwa(wb, opts) {
|
|||
return;
|
||||
if (!fi.name.match(/\.iwa/))
|
||||
return;
|
||||
var old_content = fi.content;
|
||||
var raw1 = decompress_iwa_file(old_content);
|
||||
var x2 = parse_iwa_file(raw1);
|
||||
x2.forEach(function(packet2) {
|
||||
indices.push(packet2.id);
|
||||
dependents[packet2.id] = { deps: [], location: fp, type: varint_to_i32(packet2.messages[0].meta[1][0].data) };
|
||||
if (fi.name.match(/OperationStorage/))
|
||||
return;
|
||||
parse_iwa_file(decompress_iwa_file(fi.content)).forEach(function(packet) {
|
||||
indices.push(packet.id);
|
||||
dependents[packet.id] = { deps: [], location: fp, type: varint_to_i32(packet.messages[0].meta[1][0].data) };
|
||||
});
|
||||
});
|
||||
indices.sort(function(x2, y) {
|
||||
return x2 - y;
|
||||
indices.sort(function(x, y) {
|
||||
return x - y;
|
||||
});
|
||||
var indices_varint = indices.filter(function(x2) {
|
||||
return x2 > 1;
|
||||
}).map(function(x2) {
|
||||
return [x2, write_varint49(x2)];
|
||||
var indices_varint = indices.filter(function(x) {
|
||||
return x > 1;
|
||||
}).map(function(x) {
|
||||
return [x, write_varint49(x)];
|
||||
});
|
||||
cfb.FileIndex.map(function(fi, idx) {
|
||||
return [fi, cfb.FullPaths[idx]];
|
||||
}).forEach(function(row) {
|
||||
var fi = row[0];
|
||||
cfb.FileIndex.forEach(function(fi) {
|
||||
if (!fi.name.match(/\.iwa/))
|
||||
return;
|
||||
var x2 = parse_iwa_file(decompress_iwa_file(fi.content));
|
||||
x2.forEach(function(ia) {
|
||||
if (fi.name.match(/OperationStorage/))
|
||||
return;
|
||||
parse_iwa_file(decompress_iwa_file(fi.content)).forEach(function(ia) {
|
||||
indices_varint.forEach(function(ivi) {
|
||||
if (ia.messages.some(function(mess) {
|
||||
return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);
|
||||
|
@ -24168,190 +24159,130 @@ function write_numbers_iwa(wb, opts) {
|
|||
});
|
||||
});
|
||||
});
|
||||
function get_unique_msgid(dep) {
|
||||
for (var i = 927262; i < 2e6; ++i)
|
||||
if (!dependents[i]) {
|
||||
dependents[i] = dep;
|
||||
return i;
|
||||
}
|
||||
throw new Error("Too many messages");
|
||||
}
|
||||
var entry = CFB.find(cfb, dependents[1].location);
|
||||
if (!entry)
|
||||
return dependents;
|
||||
}
|
||||
function write_numbers_iwa(wb, opts) {
|
||||
if (!opts || !opts.numbers)
|
||||
throw new Error("Must pass a `numbers` option -- check the README");
|
||||
var cfb = CFB.read(opts.numbers, { type: "base64" });
|
||||
var dependents = build_numbers_deps(cfb);
|
||||
var cfb_DA = CFB.find(cfb, dependents[1].location);
|
||||
if (!cfb_DA)
|
||||
throw "Could not find ".concat(dependents[1].location, " in Numbers template");
|
||||
var x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
var docroot;
|
||||
for (var xi = 0; xi < x.length; ++xi) {
|
||||
var packet = x[xi];
|
||||
if (packet.id == 1)
|
||||
docroot = packet;
|
||||
}
|
||||
var iwa_DA = parse_iwa_file(decompress_iwa_file(cfb_DA.content));
|
||||
var docroot = iwa_DA.find(function(packet) {
|
||||
return packet.id == 1;
|
||||
});
|
||||
if (docroot == null)
|
||||
throw "Could not find message ".concat(1, " in Numbers template");
|
||||
var sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[1][0].data);
|
||||
entry = CFB.find(cfb, dependents[sheetrootref].location);
|
||||
var sheetrefs = mappa(parse_shallow(docroot.messages[0].data)[1], parse_TSP_Reference);
|
||||
wb.SheetNames.forEach(function(name, idx) {
|
||||
return write_numbers_ws(cfb, dependents, wb.Sheets[name], name, idx, sheetrefs[idx]);
|
||||
});
|
||||
return cfb;
|
||||
}
|
||||
function numbers_iwa_doit(cfb, deps, id, cb) {
|
||||
var entry = CFB.find(cfb, deps[id].location);
|
||||
if (!entry)
|
||||
throw "Could not find ".concat(dependents[sheetrootref].location, " in Numbers template");
|
||||
x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
for (xi = 0; xi < x.length; ++xi) {
|
||||
packet = x[xi];
|
||||
if (packet.id == sheetrootref)
|
||||
docroot = packet;
|
||||
}
|
||||
var sheetref = parse_shallow(docroot.messages[0].data);
|
||||
{
|
||||
sheetref[1] = [{ type: 2, data: stru8(wb.SheetNames[0]) }];
|
||||
}
|
||||
docroot.messages[0].data = write_shallow(sheetref);
|
||||
throw "Could not find ".concat(deps[id].location, " in Numbers template");
|
||||
var x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
var ainfo = x.find(function(packet) {
|
||||
return packet.id == id;
|
||||
});
|
||||
cb(ainfo, x);
|
||||
entry.content = compress_iwa_file(write_iwa_file(x));
|
||||
entry.size = entry.content.length;
|
||||
sheetrootref = parse_TSP_Reference(sheetref[2][0].data);
|
||||
entry = CFB.find(cfb, dependents[sheetrootref].location);
|
||||
}
|
||||
function numbers_iwa_find(cfb, deps, id) {
|
||||
var entry = CFB.find(cfb, deps[id].location);
|
||||
if (!entry)
|
||||
throw "Could not find ".concat(dependents[sheetrootref].location, " in Numbers template");
|
||||
x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
for (xi = 0; xi < x.length; ++xi) {
|
||||
packet = x[xi];
|
||||
if (packet.id == sheetrootref)
|
||||
docroot = packet;
|
||||
throw "Could not find ".concat(deps[id].location, " in Numbers template");
|
||||
var x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
var ainfo = x.find(function(packet) {
|
||||
return packet.id == id;
|
||||
});
|
||||
return ainfo;
|
||||
}
|
||||
function write_numbers_ws(cfb, deps, ws, wsname, sheetidx, rootref) {
|
||||
if (sheetidx >= 1)
|
||||
return console.error("The Numbers writer currently writes only the first table");
|
||||
var drawables = [];
|
||||
numbers_iwa_doit(cfb, deps, rootref, function(docroot) {
|
||||
var sheetref = parse_shallow(docroot.messages[0].data);
|
||||
{
|
||||
sheetref[1] = [{ type: 2, data: stru8(wsname) }];
|
||||
drawables = mappa(sheetref[2], parse_TSP_Reference);
|
||||
}
|
||||
docroot.messages[0].data = write_shallow(sheetref);
|
||||
});
|
||||
var tia = numbers_iwa_find(cfb, deps, drawables[0]);
|
||||
var tmaref = parse_TSP_Reference(parse_shallow(tia.messages[0].data)[2][0].data);
|
||||
numbers_iwa_doit(cfb, deps, tmaref, function(docroot, x) {
|
||||
return write_numbers_tma(cfb, deps, ws, docroot, x, tmaref);
|
||||
});
|
||||
}
|
||||
var USE_WIDE_ROWS = true;
|
||||
function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
|
||||
var _a, _b;
|
||||
var range = decode_range(ws["!ref"]);
|
||||
range.s.r = range.s.c = 0;
|
||||
var trunc = false;
|
||||
if (range.e.c > 999) {
|
||||
trunc = true;
|
||||
range.e.c = 999;
|
||||
}
|
||||
sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[2][0].data);
|
||||
entry = CFB.find(cfb, dependents[sheetrootref].location);
|
||||
if (!entry)
|
||||
throw "Could not find ".concat(dependents[sheetrootref].location, " in Numbers template");
|
||||
x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
for (xi = 0; xi < x.length; ++xi) {
|
||||
packet = x[xi];
|
||||
if (packet.id == sheetrootref)
|
||||
docroot = packet;
|
||||
if (range.e.r > 999999) {
|
||||
trunc = true;
|
||||
range.e.r = 999999;
|
||||
}
|
||||
var pb = parse_shallow(docroot.messages[0].data);
|
||||
if (trunc)
|
||||
console.error("Truncating to ".concat(encode_range(range)));
|
||||
var data = sheet_to_json(ws, { range: range, header: 1 });
|
||||
var SST = ["~Sh33tJ5~"], SST_set = new Set(SST);
|
||||
data.forEach(function(row) {
|
||||
return row.forEach(function(cell) {
|
||||
if (typeof cell == "string" && !SST_set.has(cell)) {
|
||||
SST.push(cell);
|
||||
SST_set.add(cell);
|
||||
}
|
||||
});
|
||||
});
|
||||
var loc = deps[tmaref].location;
|
||||
loc = loc.replace(/^Root Entry\//, "");
|
||||
loc = loc.replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
var pb = parse_shallow(tmaroot.messages[0].data);
|
||||
{
|
||||
pb[6][0].data = write_varint49(range.e.r + 1);
|
||||
pb[7][0].data = write_varint49(range.e.c + 1);
|
||||
var cruidsref = parse_TSP_Reference(pb[46][0].data);
|
||||
var oldbucket = CFB.find(cfb, dependents[cruidsref].location);
|
||||
if (!oldbucket)
|
||||
throw "Could not find ".concat(dependents[cruidsref].location, " in Numbers template");
|
||||
var _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));
|
||||
{
|
||||
for (var j = 0; j < _x.length; ++j) {
|
||||
if (_x[j].id == cruidsref)
|
||||
break;
|
||||
}
|
||||
if (_x[j].id != cruidsref)
|
||||
throw "Bad ColumnRowUIDMapArchive";
|
||||
var cruids = parse_shallow(_x[j].messages[0].data);
|
||||
cruids[1] = [];
|
||||
cruids[2] = [], cruids[3] = [];
|
||||
for (var C = 0; C <= range.e.c; ++C) {
|
||||
cruids[1].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(C + 420690) }],
|
||||
[{ type: 0, data: write_varint49(C + 420690) }]
|
||||
]) });
|
||||
cruids[2].push({ type: 0, data: write_varint49(C) });
|
||||
cruids[3].push({ type: 0, data: write_varint49(C) });
|
||||
}
|
||||
cruids[4] = [];
|
||||
cruids[5] = [], cruids[6] = [];
|
||||
for (var R = 0; R <= range.e.r; ++R) {
|
||||
cruids[4].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(R + 726270) }],
|
||||
[{ type: 0, data: write_varint49(R + 726270) }]
|
||||
]) });
|
||||
cruids[5].push({ type: 0, data: write_varint49(R) });
|
||||
cruids[6].push({ type: 0, data: write_varint49(R) });
|
||||
}
|
||||
_x[j].messages[0].data = write_shallow(cruids);
|
||||
}
|
||||
oldbucket.content = compress_iwa_file(write_iwa_file(_x));
|
||||
oldbucket.size = oldbucket.content.length;
|
||||
delete pb[46];
|
||||
var store = parse_shallow(pb[4][0].data);
|
||||
{
|
||||
store[7][0].data = write_varint49(range.e.r + 1);
|
||||
var row_headers = parse_shallow(store[1][0].data);
|
||||
var row_header_ref = parse_TSP_Reference(row_headers[2][0].data);
|
||||
oldbucket = CFB.find(cfb, dependents[row_header_ref].location);
|
||||
if (!oldbucket)
|
||||
throw "Could not find ".concat(dependents[cruidsref].location, " in Numbers template");
|
||||
_x = parse_iwa_file(decompress_iwa_file(oldbucket.content));
|
||||
{
|
||||
if (_x[0].id != row_header_ref)
|
||||
throw "Bad HeaderStorageBucket";
|
||||
var base_bucket = parse_shallow(_x[0].messages[0].data);
|
||||
if ((_a = base_bucket == null ? void 0 : base_bucket[2]) == null ? void 0 : _a[0])
|
||||
for (R = 0; R < data.length; ++R) {
|
||||
var row_header_ref = parse_TSP_Reference(parse_shallow(store[1][0].data)[2][0].data);
|
||||
numbers_iwa_doit(cfb, deps, row_header_ref, function(rowhead, _x) {
|
||||
var _a2;
|
||||
var base_bucket = parse_shallow(rowhead.messages[0].data);
|
||||
if ((_a2 = base_bucket == null ? void 0 : base_bucket[2]) == null ? void 0 : _a2[0])
|
||||
for (var R2 = 0; R2 < data.length; ++R2) {
|
||||
var _bucket = parse_shallow(base_bucket[2][0].data);
|
||||
_bucket[1][0].data = write_varint49(R);
|
||||
_bucket[4][0].data = write_varint49(data[R].length);
|
||||
base_bucket[2][R] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };
|
||||
_bucket[1][0].data = write_varint49(R2);
|
||||
_bucket[4][0].data = write_varint49(data[R2].length);
|
||||
base_bucket[2][R2] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };
|
||||
}
|
||||
_x[0].messages[0].data = write_shallow(base_bucket);
|
||||
}
|
||||
oldbucket.content = compress_iwa_file(write_iwa_file(_x));
|
||||
oldbucket.size = oldbucket.content.length;
|
||||
rowhead.messages[0].data = write_shallow(base_bucket);
|
||||
});
|
||||
var col_header_ref = parse_TSP_Reference(store[2][0].data);
|
||||
oldbucket = CFB.find(cfb, dependents[col_header_ref].location);
|
||||
if (!oldbucket)
|
||||
throw "Could not find ".concat(dependents[cruidsref].location, " in Numbers template");
|
||||
_x = parse_iwa_file(decompress_iwa_file(oldbucket.content));
|
||||
{
|
||||
if (_x[0].id != col_header_ref)
|
||||
throw "Bad HeaderStorageBucket";
|
||||
base_bucket = parse_shallow(_x[0].messages[0].data);
|
||||
for (C = 0; C <= range.e.c; ++C) {
|
||||
_bucket = parse_shallow(base_bucket[2][0].data);
|
||||
numbers_iwa_doit(cfb, deps, col_header_ref, function(colhead, _x) {
|
||||
var base_bucket = parse_shallow(colhead.messages[0].data);
|
||||
for (var C = 0; C <= range.e.c; ++C) {
|
||||
var _bucket = parse_shallow(base_bucket[2][0].data);
|
||||
_bucket[1][0].data = write_varint49(C);
|
||||
_bucket[4][0].data = write_varint49(range.e.r + 1);
|
||||
base_bucket[2][C] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };
|
||||
}
|
||||
_x[0].messages[0].data = write_shallow(base_bucket);
|
||||
}
|
||||
oldbucket.content = compress_iwa_file(write_iwa_file(_x));
|
||||
oldbucket.size = oldbucket.content.length;
|
||||
if (ws["!merges"]) {
|
||||
var mergeid = get_unique_msgid({
|
||||
type: 6144,
|
||||
deps: [sheetrootref],
|
||||
location: dependents[sheetrootref].location
|
||||
});
|
||||
var mergedata = [[], []];
|
||||
ws["!merges"].forEach(function(m) {
|
||||
mergedata[1].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 5, data: new Uint8Array(new Uint16Array([m.s.r, m.s.c]).buffer) }]
|
||||
]) }],
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 5, data: new Uint8Array(new Uint16Array([m.e.r - m.s.r + 1, m.e.c - m.s.c + 1]).buffer) }]
|
||||
]) }]
|
||||
]) });
|
||||
});
|
||||
store[13] = [{ type: 2, data: write_TSP_Reference(mergeid) }];
|
||||
x.push({
|
||||
id: mergeid,
|
||||
messages: [write_iwam(6144, write_shallow(mergedata))]
|
||||
});
|
||||
}
|
||||
colhead.messages[0].data = write_shallow(base_bucket);
|
||||
});
|
||||
var sstref = parse_TSP_Reference(store[4][0].data);
|
||||
(function() {
|
||||
var sentry = CFB.find(cfb, dependents[sstref].location);
|
||||
if (!sentry)
|
||||
throw "Could not find ".concat(dependents[sstref].location, " in Numbers template");
|
||||
var sx = parse_iwa_file(decompress_iwa_file(sentry.content));
|
||||
var sstroot;
|
||||
for (var sxi = 0; sxi < sx.length; ++sxi) {
|
||||
var packet2 = sx[sxi];
|
||||
if (packet2.id == sstref)
|
||||
sstroot = packet2;
|
||||
}
|
||||
if (sstroot == null)
|
||||
throw "Could not find message ".concat(sstref, " in Numbers template");
|
||||
numbers_iwa_doit(cfb, deps, sstref, function(sstroot) {
|
||||
var sstdata = parse_shallow(sstroot.messages[0].data);
|
||||
{
|
||||
sstdata[3] = [];
|
||||
|
@ -24365,62 +24296,215 @@ function write_numbers_iwa(wb, opts) {
|
|||
});
|
||||
}
|
||||
sstroot.messages[0].data = write_shallow(sstdata);
|
||||
sentry.content = compress_iwa_file(write_iwa_file(sx));
|
||||
sentry.size = sentry.content.length;
|
||||
})();
|
||||
var tile = parse_shallow(store[3][0].data);
|
||||
});
|
||||
var rbtree = parse_shallow(store[9][0].data);
|
||||
rbtree[1] = [];
|
||||
var tilestore = parse_shallow(store[3][0].data);
|
||||
{
|
||||
var t = tile[1][0];
|
||||
tile[3] = [{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }];
|
||||
var tl = parse_shallow(t.data);
|
||||
var tstride = 256;
|
||||
tilestore[2] = [{ type: 0, data: write_varint49(tstride) }];
|
||||
var tileref = parse_TSP_Reference(parse_shallow(tilestore[1][0].data)[2][0].data);
|
||||
var save_token = 0;
|
||||
{
|
||||
var tileref = parse_TSP_Reference(tl[2][0].data);
|
||||
(function() {
|
||||
var tentry = CFB.find(cfb, dependents[tileref].location);
|
||||
if (!tentry)
|
||||
throw "Could not find ".concat(dependents[tileref].location, " in Numbers template");
|
||||
var tx = parse_iwa_file(decompress_iwa_file(tentry.content));
|
||||
var tileroot;
|
||||
for (var sxi = 0; sxi < tx.length; ++sxi) {
|
||||
var packet2 = tx[sxi];
|
||||
if (packet2.id == tileref)
|
||||
tileroot = packet2;
|
||||
}
|
||||
var tiledata = parse_shallow(tileroot.messages[0].data);
|
||||
{
|
||||
delete tiledata[6];
|
||||
delete tile[7];
|
||||
var rowload = new Uint8Array(tiledata[5][0].data);
|
||||
tiledata[5] = [];
|
||||
for (var R2 = 0; R2 <= range.e.r; ++R2) {
|
||||
var tilerow = parse_shallow(rowload);
|
||||
write_tile_row(tilerow, data[R2], SST, USE_WIDE_ROWS);
|
||||
tilerow[1][0].data = write_varint49(R2);
|
||||
tiledata[5].push({ data: write_shallow(tilerow), type: 2 });
|
||||
}
|
||||
tiledata[1] = [{ type: 0, data: write_varint49(0) }];
|
||||
tiledata[2] = [{ type: 0, data: write_varint49(0) }];
|
||||
tiledata[3] = [{ type: 0, data: write_varint49(0) }];
|
||||
tiledata[4] = [{ type: 0, data: write_varint49(range.e.r + 1) }];
|
||||
tiledata[6] = [{ type: 0, data: write_varint49(5) }];
|
||||
tiledata[7] = [{ type: 0, data: write_varint49(1) }];
|
||||
tiledata[8] = [{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }];
|
||||
}
|
||||
tileroot.messages[0].data = write_shallow(tiledata);
|
||||
tentry.content = compress_iwa_file(write_iwa_file(tx));
|
||||
tentry.size = tentry.content.length;
|
||||
})();
|
||||
CFB.utils.cfb_del(cfb, deps[tileref].location);
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
var lst = mlist[3].filter(function(m) {
|
||||
return parse_varint49(parse_shallow(m.data)[1][0].data) == tileref;
|
||||
});
|
||||
if (lst && lst.length > 0)
|
||||
save_token = parse_varint49(parse_shallow(lst[0].data)[12][0].data);
|
||||
mlist[3] = mlist[3].filter(function(m) {
|
||||
return parse_varint49(parse_shallow(m.data)[1][0].data) != tileref;
|
||||
});
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a2, _b2;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a2 = mm[3]) == null ? void 0 : _a2[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6] = parent[6].filter(function(m) {
|
||||
return parse_varint49(parse_shallow(m.data)[1][0].data) != tileref;
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
}
|
||||
tilestore[1] = [];
|
||||
var ntiles = Math.ceil((range.e.r + 1) / tstride);
|
||||
for (var tidx = 0; tidx < ntiles; ++tidx) {
|
||||
var newtileid = get_unique_msgid({
|
||||
deps: [],
|
||||
location: "",
|
||||
type: 6002
|
||||
}, deps);
|
||||
deps[newtileid].location = "Root Entry/Index/Tables/Tile-".concat(newtileid, ".iwa");
|
||||
var tiledata = [
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[{ type: 0, data: write_varint49(Math.min(range.e.r + 1, (tidx + 1) * tstride)) }],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[{ type: 0, data: write_varint49(Math.min((tidx + 1) * tstride, range.e.r + 1) - tidx * tstride) }],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(5) }],
|
||||
[{ type: 0, data: write_varint49(1) }],
|
||||
[{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }]
|
||||
];
|
||||
for (var R = tidx * tstride; R <= Math.min(range.e.r, (tidx + 1) * tstride - 1); ++R) {
|
||||
var tilerow = [
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[{ type: 2, data: new Uint8Array([]) }],
|
||||
[{ type: 2, data: new Uint8Array(Array.from({ length: 510 }, function() {
|
||||
return 255;
|
||||
})) }],
|
||||
[{ type: 0, data: write_varint49(5) }],
|
||||
[{ type: 2, data: new Uint8Array([]) }],
|
||||
[{ type: 2, data: new Uint8Array(Array.from({ length: 510 }, function() {
|
||||
return 255;
|
||||
})) }],
|
||||
[{ type: 0, data: write_varint49(1) }]
|
||||
];
|
||||
write_tile_row(tilerow, data[R], SST, USE_WIDE_ROWS);
|
||||
tilerow[1][0].data = write_varint49(R - tidx * tstride);
|
||||
tiledata[5].push({ data: write_shallow(tilerow), type: 2 });
|
||||
}
|
||||
tilestore[1].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(tidx) }],
|
||||
[{ type: 2, data: write_TSP_Reference(newtileid) }]
|
||||
]) });
|
||||
var newtile = {
|
||||
id: newtileid,
|
||||
messages: [write_iwam(6002, write_shallow(tiledata))]
|
||||
};
|
||||
var tilecontent = compress_iwa_file(write_iwa_file([newtile]));
|
||||
CFB.utils.cfb_add(cfb, "/Index/Tables/Tile-".concat(newtileid, ".iwa"), tilecontent);
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
mlist[3].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newtileid) }],
|
||||
[{ type: 2, data: stru8("Tables/Tile") }],
|
||||
[{ type: 2, data: stru8("Tables/Tile-".concat(newtileid)) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(save_token) }]
|
||||
]) });
|
||||
mlist[1] = [{ type: 0, data: write_varint49(Math.max(newtileid + 1, parse_varint49(mlist[1][0].data))) }];
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a2, _b2;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a2 = mm[3]) == null ? void 0 : _a2[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newtileid) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
var orefs = ((_a = tmaroot.messages[0].meta[5]) == null ? void 0 : _a[0]) ? parse_packed_varints(tmaroot.messages[0].meta[5][0].data) : [];
|
||||
var orefidx = orefs.indexOf(newtileid);
|
||||
if (orefidx == -1) {
|
||||
orefs[orefidx = orefs.length] = newtileid;
|
||||
tmaroot.messages[0].meta[5] = [{ type: 2, data: write_packed_varints(orefs) }];
|
||||
}
|
||||
rbtree[1].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(tidx * tstride) }],
|
||||
[{ type: 0, data: write_varint49(tidx) }]
|
||||
]) });
|
||||
}
|
||||
t.data = write_shallow(tl);
|
||||
}
|
||||
store[3][0].data = write_shallow(tile);
|
||||
store[3][0].data = write_shallow(tilestore);
|
||||
store[9][0].data = write_shallow(rbtree);
|
||||
store[10] = [{ type: 2, data: new Uint8Array([]) }];
|
||||
if (ws["!merges"]) {
|
||||
var mergeid = get_unique_msgid({
|
||||
type: 6144,
|
||||
deps: [tmaref],
|
||||
location: deps[tmaref].location
|
||||
}, deps);
|
||||
tmafile.push({
|
||||
id: mergeid,
|
||||
messages: [write_iwam(6144, write_shallow([
|
||||
[],
|
||||
ws["!merges"].map(function(m) {
|
||||
return { type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 5, data: new Uint8Array(new Uint16Array([m.s.r, m.s.c]).buffer) }]
|
||||
]) }],
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 5, data: new Uint8Array(new Uint16Array([m.e.r - m.s.r + 1, m.e.c - m.s.c + 1]).buffer) }]
|
||||
]) }]
|
||||
]) };
|
||||
})
|
||||
]))]
|
||||
});
|
||||
store[13] = [{ type: 2, data: write_TSP_Reference(mergeid) }];
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a2, _b2;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a2 = mm[3]) == null ? void 0 : _a2[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(mergeid) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
orefs = ((_b = tmaroot.messages[0].meta[5]) == null ? void 0 : _b[0]) ? parse_packed_varints(tmaroot.messages[0].meta[5][0].data) : [];
|
||||
orefidx = orefs.indexOf(mergeid);
|
||||
if (orefidx == -1) {
|
||||
orefs[orefidx = orefs.length] = mergeid;
|
||||
tmaroot.messages[0].meta[5] = [{ type: 2, data: write_packed_varints(orefs) }];
|
||||
}
|
||||
} else
|
||||
delete store[13];
|
||||
}
|
||||
pb[4][0].data = write_shallow(store);
|
||||
}
|
||||
docroot.messages[0].data = write_shallow(pb);
|
||||
entry.content = compress_iwa_file(write_iwa_file(x));
|
||||
entry.size = entry.content.length;
|
||||
return cfb;
|
||||
tmaroot.messages[0].data = write_shallow(pb);
|
||||
}
|
||||
function fix_opts_func(defaults) {
|
||||
return function fix_opts(opts) {
|
||||
|
@ -24506,12 +24590,12 @@ function safe_parse_sheet(zip, path, relsPath, sheet, idx, sheetRels, sheets, st
|
|||
sheets[sheet] = _ws;
|
||||
|
||||
/* scan rels for comments and threaded comments */
|
||||
var tcomments = [];
|
||||
var comments = [], tcomments = [];
|
||||
if(sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function(n) {
|
||||
var dfile = "";
|
||||
if(sheetRels[sheet][n].Type == RELS.CMNT) {
|
||||
dfile = resolve_path(sheetRels[sheet][n].Target, path);
|
||||
var comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);
|
||||
comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);
|
||||
if(!comments || !comments.length) return;
|
||||
sheet_insert_comments(_ws, comments, false);
|
||||
}
|
||||
|
@ -24870,7 +24954,8 @@ f = "docProps/app.xml";
|
|||
/* TODO: something more intelligent with themes */
|
||||
|
||||
f = "xl/theme/theme1.xml";
|
||||
zip_add_file(zip, f, write_theme(wb.Themes, opts));
|
||||
var ww = write_theme(wb.Themes, opts);
|
||||
zip_add_file(zip, f, ww);
|
||||
ct.themes.push(f);
|
||||
add_rels(opts.wbrels, -1, "theme/theme1.xml", RELS.THEME);
|
||||
|
||||
|
@ -25590,10 +25675,10 @@ function sheet_add_json(_ws, js, opts) {
|
|||
if(_R == -1) { _R = 0; range.e.r = js.length - 1 + offset; }
|
||||
}
|
||||
var hdr = o.header || [], C = 0;
|
||||
|
||||
var ROW = [];
|
||||
js.forEach(function (JS, R) {
|
||||
if(!ws[_R + R + offset]) ws[_R + R + offset] = [];
|
||||
var ROW = ws[_R + R + offset];
|
||||
if(dense && !ws[_R + R + offset]) ws[_R + R + offset] = [];
|
||||
if(dense) ROW = ws[_R + R + offset];
|
||||
keys(JS).forEach(function(k) {
|
||||
if((C=hdr.indexOf(k)) == -1) hdr[C=hdr.length] = k;
|
||||
var v = JS[k];
|
||||
|
@ -25616,8 +25701,7 @@ function sheet_add_json(_ws, js, opts) {
|
|||
if(!cell) {
|
||||
if(!dense) ws[ref] = cell = ({t:t, v:v});
|
||||
else ROW[_C + C] = cell = ({t:t, v:v});
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
cell.t = t; cell.v = v;
|
||||
delete cell.w; delete cell.R;
|
||||
if(z) cell.z = z;
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
|
||||
/* vim: set ts=2: */
|
||||
/*exported XLSX */
|
||||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */
|
||||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false, Set:false */
|
||||
var XLSX = {};
|
||||
function make_xlsx_lib(XLSX){
|
||||
XLSX.version = '0.18.11';
|
||||
XLSX.version = '0.18.12';
|
||||
var current_codepage = 1200, current_ansi = 1252;
|
||||
/*:: declare var cptable:any; */
|
||||
/*global cptable:true, window */
|
||||
|
@ -225,7 +225,7 @@ var bconcat = has_buf ? function(bufs) { return Buffer.concat(bufs.map(function(
|
|||
for(i = 0, maxlen = 0; i < bufs.length; maxlen += len, ++i) {
|
||||
len = bufs[i].length;
|
||||
if(bufs[i] instanceof Uint8Array) o.set(bufs[i], maxlen);
|
||||
else if(typeof bufs[i] == "string") { throw "wtf"; }
|
||||
else if(typeof bufs[i] == "string") o.set(new Uint8Array(s2a(bufs[i])), maxlen);
|
||||
else o.set(new Uint8Array(bufs[i]), maxlen);
|
||||
}
|
||||
return o;
|
||||
|
@ -2863,9 +2863,9 @@ function write_zip(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes*/
|
|||
var namebuf = new_buf(fp.length);
|
||||
for(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);
|
||||
namebuf = namebuf.slice(0, namebuf.l);
|
||||
crcs[fcnt] = CRC32.buf(/*::((*/fi.content/*::||[]):any)*/, 0);
|
||||
crcs[fcnt] = typeof fi.content == "string" ? CRC32.bstr(fi.content, 0) : CRC32.buf(/*::((*/fi.content/*::||[]):any)*/, 0);
|
||||
|
||||
var outbuf = fi.content/*::||[]*/;
|
||||
var outbuf = typeof fi.content == "string" ? s2a(fi.content) : fi.content/*::||[]*/;
|
||||
if(method == 8) outbuf = _deflateRawSync(outbuf);
|
||||
|
||||
/* local file header */
|
||||
|
@ -4087,7 +4087,7 @@ function WriteShift(t/*:number*/, val/*:string|number*/, f/*:?string*/)/*:any*/
|
|||
}
|
||||
size = val.length;
|
||||
} else if(typeof $cptable !== 'undefined' && f == 'cpstr') {
|
||||
cpp = $cptable.utils.encode(current_ansi, val);
|
||||
cpp = $cptable.utils.encode(current_codepage, val);
|
||||
/* replace null bytes with _ when relevant */
|
||||
if(cpp.length == val.length) for(i = 0; i < val.length; ++i) if(cpp[i] == 0 && val.charCodeAt(i) != 0) cpp[i] = 0x5F;
|
||||
if(cpp.length == 2 * val.length) for(i = 0; i < val.length; ++i) if(cpp[2*i] == 0 && cpp[2*i+1] == 0 && val.charCodeAt(i) != 0) cpp[2*i] = 0x5F;
|
||||
|
@ -5516,7 +5516,6 @@ function write_cust_props(cp/*::, opts*/)/*:string*/ {
|
|||
if(o.length>2){ o[o.length] = '</Properties>'; o[1]=o[1].replace("/>",">"); }
|
||||
return o.join("");
|
||||
}
|
||||
/* from js-harb (C) 2014-present SheetJS */
|
||||
var DBF_SUPPORTED_VERSIONS = [0x02, 0x03, 0x30, 0x31, 0x83, 0x8B, 0x8C, 0xF5];
|
||||
var DBF = /*#__PURE__*/(function() {
|
||||
var dbf_codepage_map = {
|
||||
|
@ -5757,14 +5756,14 @@ function dbf_to_workbook(buf, opts)/*:Workbook*/ {
|
|||
var o = sheet_to_workbook(dbf_to_sheet(buf, opts), opts);
|
||||
o.bookType = "dbf";
|
||||
return o;
|
||||
}
|
||||
catch(e) { if(opts && opts.WTF) throw e; }
|
||||
} catch(e) { if(opts && opts.WTF) throw e; }
|
||||
return ({SheetNames:[],Sheets:{}});
|
||||
}
|
||||
|
||||
var _RLEN = { 'B': 8, 'C': 250, 'L': 1, 'D': 8, '?': 0, '': 0 };
|
||||
function sheet_to_dbf(ws/*:Worksheet*/, opts/*:WriteOpts*/) {
|
||||
var o = opts || {};
|
||||
var old_cp = current_codepage;
|
||||
if(+o.codepage >= 0) set_cp(+o.codepage);
|
||||
if(o.type == "string") throw new Error("Cannot write DBF to JS string");
|
||||
var ba = buf_array();
|
||||
|
@ -5827,11 +5826,17 @@ function sheet_to_dbf(ws/*:Worksheet*/, opts/*:WriteOpts*/) {
|
|||
h.write_shift(2, 296 + 32 * hcnt);
|
||||
h.write_shift(2, rlen);
|
||||
for(i=0; i < 4; ++i) h.write_shift(4, 0);
|
||||
h.write_shift(4, 0x00000000 | ((+dbf_reverse_map[/*::String(*/current_ansi/*::)*/] || 0x03)<<8));
|
||||
var cp = +dbf_reverse_map[/*::String(*/current_codepage/*::)*/] || 0x03;
|
||||
h.write_shift(4, 0x00000000 | (cp<<8));
|
||||
if(dbf_codepage_map[cp] != +o.codepage) {
|
||||
console.error("DBF Unsupported codepage " + current_codepage + ", using 1252");
|
||||
current_codepage = 1252;
|
||||
}
|
||||
|
||||
for(i = 0, j = 0; i < headers.length; ++i) {
|
||||
if(headers[i] == null) continue;
|
||||
var hf = ba.next(32);
|
||||
/* TODO: test how applications handle non-ASCII field names */
|
||||
var _f = (headers[i].slice(-10) + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00").slice(0, 11);
|
||||
hf.write_shift(1, _f, "sbcs");
|
||||
hf.write_shift(1, coltypes[i] == '?' ? 'C' : coltypes[i], "sbcs");
|
||||
|
@ -5880,6 +5885,7 @@ function sheet_to_dbf(ws/*:Worksheet*/, opts/*:WriteOpts*/) {
|
|||
}
|
||||
// data
|
||||
}
|
||||
current_codepage = old_cp;
|
||||
ba.next(1).write_shift(1, 0x1A);
|
||||
return ba.end();
|
||||
}
|
||||
|
@ -7720,7 +7726,7 @@ function parse_xlmeta_xml(data, name, opts) {
|
|||
lastmeta.offsets.push(+y.i);
|
||||
break;
|
||||
default:
|
||||
if (!pass && opts.WTF)
|
||||
if (!pass && (opts == null ? void 0 : opts.WTF))
|
||||
throw new Error("unrecognized " + y[0] + " in metadata");
|
||||
}
|
||||
return x;
|
||||
|
@ -11105,12 +11111,12 @@ function safe_parse_sheet(zip, path/*:string*/, relsPath/*:string*/, sheet, idx/
|
|||
sheets[sheet] = _ws;
|
||||
|
||||
/* scan rels for comments and threaded comments */
|
||||
var tcomments = [];
|
||||
var comments = [], tcomments = [];
|
||||
if(sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function(n) {
|
||||
var dfile = "";
|
||||
if(sheetRels[sheet][n].Type == RELS.CMNT) {
|
||||
dfile = resolve_path(sheetRels[sheet][n].Target, path);
|
||||
var comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);
|
||||
comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);
|
||||
if(!comments || !comments.length) return;
|
||||
sheet_insert_comments(_ws, comments, false);
|
||||
}
|
||||
|
@ -11472,7 +11478,8 @@ function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
|
|||
/* TODO: something more intelligent with themes */
|
||||
|
||||
f = "xl/theme/theme1.xml";
|
||||
zip_add_file(zip, f, write_theme(wb.Themes, opts));
|
||||
var ww = write_theme(wb.Themes, opts);
|
||||
zip_add_file(zip, f, ww);
|
||||
ct.themes.push(f);
|
||||
add_rels(opts.wbrels, -1, "theme/theme1.xml", RELS.THEME);
|
||||
|
||||
|
@ -12200,10 +12207,10 @@ function sheet_add_json(_ws/*:?Worksheet*/, js/*:Array<any>*/, opts)/*:Worksheet
|
|||
if(_R == -1) { _R = 0; range.e.r = js.length - 1 + offset; }
|
||||
}
|
||||
var hdr/*:Array<string>*/ = o.header || [], C = 0;
|
||||
|
||||
var ROW = [];
|
||||
js.forEach(function (JS, R/*:number*/) {
|
||||
if(!ws[_R + R + offset]) ws[_R + R + offset] = [];
|
||||
var ROW = ws[_R + R + offset];
|
||||
if(dense && !ws[_R + R + offset]) ws[_R + R + offset] = [];
|
||||
if(dense) ROW = ws[_R + R + offset];
|
||||
keys(JS).forEach(function(k) {
|
||||
if((C=hdr.indexOf(k)) == -1) hdr[C=hdr.length] = k;
|
||||
var v = JS[k];
|
||||
|
@ -12226,8 +12233,7 @@ function sheet_add_json(_ws/*:?Worksheet*/, js/*:Array<any>*/, opts)/*:Worksheet
|
|||
if(!cell) {
|
||||
if(!dense) ws[ref] = cell = ({t:t, v:v}/*:any*/);
|
||||
else ROW[_C + C] = cell = ({t:t, v:v}/*:any*/);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
cell.t = t; cell.v = v;
|
||||
delete cell.w; delete cell.R;
|
||||
if(z) cell.z = z;
|
||||
|
|
44
xlsx.mini.js
44
xlsx.mini.js
|
@ -1,10 +1,10 @@
|
|||
/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
|
||||
/* vim: set ts=2: */
|
||||
/*exported XLSX */
|
||||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */
|
||||
/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false, Set:false */
|
||||
var XLSX = {};
|
||||
function make_xlsx_lib(XLSX){
|
||||
XLSX.version = '0.18.11';
|
||||
XLSX.version = '0.18.12';
|
||||
var current_codepage = 1200, current_ansi = 1252;
|
||||
/*global cptable:true, window */
|
||||
var $cptable;
|
||||
|
@ -223,7 +223,7 @@ var bconcat = has_buf ? function(bufs) { return Buffer.concat(bufs.map(function(
|
|||
for(i = 0, maxlen = 0; i < bufs.length; maxlen += len, ++i) {
|
||||
len = bufs[i].length;
|
||||
if(bufs[i] instanceof Uint8Array) o.set(bufs[i], maxlen);
|
||||
else if(typeof bufs[i] == "string") { throw "wtf"; }
|
||||
else if(typeof bufs[i] == "string") o.set(new Uint8Array(s2a(bufs[i])), maxlen);
|
||||
else o.set(new Uint8Array(bufs[i]), maxlen);
|
||||
}
|
||||
return o;
|
||||
|
@ -2796,9 +2796,9 @@ function write_zip(cfb, options) {
|
|||
var namebuf = new_buf(fp.length);
|
||||
for(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);
|
||||
namebuf = namebuf.slice(0, namebuf.l);
|
||||
crcs[fcnt] = CRC32.buf(fi.content, 0);
|
||||
crcs[fcnt] = typeof fi.content == "string" ? CRC32.bstr(fi.content, 0) : CRC32.buf(fi.content, 0);
|
||||
|
||||
var outbuf = fi.content;
|
||||
var outbuf = typeof fi.content == "string" ? s2a(fi.content) : fi.content;
|
||||
if(method == 8) outbuf = _deflateRawSync(outbuf);
|
||||
|
||||
/* local file header */
|
||||
|
@ -4011,7 +4011,7 @@ for(i = 0; i != val.length; ++i) {
|
|||
}
|
||||
size = val.length;
|
||||
} else if(typeof $cptable !== 'undefined' && f == 'cpstr') {
|
||||
cpp = $cptable.utils.encode(current_ansi, val);
|
||||
cpp = $cptable.utils.encode(current_codepage, val);
|
||||
/* replace null bytes with _ when relevant */
|
||||
if(cpp.length == val.length) for(i = 0; i < val.length; ++i) if(cpp[i] == 0 && val.charCodeAt(i) != 0) cpp[i] = 0x5F;
|
||||
if(cpp.length == 2 * val.length) for(i = 0; i < val.length; ++i) if(cpp[2*i] == 0 && cpp[2*i+1] == 0 && val.charCodeAt(i) != 0) cpp[2*i] = 0x5F;
|
||||
|
@ -5431,7 +5431,6 @@ function write_cust_props(cp) {
|
|||
if(o.length>2){ o[o.length] = '</Properties>'; o[1]=o[1].replace("/>",">"); }
|
||||
return o.join("");
|
||||
}
|
||||
/* from js-harb (C) 2014-present SheetJS */
|
||||
var DBF_SUPPORTED_VERSIONS = [0x02, 0x03, 0x30, 0x31, 0x83, 0x8B, 0x8C, 0xF5];
|
||||
var DBF = (function() {
|
||||
var dbf_codepage_map = {
|
||||
|
@ -5671,14 +5670,14 @@ function dbf_to_workbook(buf, opts) {
|
|||
var o = sheet_to_workbook(dbf_to_sheet(buf, opts), opts);
|
||||
o.bookType = "dbf";
|
||||
return o;
|
||||
}
|
||||
catch(e) { if(opts && opts.WTF) throw e; }
|
||||
} catch(e) { if(opts && opts.WTF) throw e; }
|
||||
return ({SheetNames:[],Sheets:{}});
|
||||
}
|
||||
|
||||
var _RLEN = { 'B': 8, 'C': 250, 'L': 1, 'D': 8, '?': 0, '': 0 };
|
||||
function sheet_to_dbf(ws, opts) {
|
||||
var o = opts || {};
|
||||
var old_cp = current_codepage;
|
||||
if(+o.codepage >= 0) set_cp(+o.codepage);
|
||||
if(o.type == "string") throw new Error("Cannot write DBF to JS string");
|
||||
var ba = buf_array();
|
||||
|
@ -5741,11 +5740,17 @@ function sheet_to_dbf(ws, opts) {
|
|||
h.write_shift(2, 296 + 32 * hcnt);
|
||||
h.write_shift(2, rlen);
|
||||
for(i=0; i < 4; ++i) h.write_shift(4, 0);
|
||||
h.write_shift(4, 0x00000000 | ((+dbf_reverse_map[current_ansi] || 0x03)<<8));
|
||||
var cp = +dbf_reverse_map[current_codepage] || 0x03;
|
||||
h.write_shift(4, 0x00000000 | (cp<<8));
|
||||
if(dbf_codepage_map[cp] != +o.codepage) {
|
||||
console.error("DBF Unsupported codepage " + current_codepage + ", using 1252");
|
||||
current_codepage = 1252;
|
||||
}
|
||||
|
||||
for(i = 0, j = 0; i < headers.length; ++i) {
|
||||
if(headers[i] == null) continue;
|
||||
var hf = ba.next(32);
|
||||
/* TODO: test how applications handle non-ASCII field names */
|
||||
var _f = (headers[i].slice(-10) + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00").slice(0, 11);
|
||||
hf.write_shift(1, _f, "sbcs");
|
||||
hf.write_shift(1, coltypes[i] == '?' ? 'C' : coltypes[i], "sbcs");
|
||||
|
@ -5794,6 +5799,7 @@ function sheet_to_dbf(ws, opts) {
|
|||
}
|
||||
// data
|
||||
}
|
||||
current_codepage = old_cp;
|
||||
ba.next(1).write_shift(1, 0x1A);
|
||||
return ba.end();
|
||||
}
|
||||
|
@ -7634,7 +7640,7 @@ function parse_xlmeta_xml(data, name, opts) {
|
|||
lastmeta.offsets.push(+y.i);
|
||||
break;
|
||||
default:
|
||||
if (!pass && opts.WTF)
|
||||
if (!pass && (opts == null ? void 0 : opts.WTF))
|
||||
throw new Error("unrecognized " + y[0] + " in metadata");
|
||||
}
|
||||
return x;
|
||||
|
@ -11017,12 +11023,12 @@ function safe_parse_sheet(zip, path, relsPath, sheet, idx, sheetRels, sheets, st
|
|||
sheets[sheet] = _ws;
|
||||
|
||||
/* scan rels for comments and threaded comments */
|
||||
var tcomments = [];
|
||||
var comments = [], tcomments = [];
|
||||
if(sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function(n) {
|
||||
var dfile = "";
|
||||
if(sheetRels[sheet][n].Type == RELS.CMNT) {
|
||||
dfile = resolve_path(sheetRels[sheet][n].Target, path);
|
||||
var comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);
|
||||
comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);
|
||||
if(!comments || !comments.length) return;
|
||||
sheet_insert_comments(_ws, comments, false);
|
||||
}
|
||||
|
@ -11381,7 +11387,8 @@ f = "docProps/app.xml";
|
|||
/* TODO: something more intelligent with themes */
|
||||
|
||||
f = "xl/theme/theme1.xml";
|
||||
zip_add_file(zip, f, write_theme(wb.Themes, opts));
|
||||
var ww = write_theme(wb.Themes, opts);
|
||||
zip_add_file(zip, f, ww);
|
||||
ct.themes.push(f);
|
||||
add_rels(opts.wbrels, -1, "theme/theme1.xml", RELS.THEME);
|
||||
|
||||
|
@ -12101,10 +12108,10 @@ function sheet_add_json(_ws, js, opts) {
|
|||
if(_R == -1) { _R = 0; range.e.r = js.length - 1 + offset; }
|
||||
}
|
||||
var hdr = o.header || [], C = 0;
|
||||
|
||||
var ROW = [];
|
||||
js.forEach(function (JS, R) {
|
||||
if(!ws[_R + R + offset]) ws[_R + R + offset] = [];
|
||||
var ROW = ws[_R + R + offset];
|
||||
if(dense && !ws[_R + R + offset]) ws[_R + R + offset] = [];
|
||||
if(dense) ROW = ws[_R + R + offset];
|
||||
keys(JS).forEach(function(k) {
|
||||
if((C=hdr.indexOf(k)) == -1) hdr[C=hdr.length] = k;
|
||||
var v = JS[k];
|
||||
|
@ -12127,8 +12134,7 @@ function sheet_add_json(_ws, js, opts) {
|
|||
if(!cell) {
|
||||
if(!dense) ws[ref] = cell = ({t:t, v:v});
|
||||
else ROW[_C + C] = cell = ({t:t, v:v});
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
cell.t = t; cell.v = v;
|
||||
delete cell.w; delete cell.R;
|
||||
if(z) cell.z = z;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
/*exported XLSX */
|
||||
/*global process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */
|
||||
var XLSX = {};
|
||||
XLSX.version = '0.18.11';
|
||||
XLSX.version = '0.18.12';
|
||||
var current_codepage = 1200, current_ansi = 1252;
|
||||
/*:: declare var cptable:any; */
|
||||
/*global cptable:true, window */
|
||||
|
@ -224,7 +224,7 @@ var bconcat = has_buf ? function(bufs) { return Buffer.concat(bufs.map(function(
|
|||
for(i = 0, maxlen = 0; i < bufs.length; maxlen += len, ++i) {
|
||||
len = bufs[i].length;
|
||||
if(bufs[i] instanceof Uint8Array) o.set(bufs[i], maxlen);
|
||||
else if(typeof bufs[i] == "string") { throw "wtf"; }
|
||||
else if(typeof bufs[i] == "string") o.set(new Uint8Array(s2a(bufs[i])), maxlen);
|
||||
else o.set(new Uint8Array(bufs[i]), maxlen);
|
||||
}
|
||||
return o;
|
||||
|
@ -2862,9 +2862,9 @@ function write_zip(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes*/
|
|||
var namebuf = new_buf(fp.length);
|
||||
for(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);
|
||||
namebuf = namebuf.slice(0, namebuf.l);
|
||||
crcs[fcnt] = CRC32.buf(/*::((*/fi.content/*::||[]):any)*/, 0);
|
||||
crcs[fcnt] = typeof fi.content == "string" ? CRC32.bstr(fi.content, 0) : CRC32.buf(/*::((*/fi.content/*::||[]):any)*/, 0);
|
||||
|
||||
var outbuf = fi.content/*::||[]*/;
|
||||
var outbuf = typeof fi.content == "string" ? s2a(fi.content) : fi.content/*::||[]*/;
|
||||
if(method == 8) outbuf = _deflateRawSync(outbuf);
|
||||
|
||||
/* local file header */
|
||||
|
@ -7880,8 +7880,7 @@ function dbf_to_workbook(buf, opts)/*:Workbook*/ {
|
|||
var o = sheet_to_workbook(dbf_to_sheet(buf, opts), opts);
|
||||
o.bookType = "dbf";
|
||||
return o;
|
||||
}
|
||||
catch(e) { if(opts && opts.WTF) throw e; }
|
||||
} catch(e) { if(opts && opts.WTF) throw e; }
|
||||
return ({SheetNames:[],Sheets:{}});
|
||||
}
|
||||
|
||||
|
@ -11966,7 +11965,7 @@ function parse_xlmeta_xml(data, name, opts) {
|
|||
lastmeta.offsets.push(+y.i);
|
||||
break;
|
||||
default:
|
||||
if (!pass && opts.WTF)
|
||||
if (!pass && (opts == null ? void 0 : opts.WTF))
|
||||
throw new Error("unrecognized " + y[0] + " in metadata");
|
||||
}
|
||||
return x;
|
||||
|
@ -23133,8 +23132,11 @@ function stru8(str) {
|
|||
return typeof TextEncoder != "undefined" ? new TextEncoder().encode(str) : s2a(utf8write(str));
|
||||
}
|
||||
function u8contains(body, search) {
|
||||
var L = body.indexOf(search[0]);
|
||||
if (L == -1)
|
||||
return false;
|
||||
outer:
|
||||
for (var L = 0; L <= body.length - search.length; ++L) {
|
||||
for (; L <= body.length - search.length; ++L) {
|
||||
for (var j = 0; j < search.length; ++j)
|
||||
if (body[L + j] != search[j])
|
||||
continue outer;
|
||||
|
@ -23243,6 +23245,18 @@ function write_varint49(v) {
|
|||
}
|
||||
return usz[subarray](0, L);
|
||||
}
|
||||
function parse_packed_varints(buf) {
|
||||
var ptr = [0];
|
||||
var out = [];
|
||||
while (ptr[0] < buf.length)
|
||||
out.push(parse_varint49(buf, ptr));
|
||||
return out;
|
||||
}
|
||||
function write_packed_varints(nums) {
|
||||
return u8concat(nums.map(function(x) {
|
||||
return write_varint49(x);
|
||||
}));
|
||||
}
|
||||
function varint_to_i32(buf) {
|
||||
var l = 0, i32 = buf[l] & 127;
|
||||
varint:
|
||||
|
@ -23527,11 +23541,11 @@ function numbers_format_cell(cell, t, flags, ofmt, nfmt) {
|
|||
dur:
|
||||
if (flags & (ver > 4 ? 8 : 4) && cell.t == "n" && ctype == 7) {
|
||||
var dstyle = ((_a = fmt[7]) == null ? void 0 : _a[0]) ? parse_varint49(fmt[7][0].data) : -1;
|
||||
if (dstyle == -1)
|
||||
break dur;
|
||||
var dmin = ((_b = fmt[15]) == null ? void 0 : _b[0]) ? parse_varint49(fmt[15][0].data) : -1;
|
||||
var dmax = ((_c = fmt[16]) == null ? void 0 : _c[0]) ? parse_varint49(fmt[16][0].data) : -1;
|
||||
var auto = ((_d = fmt[40]) == null ? void 0 : _d[0]) ? parse_varint49(fmt[40][0].data) : -1;
|
||||
if (dstyle == -1)
|
||||
break dur;
|
||||
var d = cell.v, dd = d;
|
||||
autodur:
|
||||
if (auto) {
|
||||
|
@ -23711,35 +23725,30 @@ function parse_old_storage(buf, lut, v) {
|
|||
}
|
||||
function parse_new_storage(buf, lut) {
|
||||
var dv = u8_to_dataview(buf);
|
||||
var flags = dv.getUint32(8, true);
|
||||
var flags = dv.getUint32(4, true);
|
||||
var fields = dv.getUint32(8, true);
|
||||
var doff = 12;
|
||||
var ridx = -1, sidx = -1, zidx = -1, d128 = NaN, ieee = NaN, dt = new Date(2001, 0, 1);
|
||||
if (flags & 1) {
|
||||
if (fields & 1) {
|
||||
d128 = readDecimal128LE(buf, doff);
|
||||
doff += 16;
|
||||
}
|
||||
if (flags & 2) {
|
||||
if (fields & 2) {
|
||||
ieee = dv.getFloat64(doff, true);
|
||||
doff += 8;
|
||||
}
|
||||
if (flags & 4) {
|
||||
if (fields & 4) {
|
||||
dt.setTime(dt.getTime() + dv.getFloat64(doff, true) * 1e3);
|
||||
doff += 8;
|
||||
}
|
||||
if (flags & 8) {
|
||||
if (fields & 8) {
|
||||
sidx = dv.getUint32(doff, true);
|
||||
doff += 4;
|
||||
}
|
||||
if (flags & 16) {
|
||||
if (fields & 16) {
|
||||
ridx = dv.getUint32(doff, true);
|
||||
doff += 4;
|
||||
}
|
||||
doff += popcnt(flags & 8160) * 4;
|
||||
if (flags & 516096) {
|
||||
if (zidx == -1)
|
||||
zidx = dv.getUint32(doff, true);
|
||||
doff += 4;
|
||||
}
|
||||
var ret;
|
||||
var t = buf[1];
|
||||
switch (t) {
|
||||
|
@ -23764,21 +23773,22 @@ function parse_new_storage(buf, lut) {
|
|||
ret = { t: "e", v: 0 };
|
||||
break;
|
||||
case 9:
|
||||
{
|
||||
if (ridx > -1)
|
||||
ret = { t: "s", v: lut.rsst[ridx] };
|
||||
else
|
||||
throw new Error("Unsupported cell type ".concat(buf[1], " : ").concat(flags & 31, " : ").concat(buf[subarray](0, 4)));
|
||||
}
|
||||
ret = { t: "s", v: lut.rsst[ridx] };
|
||||
break;
|
||||
case 10:
|
||||
ret = { t: "n", v: d128 };
|
||||
break;
|
||||
default:
|
||||
throw new Error("Unsupported cell type ".concat(buf[1], " : ").concat(flags & 31, " : ").concat(buf[subarray](0, 4)));
|
||||
throw new Error("Unsupported cell type ".concat(buf[1], " : ").concat(fields & 31, " : ").concat(buf[subarray](0, 4)));
|
||||
}
|
||||
doff += popcnt(fields & 8160) * 4;
|
||||
if (fields & 516096) {
|
||||
if (zidx == -1)
|
||||
zidx = dv.getUint32(doff, true);
|
||||
doff += 4;
|
||||
}
|
||||
if (zidx > -1)
|
||||
numbers_format_cell(ret, t | 5 << 8, flags >> 13, lut.ofmt[zidx], lut.nfmt[zidx]);
|
||||
numbers_format_cell(ret, t | 5 << 8, fields >> 13, lut.ofmt[zidx], lut.nfmt[zidx]);
|
||||
if (t == 7)
|
||||
ret.v /= 86400;
|
||||
return ret;
|
||||
|
@ -23815,7 +23825,7 @@ function write_new_storage(cell, sst) {
|
|||
}
|
||||
function write_old_storage(cell, sst) {
|
||||
var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, flags = 0;
|
||||
out[0] = 3;
|
||||
out[0] = 4;
|
||||
switch (cell.t) {
|
||||
case "n":
|
||||
out[2] = 2;
|
||||
|
@ -23840,7 +23850,7 @@ function write_old_storage(cell, sst) {
|
|||
default:
|
||||
throw "unsupported cell type " + cell.t;
|
||||
}
|
||||
dv.setUint32(4, flags, true);
|
||||
dv.setUint32(8, flags, true);
|
||||
return out[subarray](0, l);
|
||||
}
|
||||
function parse_cell_storage(buf, lut) {
|
||||
|
@ -24196,42 +24206,26 @@ function write_tile_row(tri, data, SST, wide) {
|
|||
}
|
||||
function write_iwam(type, payload) {
|
||||
return {
|
||||
meta: [[], [{ type: 0, data: write_varint49(type) }]],
|
||||
meta: [
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(type) }]
|
||||
],
|
||||
data: payload
|
||||
};
|
||||
}
|
||||
var USE_WIDE_ROWS = true;
|
||||
function write_numbers_iwa(wb, opts) {
|
||||
var _a;
|
||||
if (!opts || !opts.numbers)
|
||||
throw new Error("Must pass a `numbers` option -- check the README");
|
||||
var ws = wb.Sheets[wb.SheetNames[0]];
|
||||
if (wb.SheetNames.length > 1)
|
||||
console.error("The Numbers writer currently writes only the first table");
|
||||
var range = decode_range(ws["!ref"]);
|
||||
range.s.r = range.s.c = 0;
|
||||
var trunc = false;
|
||||
if (range.e.c > 999) {
|
||||
trunc = true;
|
||||
range.e.c = 999;
|
||||
}
|
||||
if (range.e.r > 254) {
|
||||
trunc = true;
|
||||
range.e.r = 254;
|
||||
}
|
||||
if (trunc)
|
||||
console.error("The Numbers writer is currently limited to ".concat(encode_range(range)));
|
||||
var data = sheet_to_json(ws, { range: range, header: 1 });
|
||||
var SST = ["~Sh33tJ5~"];
|
||||
data.forEach(function(row) {
|
||||
return row.forEach(function(cell) {
|
||||
if (typeof cell == "string")
|
||||
SST.push(cell);
|
||||
});
|
||||
});
|
||||
function get_unique_msgid(dep, dependents) {
|
||||
if (!dependents.last)
|
||||
dependents.last = 927262;
|
||||
for (var i = dependents.last; i < 2e6; ++i)
|
||||
if (!dependents[i]) {
|
||||
dependents[dependents.last = i] = dep;
|
||||
return i;
|
||||
}
|
||||
throw new Error("Too many messages");
|
||||
}
|
||||
function build_numbers_deps(cfb) {
|
||||
var dependents = {};
|
||||
var indices = [];
|
||||
var cfb = CFB.read(opts.numbers, { type: "base64" });
|
||||
cfb.FileIndex.map(function(fi, idx) {
|
||||
return [fi, cfb.FullPaths[idx]];
|
||||
}).forEach(function(row) {
|
||||
|
@ -24240,30 +24234,27 @@ function write_numbers_iwa(wb, opts) {
|
|||
return;
|
||||
if (!fi.name.match(/\.iwa/))
|
||||
return;
|
||||
var old_content = fi.content;
|
||||
var raw1 = decompress_iwa_file(old_content);
|
||||
var x2 = parse_iwa_file(raw1);
|
||||
x2.forEach(function(packet2) {
|
||||
indices.push(packet2.id);
|
||||
dependents[packet2.id] = { deps: [], location: fp, type: varint_to_i32(packet2.messages[0].meta[1][0].data) };
|
||||
if (fi.name.match(/OperationStorage/))
|
||||
return;
|
||||
parse_iwa_file(decompress_iwa_file(fi.content)).forEach(function(packet) {
|
||||
indices.push(packet.id);
|
||||
dependents[packet.id] = { deps: [], location: fp, type: varint_to_i32(packet.messages[0].meta[1][0].data) };
|
||||
});
|
||||
});
|
||||
indices.sort(function(x2, y) {
|
||||
return x2 - y;
|
||||
indices.sort(function(x, y) {
|
||||
return x - y;
|
||||
});
|
||||
var indices_varint = indices.filter(function(x2) {
|
||||
return x2 > 1;
|
||||
}).map(function(x2) {
|
||||
return [x2, write_varint49(x2)];
|
||||
var indices_varint = indices.filter(function(x) {
|
||||
return x > 1;
|
||||
}).map(function(x) {
|
||||
return [x, write_varint49(x)];
|
||||
});
|
||||
cfb.FileIndex.map(function(fi, idx) {
|
||||
return [fi, cfb.FullPaths[idx]];
|
||||
}).forEach(function(row) {
|
||||
var fi = row[0];
|
||||
cfb.FileIndex.forEach(function(fi) {
|
||||
if (!fi.name.match(/\.iwa/))
|
||||
return;
|
||||
var x2 = parse_iwa_file(decompress_iwa_file(fi.content));
|
||||
x2.forEach(function(ia) {
|
||||
if (fi.name.match(/OperationStorage/))
|
||||
return;
|
||||
parse_iwa_file(decompress_iwa_file(fi.content)).forEach(function(ia) {
|
||||
indices_varint.forEach(function(ivi) {
|
||||
if (ia.messages.some(function(mess) {
|
||||
return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);
|
||||
|
@ -24273,190 +24264,130 @@ function write_numbers_iwa(wb, opts) {
|
|||
});
|
||||
});
|
||||
});
|
||||
function get_unique_msgid(dep) {
|
||||
for (var i = 927262; i < 2e6; ++i)
|
||||
if (!dependents[i]) {
|
||||
dependents[i] = dep;
|
||||
return i;
|
||||
}
|
||||
throw new Error("Too many messages");
|
||||
}
|
||||
var entry = CFB.find(cfb, dependents[1].location);
|
||||
if (!entry)
|
||||
return dependents;
|
||||
}
|
||||
function write_numbers_iwa(wb, opts) {
|
||||
if (!opts || !opts.numbers)
|
||||
throw new Error("Must pass a `numbers` option -- check the README");
|
||||
var cfb = CFB.read(opts.numbers, { type: "base64" });
|
||||
var dependents = build_numbers_deps(cfb);
|
||||
var cfb_DA = CFB.find(cfb, dependents[1].location);
|
||||
if (!cfb_DA)
|
||||
throw "Could not find ".concat(dependents[1].location, " in Numbers template");
|
||||
var x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
var docroot;
|
||||
for (var xi = 0; xi < x.length; ++xi) {
|
||||
var packet = x[xi];
|
||||
if (packet.id == 1)
|
||||
docroot = packet;
|
||||
}
|
||||
var iwa_DA = parse_iwa_file(decompress_iwa_file(cfb_DA.content));
|
||||
var docroot = iwa_DA.find(function(packet) {
|
||||
return packet.id == 1;
|
||||
});
|
||||
if (docroot == null)
|
||||
throw "Could not find message ".concat(1, " in Numbers template");
|
||||
var sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[1][0].data);
|
||||
entry = CFB.find(cfb, dependents[sheetrootref].location);
|
||||
var sheetrefs = mappa(parse_shallow(docroot.messages[0].data)[1], parse_TSP_Reference);
|
||||
wb.SheetNames.forEach(function(name, idx) {
|
||||
return write_numbers_ws(cfb, dependents, wb.Sheets[name], name, idx, sheetrefs[idx]);
|
||||
});
|
||||
return cfb;
|
||||
}
|
||||
function numbers_iwa_doit(cfb, deps, id, cb) {
|
||||
var entry = CFB.find(cfb, deps[id].location);
|
||||
if (!entry)
|
||||
throw "Could not find ".concat(dependents[sheetrootref].location, " in Numbers template");
|
||||
x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
for (xi = 0; xi < x.length; ++xi) {
|
||||
packet = x[xi];
|
||||
if (packet.id == sheetrootref)
|
||||
docroot = packet;
|
||||
}
|
||||
var sheetref = parse_shallow(docroot.messages[0].data);
|
||||
{
|
||||
sheetref[1] = [{ type: 2, data: stru8(wb.SheetNames[0]) }];
|
||||
}
|
||||
docroot.messages[0].data = write_shallow(sheetref);
|
||||
throw "Could not find ".concat(deps[id].location, " in Numbers template");
|
||||
var x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
var ainfo = x.find(function(packet) {
|
||||
return packet.id == id;
|
||||
});
|
||||
cb(ainfo, x);
|
||||
entry.content = compress_iwa_file(write_iwa_file(x));
|
||||
entry.size = entry.content.length;
|
||||
sheetrootref = parse_TSP_Reference(sheetref[2][0].data);
|
||||
entry = CFB.find(cfb, dependents[sheetrootref].location);
|
||||
}
|
||||
function numbers_iwa_find(cfb, deps, id) {
|
||||
var entry = CFB.find(cfb, deps[id].location);
|
||||
if (!entry)
|
||||
throw "Could not find ".concat(dependents[sheetrootref].location, " in Numbers template");
|
||||
x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
for (xi = 0; xi < x.length; ++xi) {
|
||||
packet = x[xi];
|
||||
if (packet.id == sheetrootref)
|
||||
docroot = packet;
|
||||
throw "Could not find ".concat(deps[id].location, " in Numbers template");
|
||||
var x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
var ainfo = x.find(function(packet) {
|
||||
return packet.id == id;
|
||||
});
|
||||
return ainfo;
|
||||
}
|
||||
function write_numbers_ws(cfb, deps, ws, wsname, sheetidx, rootref) {
|
||||
if (sheetidx >= 1)
|
||||
return console.error("The Numbers writer currently writes only the first table");
|
||||
var drawables = [];
|
||||
numbers_iwa_doit(cfb, deps, rootref, function(docroot) {
|
||||
var sheetref = parse_shallow(docroot.messages[0].data);
|
||||
{
|
||||
sheetref[1] = [{ type: 2, data: stru8(wsname) }];
|
||||
drawables = mappa(sheetref[2], parse_TSP_Reference);
|
||||
}
|
||||
docroot.messages[0].data = write_shallow(sheetref);
|
||||
});
|
||||
var tia = numbers_iwa_find(cfb, deps, drawables[0]);
|
||||
var tmaref = parse_TSP_Reference(parse_shallow(tia.messages[0].data)[2][0].data);
|
||||
numbers_iwa_doit(cfb, deps, tmaref, function(docroot, x) {
|
||||
return write_numbers_tma(cfb, deps, ws, docroot, x, tmaref);
|
||||
});
|
||||
}
|
||||
var USE_WIDE_ROWS = true;
|
||||
function write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {
|
||||
var _a, _b;
|
||||
var range = decode_range(ws["!ref"]);
|
||||
range.s.r = range.s.c = 0;
|
||||
var trunc = false;
|
||||
if (range.e.c > 999) {
|
||||
trunc = true;
|
||||
range.e.c = 999;
|
||||
}
|
||||
sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[2][0].data);
|
||||
entry = CFB.find(cfb, dependents[sheetrootref].location);
|
||||
if (!entry)
|
||||
throw "Could not find ".concat(dependents[sheetrootref].location, " in Numbers template");
|
||||
x = parse_iwa_file(decompress_iwa_file(entry.content));
|
||||
for (xi = 0; xi < x.length; ++xi) {
|
||||
packet = x[xi];
|
||||
if (packet.id == sheetrootref)
|
||||
docroot = packet;
|
||||
if (range.e.r > 999999) {
|
||||
trunc = true;
|
||||
range.e.r = 999999;
|
||||
}
|
||||
var pb = parse_shallow(docroot.messages[0].data);
|
||||
if (trunc)
|
||||
console.error("Truncating to ".concat(encode_range(range)));
|
||||
var data = sheet_to_json(ws, { range: range, header: 1 });
|
||||
var SST = ["~Sh33tJ5~"], SST_set = new Set(SST);
|
||||
data.forEach(function(row) {
|
||||
return row.forEach(function(cell) {
|
||||
if (typeof cell == "string" && !SST_set.has(cell)) {
|
||||
SST.push(cell);
|
||||
SST_set.add(cell);
|
||||
}
|
||||
});
|
||||
});
|
||||
var loc = deps[tmaref].location;
|
||||
loc = loc.replace(/^Root Entry\//, "");
|
||||
loc = loc.replace(/^Index\//, "").replace(/\.iwa$/, "");
|
||||
var pb = parse_shallow(tmaroot.messages[0].data);
|
||||
{
|
||||
pb[6][0].data = write_varint49(range.e.r + 1);
|
||||
pb[7][0].data = write_varint49(range.e.c + 1);
|
||||
var cruidsref = parse_TSP_Reference(pb[46][0].data);
|
||||
var oldbucket = CFB.find(cfb, dependents[cruidsref].location);
|
||||
if (!oldbucket)
|
||||
throw "Could not find ".concat(dependents[cruidsref].location, " in Numbers template");
|
||||
var _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));
|
||||
{
|
||||
for (var j = 0; j < _x.length; ++j) {
|
||||
if (_x[j].id == cruidsref)
|
||||
break;
|
||||
}
|
||||
if (_x[j].id != cruidsref)
|
||||
throw "Bad ColumnRowUIDMapArchive";
|
||||
var cruids = parse_shallow(_x[j].messages[0].data);
|
||||
cruids[1] = [];
|
||||
cruids[2] = [], cruids[3] = [];
|
||||
for (var C = 0; C <= range.e.c; ++C) {
|
||||
cruids[1].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(C + 420690) }],
|
||||
[{ type: 0, data: write_varint49(C + 420690) }]
|
||||
]) });
|
||||
cruids[2].push({ type: 0, data: write_varint49(C) });
|
||||
cruids[3].push({ type: 0, data: write_varint49(C) });
|
||||
}
|
||||
cruids[4] = [];
|
||||
cruids[5] = [], cruids[6] = [];
|
||||
for (var R = 0; R <= range.e.r; ++R) {
|
||||
cruids[4].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(R + 726270) }],
|
||||
[{ type: 0, data: write_varint49(R + 726270) }]
|
||||
]) });
|
||||
cruids[5].push({ type: 0, data: write_varint49(R) });
|
||||
cruids[6].push({ type: 0, data: write_varint49(R) });
|
||||
}
|
||||
_x[j].messages[0].data = write_shallow(cruids);
|
||||
}
|
||||
oldbucket.content = compress_iwa_file(write_iwa_file(_x));
|
||||
oldbucket.size = oldbucket.content.length;
|
||||
delete pb[46];
|
||||
var store = parse_shallow(pb[4][0].data);
|
||||
{
|
||||
store[7][0].data = write_varint49(range.e.r + 1);
|
||||
var row_headers = parse_shallow(store[1][0].data);
|
||||
var row_header_ref = parse_TSP_Reference(row_headers[2][0].data);
|
||||
oldbucket = CFB.find(cfb, dependents[row_header_ref].location);
|
||||
if (!oldbucket)
|
||||
throw "Could not find ".concat(dependents[cruidsref].location, " in Numbers template");
|
||||
_x = parse_iwa_file(decompress_iwa_file(oldbucket.content));
|
||||
{
|
||||
if (_x[0].id != row_header_ref)
|
||||
throw "Bad HeaderStorageBucket";
|
||||
var base_bucket = parse_shallow(_x[0].messages[0].data);
|
||||
if ((_a = base_bucket == null ? void 0 : base_bucket[2]) == null ? void 0 : _a[0])
|
||||
for (R = 0; R < data.length; ++R) {
|
||||
var row_header_ref = parse_TSP_Reference(parse_shallow(store[1][0].data)[2][0].data);
|
||||
numbers_iwa_doit(cfb, deps, row_header_ref, function(rowhead, _x) {
|
||||
var _a2;
|
||||
var base_bucket = parse_shallow(rowhead.messages[0].data);
|
||||
if ((_a2 = base_bucket == null ? void 0 : base_bucket[2]) == null ? void 0 : _a2[0])
|
||||
for (var R2 = 0; R2 < data.length; ++R2) {
|
||||
var _bucket = parse_shallow(base_bucket[2][0].data);
|
||||
_bucket[1][0].data = write_varint49(R);
|
||||
_bucket[4][0].data = write_varint49(data[R].length);
|
||||
base_bucket[2][R] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };
|
||||
_bucket[1][0].data = write_varint49(R2);
|
||||
_bucket[4][0].data = write_varint49(data[R2].length);
|
||||
base_bucket[2][R2] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };
|
||||
}
|
||||
_x[0].messages[0].data = write_shallow(base_bucket);
|
||||
}
|
||||
oldbucket.content = compress_iwa_file(write_iwa_file(_x));
|
||||
oldbucket.size = oldbucket.content.length;
|
||||
rowhead.messages[0].data = write_shallow(base_bucket);
|
||||
});
|
||||
var col_header_ref = parse_TSP_Reference(store[2][0].data);
|
||||
oldbucket = CFB.find(cfb, dependents[col_header_ref].location);
|
||||
if (!oldbucket)
|
||||
throw "Could not find ".concat(dependents[cruidsref].location, " in Numbers template");
|
||||
_x = parse_iwa_file(decompress_iwa_file(oldbucket.content));
|
||||
{
|
||||
if (_x[0].id != col_header_ref)
|
||||
throw "Bad HeaderStorageBucket";
|
||||
base_bucket = parse_shallow(_x[0].messages[0].data);
|
||||
for (C = 0; C <= range.e.c; ++C) {
|
||||
_bucket = parse_shallow(base_bucket[2][0].data);
|
||||
numbers_iwa_doit(cfb, deps, col_header_ref, function(colhead, _x) {
|
||||
var base_bucket = parse_shallow(colhead.messages[0].data);
|
||||
for (var C = 0; C <= range.e.c; ++C) {
|
||||
var _bucket = parse_shallow(base_bucket[2][0].data);
|
||||
_bucket[1][0].data = write_varint49(C);
|
||||
_bucket[4][0].data = write_varint49(range.e.r + 1);
|
||||
base_bucket[2][C] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };
|
||||
}
|
||||
_x[0].messages[0].data = write_shallow(base_bucket);
|
||||
}
|
||||
oldbucket.content = compress_iwa_file(write_iwa_file(_x));
|
||||
oldbucket.size = oldbucket.content.length;
|
||||
if (ws["!merges"]) {
|
||||
var mergeid = get_unique_msgid({
|
||||
type: 6144,
|
||||
deps: [sheetrootref],
|
||||
location: dependents[sheetrootref].location
|
||||
});
|
||||
var mergedata = [[], []];
|
||||
ws["!merges"].forEach(function(m) {
|
||||
mergedata[1].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 5, data: new Uint8Array(new Uint16Array([m.s.r, m.s.c]).buffer) }]
|
||||
]) }],
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 5, data: new Uint8Array(new Uint16Array([m.e.r - m.s.r + 1, m.e.c - m.s.c + 1]).buffer) }]
|
||||
]) }]
|
||||
]) });
|
||||
});
|
||||
store[13] = [{ type: 2, data: write_TSP_Reference(mergeid) }];
|
||||
x.push({
|
||||
id: mergeid,
|
||||
messages: [write_iwam(6144, write_shallow(mergedata))]
|
||||
});
|
||||
}
|
||||
colhead.messages[0].data = write_shallow(base_bucket);
|
||||
});
|
||||
var sstref = parse_TSP_Reference(store[4][0].data);
|
||||
(function() {
|
||||
var sentry = CFB.find(cfb, dependents[sstref].location);
|
||||
if (!sentry)
|
||||
throw "Could not find ".concat(dependents[sstref].location, " in Numbers template");
|
||||
var sx = parse_iwa_file(decompress_iwa_file(sentry.content));
|
||||
var sstroot;
|
||||
for (var sxi = 0; sxi < sx.length; ++sxi) {
|
||||
var packet2 = sx[sxi];
|
||||
if (packet2.id == sstref)
|
||||
sstroot = packet2;
|
||||
}
|
||||
if (sstroot == null)
|
||||
throw "Could not find message ".concat(sstref, " in Numbers template");
|
||||
numbers_iwa_doit(cfb, deps, sstref, function(sstroot) {
|
||||
var sstdata = parse_shallow(sstroot.messages[0].data);
|
||||
{
|
||||
sstdata[3] = [];
|
||||
|
@ -24470,62 +24401,215 @@ function write_numbers_iwa(wb, opts) {
|
|||
});
|
||||
}
|
||||
sstroot.messages[0].data = write_shallow(sstdata);
|
||||
sentry.content = compress_iwa_file(write_iwa_file(sx));
|
||||
sentry.size = sentry.content.length;
|
||||
})();
|
||||
var tile = parse_shallow(store[3][0].data);
|
||||
});
|
||||
var rbtree = parse_shallow(store[9][0].data);
|
||||
rbtree[1] = [];
|
||||
var tilestore = parse_shallow(store[3][0].data);
|
||||
{
|
||||
var t = tile[1][0];
|
||||
tile[3] = [{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }];
|
||||
var tl = parse_shallow(t.data);
|
||||
var tstride = 256;
|
||||
tilestore[2] = [{ type: 0, data: write_varint49(tstride) }];
|
||||
var tileref = parse_TSP_Reference(parse_shallow(tilestore[1][0].data)[2][0].data);
|
||||
var save_token = 0;
|
||||
{
|
||||
var tileref = parse_TSP_Reference(tl[2][0].data);
|
||||
(function() {
|
||||
var tentry = CFB.find(cfb, dependents[tileref].location);
|
||||
if (!tentry)
|
||||
throw "Could not find ".concat(dependents[tileref].location, " in Numbers template");
|
||||
var tx = parse_iwa_file(decompress_iwa_file(tentry.content));
|
||||
var tileroot;
|
||||
for (var sxi = 0; sxi < tx.length; ++sxi) {
|
||||
var packet2 = tx[sxi];
|
||||
if (packet2.id == tileref)
|
||||
tileroot = packet2;
|
||||
}
|
||||
var tiledata = parse_shallow(tileroot.messages[0].data);
|
||||
{
|
||||
delete tiledata[6];
|
||||
delete tile[7];
|
||||
var rowload = new Uint8Array(tiledata[5][0].data);
|
||||
tiledata[5] = [];
|
||||
for (var R2 = 0; R2 <= range.e.r; ++R2) {
|
||||
var tilerow = parse_shallow(rowload);
|
||||
write_tile_row(tilerow, data[R2], SST, USE_WIDE_ROWS);
|
||||
tilerow[1][0].data = write_varint49(R2);
|
||||
tiledata[5].push({ data: write_shallow(tilerow), type: 2 });
|
||||
}
|
||||
tiledata[1] = [{ type: 0, data: write_varint49(0) }];
|
||||
tiledata[2] = [{ type: 0, data: write_varint49(0) }];
|
||||
tiledata[3] = [{ type: 0, data: write_varint49(0) }];
|
||||
tiledata[4] = [{ type: 0, data: write_varint49(range.e.r + 1) }];
|
||||
tiledata[6] = [{ type: 0, data: write_varint49(5) }];
|
||||
tiledata[7] = [{ type: 0, data: write_varint49(1) }];
|
||||
tiledata[8] = [{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }];
|
||||
}
|
||||
tileroot.messages[0].data = write_shallow(tiledata);
|
||||
tentry.content = compress_iwa_file(write_iwa_file(tx));
|
||||
tentry.size = tentry.content.length;
|
||||
})();
|
||||
CFB.utils.cfb_del(cfb, deps[tileref].location);
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
var lst = mlist[3].filter(function(m) {
|
||||
return parse_varint49(parse_shallow(m.data)[1][0].data) == tileref;
|
||||
});
|
||||
if (lst && lst.length > 0)
|
||||
save_token = parse_varint49(parse_shallow(lst[0].data)[12][0].data);
|
||||
mlist[3] = mlist[3].filter(function(m) {
|
||||
return parse_varint49(parse_shallow(m.data)[1][0].data) != tileref;
|
||||
});
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a2, _b2;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a2 = mm[3]) == null ? void 0 : _a2[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6] = parent[6].filter(function(m) {
|
||||
return parse_varint49(parse_shallow(m.data)[1][0].data) != tileref;
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
}
|
||||
tilestore[1] = [];
|
||||
var ntiles = Math.ceil((range.e.r + 1) / tstride);
|
||||
for (var tidx = 0; tidx < ntiles; ++tidx) {
|
||||
var newtileid = get_unique_msgid({
|
||||
deps: [],
|
||||
location: "",
|
||||
type: 6002
|
||||
}, deps);
|
||||
deps[newtileid].location = "Root Entry/Index/Tables/Tile-".concat(newtileid, ".iwa");
|
||||
var tiledata = [
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[{ type: 0, data: write_varint49(Math.min(range.e.r + 1, (tidx + 1) * tstride)) }],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[{ type: 0, data: write_varint49(Math.min((tidx + 1) * tstride, range.e.r + 1) - tidx * tstride) }],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(5) }],
|
||||
[{ type: 0, data: write_varint49(1) }],
|
||||
[{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }]
|
||||
];
|
||||
for (var R = tidx * tstride; R <= Math.min(range.e.r, (tidx + 1) * tstride - 1); ++R) {
|
||||
var tilerow = [
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[{ type: 2, data: new Uint8Array([]) }],
|
||||
[{ type: 2, data: new Uint8Array(Array.from({ length: 510 }, function() {
|
||||
return 255;
|
||||
})) }],
|
||||
[{ type: 0, data: write_varint49(5) }],
|
||||
[{ type: 2, data: new Uint8Array([]) }],
|
||||
[{ type: 2, data: new Uint8Array(Array.from({ length: 510 }, function() {
|
||||
return 255;
|
||||
})) }],
|
||||
[{ type: 0, data: write_varint49(1) }]
|
||||
];
|
||||
write_tile_row(tilerow, data[R], SST, USE_WIDE_ROWS);
|
||||
tilerow[1][0].data = write_varint49(R - tidx * tstride);
|
||||
tiledata[5].push({ data: write_shallow(tilerow), type: 2 });
|
||||
}
|
||||
tilestore[1].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(tidx) }],
|
||||
[{ type: 2, data: write_TSP_Reference(newtileid) }]
|
||||
]) });
|
||||
var newtile = {
|
||||
id: newtileid,
|
||||
messages: [write_iwam(6002, write_shallow(tiledata))]
|
||||
};
|
||||
var tilecontent = compress_iwa_file(write_iwa_file([newtile]));
|
||||
CFB.utils.cfb_add(cfb, "/Index/Tables/Tile-".concat(newtileid, ".iwa"), tilecontent);
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
mlist[3].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newtileid) }],
|
||||
[{ type: 2, data: stru8("Tables/Tile") }],
|
||||
[{ type: 2, data: stru8("Tables/Tile-".concat(newtileid)) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[{ type: 2, data: new Uint8Array([2, 0, 0]) }],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(0) }],
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(save_token) }]
|
||||
]) });
|
||||
mlist[1] = [{ type: 0, data: write_varint49(Math.max(newtileid + 1, parse_varint49(mlist[1][0].data))) }];
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a2, _b2;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a2 = mm[3]) == null ? void 0 : _a2[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(newtileid) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
var orefs = ((_a = tmaroot.messages[0].meta[5]) == null ? void 0 : _a[0]) ? parse_packed_varints(tmaroot.messages[0].meta[5][0].data) : [];
|
||||
var orefidx = orefs.indexOf(newtileid);
|
||||
if (orefidx == -1) {
|
||||
orefs[orefidx = orefs.length] = newtileid;
|
||||
tmaroot.messages[0].meta[5] = [{ type: 2, data: write_packed_varints(orefs) }];
|
||||
}
|
||||
rbtree[1].push({ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(tidx * tstride) }],
|
||||
[{ type: 0, data: write_varint49(tidx) }]
|
||||
]) });
|
||||
}
|
||||
t.data = write_shallow(tl);
|
||||
}
|
||||
store[3][0].data = write_shallow(tile);
|
||||
store[3][0].data = write_shallow(tilestore);
|
||||
store[9][0].data = write_shallow(rbtree);
|
||||
store[10] = [{ type: 2, data: new Uint8Array([]) }];
|
||||
if (ws["!merges"]) {
|
||||
var mergeid = get_unique_msgid({
|
||||
type: 6144,
|
||||
deps: [tmaref],
|
||||
location: deps[tmaref].location
|
||||
}, deps);
|
||||
tmafile.push({
|
||||
id: mergeid,
|
||||
messages: [write_iwam(6144, write_shallow([
|
||||
[],
|
||||
ws["!merges"].map(function(m) {
|
||||
return { type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 5, data: new Uint8Array(new Uint16Array([m.s.r, m.s.c]).buffer) }]
|
||||
]) }],
|
||||
[{ type: 2, data: write_shallow([
|
||||
[],
|
||||
[{ type: 5, data: new Uint8Array(new Uint16Array([m.e.r - m.s.r + 1, m.e.c - m.s.c + 1]).buffer) }]
|
||||
]) }]
|
||||
]) };
|
||||
})
|
||||
]))]
|
||||
});
|
||||
store[13] = [{ type: 2, data: write_TSP_Reference(mergeid) }];
|
||||
numbers_iwa_doit(cfb, deps, 2, function(ai) {
|
||||
var mlist = parse_shallow(ai.messages[0].data);
|
||||
var parentidx = mlist[3].findIndex(function(m) {
|
||||
var _a2, _b2;
|
||||
var mm = parse_shallow(m.data);
|
||||
if ((_a2 = mm[3]) == null ? void 0 : _a2[0])
|
||||
return u8str(mm[3][0].data) == loc;
|
||||
if (((_b2 = mm[2]) == null ? void 0 : _b2[0]) && u8str(mm[2][0].data) == loc)
|
||||
return true;
|
||||
return false;
|
||||
});
|
||||
var parent = parse_shallow(mlist[3][parentidx].data);
|
||||
if (!parent[6])
|
||||
parent[6] = [];
|
||||
parent[6].push({
|
||||
type: 2,
|
||||
data: write_shallow([
|
||||
[],
|
||||
[{ type: 0, data: write_varint49(mergeid) }]
|
||||
])
|
||||
});
|
||||
mlist[3][parentidx].data = write_shallow(parent);
|
||||
ai.messages[0].data = write_shallow(mlist);
|
||||
});
|
||||
orefs = ((_b = tmaroot.messages[0].meta[5]) == null ? void 0 : _b[0]) ? parse_packed_varints(tmaroot.messages[0].meta[5][0].data) : [];
|
||||
orefidx = orefs.indexOf(mergeid);
|
||||
if (orefidx == -1) {
|
||||
orefs[orefidx = orefs.length] = mergeid;
|
||||
tmaroot.messages[0].meta[5] = [{ type: 2, data: write_packed_varints(orefs) }];
|
||||
}
|
||||
} else
|
||||
delete store[13];
|
||||
}
|
||||
pb[4][0].data = write_shallow(store);
|
||||
}
|
||||
docroot.messages[0].data = write_shallow(pb);
|
||||
entry.content = compress_iwa_file(write_iwa_file(x));
|
||||
entry.size = entry.content.length;
|
||||
return cfb;
|
||||
tmaroot.messages[0].data = write_shallow(pb);
|
||||
}
|
||||
function fix_opts_func(defaults/*:Array<Array<any> >*/)/*:{(o:any):void}*/ {
|
||||
return function fix_opts(opts) {
|
||||
|
@ -24611,12 +24695,12 @@ function safe_parse_sheet(zip, path/*:string*/, relsPath/*:string*/, sheet, idx/
|
|||
sheets[sheet] = _ws;
|
||||
|
||||
/* scan rels for comments and threaded comments */
|
||||
var tcomments = [];
|
||||
var comments = [], tcomments = [];
|
||||
if(sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function(n) {
|
||||
var dfile = "";
|
||||
if(sheetRels[sheet][n].Type == RELS.CMNT) {
|
||||
dfile = resolve_path(sheetRels[sheet][n].Target, path);
|
||||
var comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);
|
||||
comments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);
|
||||
if(!comments || !comments.length) return;
|
||||
sheet_insert_comments(_ws, comments, false);
|
||||
}
|
||||
|
@ -24978,7 +25062,8 @@ function write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {
|
|||
/* TODO: something more intelligent with themes */
|
||||
|
||||
f = "xl/theme/theme1.xml";
|
||||
zip_add_file(zip, f, write_theme(wb.Themes, opts));
|
||||
var ww = write_theme(wb.Themes, opts);
|
||||
zip_add_file(zip, f, ww);
|
||||
ct.themes.push(f);
|
||||
add_rels(opts.wbrels, -1, "theme/theme1.xml", RELS.THEME);
|
||||
|
||||
|
@ -25706,10 +25791,10 @@ function sheet_add_json(_ws/*:?Worksheet*/, js/*:Array<any>*/, opts)/*:Worksheet
|
|||
if(_R == -1) { _R = 0; range.e.r = js.length - 1 + offset; }
|
||||
}
|
||||
var hdr/*:Array<string>*/ = o.header || [], C = 0;
|
||||
|
||||
var ROW = [];
|
||||
js.forEach(function (JS, R/*:number*/) {
|
||||
if(!ws[_R + R + offset]) ws[_R + R + offset] = [];
|
||||
var ROW = ws[_R + R + offset];
|
||||
if(dense && !ws[_R + R + offset]) ws[_R + R + offset] = [];
|
||||
if(dense) ROW = ws[_R + R + offset];
|
||||
keys(JS).forEach(function(k) {
|
||||
if((C=hdr.indexOf(k)) == -1) hdr[C=hdr.length] = k;
|
||||
var v = JS[k];
|
||||
|
@ -25732,8 +25817,7 @@ function sheet_add_json(_ws/*:?Worksheet*/, js/*:Array<any>*/, opts)/*:Worksheet
|
|||
if(!cell) {
|
||||
if(!dense) ws[ref] = cell = ({t:t, v:v}/*:any*/);
|
||||
else ROW[_C + C] = cell = ({t:t, v:v}/*:any*/);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
cell.t = t; cell.v = v;
|
||||
delete cell.w; delete cell.R;
|
||||
if(z) cell.z = z;
|
||||
|
|
Loading…
Reference in New Issue