forked from sheetjs/sheetjs
SheetJS
6bc24374b9
- parsexmltag and other hot functions now better optimized for v8 - monomorphic functions (different types -> different funcs) - more efficient decode_range implementation when source is trusted - regular expressions cached and simplified without breaking correctness - more efficient utf8 techniques when available - XLSX: large functions broken down into sub-functions (e.g. `parse_ws_xml`) - XLSB: avoid unnecessary binds - XLSB: assume no exotic codepage exists (no one else tries to write XLSB) - demo exposes rABS / worker / transferable options - more tests - jszip updated to 2.3.0 - SSF updated to 0.8.1 - codepage updated to 1.3.1
50 lines
1.7 KiB
JavaScript
50 lines
1.7 KiB
JavaScript
var strs = {}; // shared strings
|
|
var _ssfopts = {}; // spreadsheet formatting options
|
|
|
|
RELS.WS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet";
|
|
|
|
function get_sst_id(sst, str) {
|
|
for(var i = 0; i != sst.length; ++i) if(sst[i].t === str) { sst.Count ++; return i; }
|
|
sst[sst.length] = {t:str}; sst.Count ++; sst.Unique ++; return sst.length-1;
|
|
}
|
|
|
|
function get_cell_style(styles, cell, opts) {
|
|
var z = opts.revssf[cell.z != null ? cell.z : "General"];
|
|
for(var i = 0; i != styles.length; ++i) if(styles[i].numFmtId === z) return i;
|
|
styles[styles.length] = {
|
|
numFmtId:z,
|
|
fontId:0,
|
|
fillId:0,
|
|
borderId:0,
|
|
xfId:0,
|
|
applyNumberFormat:1
|
|
};
|
|
return styles.length-1;
|
|
}
|
|
|
|
function safe_format(p, fmtid, fillid, opts) {
|
|
try {
|
|
if(fmtid === 0) {
|
|
if(p.t === 'n') {
|
|
if((p.v|0) === p.v) p.w = SSF._general_int(p.v,_ssfopts);
|
|
else p.w = SSF._general_num(p.v,_ssfopts);
|
|
}
|
|
else if(p.v === undefined) return "";
|
|
else p.w = SSF._general(p.v,_ssfopts);
|
|
}
|
|
else p.w = SSF.format(fmtid,p.v,_ssfopts);
|
|
if(opts.cellNF) p.z = SSF._table[fmtid];
|
|
} catch(e) { if(opts.WTF) throw e; }
|
|
if(fillid) try {
|
|
p.s = styles.Fills[fillid];
|
|
if (p.s.fgColor && p.s.fgColor.theme) {
|
|
p.s.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb, p.s.fgColor.tint || 0);
|
|
if(opts.WTF) p.s.fgColor.raw_rgb = themes.themeElements.clrScheme[p.s.fgColor.theme].rgb;
|
|
}
|
|
if (p.s.bgColor && p.s.bgColor.theme) {
|
|
p.s.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb, p.s.bgColor.tint || 0);
|
|
if(opts.WTF) p.s.bgColor.raw_rgb = themes.themeElements.clrScheme[p.s.bgColor.theme].rgb;
|
|
}
|
|
} catch(e) { if(opts.WTF) throw e; }
|
|
}
|