forked from sheetjs/sheetjs
SheetJS
e14aee3e51
- XLSX / XLSB dynamic array formulae - use Uint8Array when available in write (fixes #2539 h/t @RScherzer) - mini build cleanup to satiate webpack (fixes #2526 #2530)
89 lines
2.5 KiB
JavaScript
89 lines
2.5 KiB
JavaScript
function parse_BrtMdtinfo(data, length) {
|
|
return {
|
|
flags: data.read_shift(4),
|
|
version: data.read_shift(4),
|
|
name: parse_XLWideString(data, length - 8)
|
|
};
|
|
}
|
|
function write_BrtMdtinfo(data) {
|
|
var o = new_buf(12 + 2 * data.name.length);
|
|
o.write_shift(4, data.flags);
|
|
o.write_shift(4, data.version);
|
|
write_XLWideString(data.name, o);
|
|
return o.slice(0, o.l);
|
|
}
|
|
function write_BrtMdb(mdb) {
|
|
var o = new_buf(4 + 8 * mdb.length);
|
|
o.write_shift(4, mdb.length);
|
|
for (var i = 0; i < mdb.length; ++i) {
|
|
o.write_shift(4, mdb[i][0]);
|
|
o.write_shift(4, mdb[i][1]);
|
|
}
|
|
return o;
|
|
}
|
|
function write_BrtBeginEsfmd(cnt, name) {
|
|
var o = new_buf(8 + 2 * name.length);
|
|
o.write_shift(4, cnt);
|
|
write_XLWideString(name, o);
|
|
return o.slice(0, o.l);
|
|
}
|
|
function write_BrtBeginEsmdb(cnt, cm) {
|
|
var o = new_buf(8);
|
|
o.write_shift(4, cnt);
|
|
o.write_shift(4, cm ? 1 : 0);
|
|
return o;
|
|
}
|
|
function parse_xlmeta_bin(data, name, _opts) {
|
|
var out = { Types: [] };
|
|
var opts = _opts || {};
|
|
var state = [];
|
|
var pass = false;
|
|
recordhopper(data, function(val, R_n, RT) {
|
|
switch (RT) {
|
|
case 335:
|
|
out.Types.push({ name: val.name });
|
|
break;
|
|
case 51:
|
|
break;
|
|
case 35:
|
|
state.push(R_n);
|
|
pass = true;
|
|
break;
|
|
case 36:
|
|
state.pop();
|
|
pass = false;
|
|
break;
|
|
default:
|
|
if ((R_n || "").indexOf("Begin") > 0) {
|
|
} else if ((R_n || "").indexOf("End") > 0) {
|
|
} else if (!pass || opts.WTF && state[state.length - 1] != "BrtFRTBegin")
|
|
throw new Error("Unexpected record " + RT + " " + R_n);
|
|
}
|
|
});
|
|
return out;
|
|
}
|
|
function write_xlmeta_bin() {
|
|
var ba = buf_array();
|
|
write_record(ba, "BrtBeginMetadata");
|
|
write_record(ba, "BrtBeginEsmdtinfo", write_UInt32LE(1));
|
|
write_record(ba, "BrtMdtinfo", write_BrtMdtinfo({
|
|
name: "XLDAPR",
|
|
version: 12e4,
|
|
flags: 3496657072
|
|
}));
|
|
write_record(ba, "BrtEndEsmdtinfo");
|
|
write_record(ba, "BrtBeginEsfmd", write_BrtBeginEsfmd(1, "XLDAPR"));
|
|
write_record(ba, "BrtBeginFmd");
|
|
write_record(ba, "BrtFRTBegin", write_UInt32LE(514));
|
|
write_record(ba, "BrtBeginDynamicArrayPr", write_UInt32LE(0));
|
|
write_record(ba, "BrtEndDynamicArrayPr", writeuint16(1));
|
|
write_record(ba, "BrtFRTEnd");
|
|
write_record(ba, "BrtEndFmd");
|
|
write_record(ba, "BrtEndEsfmd");
|
|
write_record(ba, "BrtBeginEsmdb", write_BrtBeginEsmdb(1, true));
|
|
write_record(ba, "BrtMdb", write_BrtMdb([[1, 0]]));
|
|
write_record(ba, "BrtEndEsmdb");
|
|
write_record(ba, "BrtEndMetadata");
|
|
return ba.end();
|
|
}
|