forked from sheetjs/sheetjs
updating to 0.10.4
This commit is contained in:
parent
6ae28696f2
commit
dffbba8ee1
@ -139,7 +139,7 @@ function parsetest(x, wb, full, ext) {
|
||||
if(fs.existsSync(sname)) it('should have the right sheet names', function() {
|
||||
var file = fs.readFileSync(sname, 'utf-8').replace(/\r/g,"");
|
||||
var names = wb.SheetNames.map(fixsheetname).join("\n") + "\n";
|
||||
if(file.length) assert.equal(names, file);
|
||||
if(file.length && !x.match(/artifacts/)) assert.equal(names, file);
|
||||
});
|
||||
});
|
||||
describe(x + ext + ' should generate CSV', function() {
|
||||
@ -826,8 +826,9 @@ describe('parse features', function() {
|
||||
var wb2 = X.read(fs.readFileSync(paths.fstxlsb), opts);
|
||||
var wb3 = X.read(fs.readFileSync(paths.fstxls), opts);
|
||||
var wb4 = X.read(fs.readFileSync(paths.fstxml), opts);
|
||||
var wb5 = X.read(fs.readFileSync(paths.fstods), opts);
|
||||
/* TODO */
|
||||
[wb1, wb2 /*, wb3, wb4 */].forEach(function(wb) {
|
||||
[wb1, wb2 /*, wb3, wb4, wb5 */].forEach(function(wb) {
|
||||
assert.equal(wb.Sheets.Text["!fullref"],"A1:F49");
|
||||
assert.equal(wb.Sheets.Text["!ref"],"A1:F10");
|
||||
});
|
||||
@ -1496,10 +1497,12 @@ describe('invalid files', function() {
|
||||
});
|
||||
});
|
||||
|
||||
var basedate = new Date(1899, 11, 30, 0, 0, 0); // 2209161600000
|
||||
var dnthresh = basedate.getTime() + (new Date().getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000;
|
||||
function datenum(v/*:Date*/, date1904/*:?boolean*/)/*:number*/ {
|
||||
var epoch = v.getTime();
|
||||
if(date1904) epoch += 1462*24*60*60*1000;
|
||||
return (epoch + 2209161600000) / (24 * 60 * 60 * 1000);
|
||||
return (epoch - dnthresh) / (24 * 60 * 60 * 1000);
|
||||
}
|
||||
var good_pd_date = new Date('2017-02-19T19:06:09.000Z');
|
||||
if(isNaN(good_pd_date.getFullYear())) good_pd_date = new Date('2/19/17');
|
||||
@ -1695,7 +1698,17 @@ describe('csv', function() {
|
||||
var cell = get_cell(X.read(b, opts).Sheets.Sheet1, "C3");
|
||||
assert.equal(cell.w, '14-02-19');
|
||||
});
|
||||
|
||||
it('should interpret dateNF', function() {
|
||||
var bb = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,2/3/14,0.3\n,,,\nbaz,,qux,\n";
|
||||
var opts = {type:"binary", cellDates:true, dateNF:'m/d/yy'};
|
||||
var cell = get_cell(X.read(bb, opts).Sheets.Sheet1, "C3");
|
||||
assert.equal(cell.v.getMonth(), 1);
|
||||
assert.equal(cell.w, "2/3/14");
|
||||
opts = {type:"binary", cellDates:true, dateNF:'d/m/yy'};
|
||||
cell = get_cell(X.read(bb, opts).Sheets.Sheet1, "C3");
|
||||
assert.equal(cell.v.getMonth(), 2);
|
||||
assert.equal(cell.w, "2/3/14");
|
||||
});
|
||||
});
|
||||
describe('output', function(){
|
||||
var data, ws;
|
||||
|
30
xlsx.core.min.js
vendored
30
xlsx.core.min.js
vendored
File diff suppressed because one or more lines are too long
30
xlsx.full.min.js
vendored
30
xlsx.full.min.js
vendored
File diff suppressed because one or more lines are too long
232
xlsx.js
232
xlsx.js
@ -6,7 +6,7 @@
|
||||
/*global global, exports, module, require:false, process:false, Buffer:false */
|
||||
var XLSX = {};
|
||||
(function make_xlsx(XLSX){
|
||||
XLSX.version = '0.10.3';
|
||||
XLSX.version = '0.10.4';
|
||||
var current_codepage = 1200;
|
||||
/*global cptable:true */
|
||||
if(typeof module !== "undefined" && typeof require !== 'undefined') {
|
||||
@ -967,6 +967,33 @@ var XLMLFormatMap/*{[string]:string}*/ = ({
|
||||
"On/Off": '"Yes";"Yes";"No";@'
|
||||
});
|
||||
|
||||
/* dateNF parse TODO: move to SSF */
|
||||
var dateNFregex = /[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;
|
||||
function dateNF_regex(dateNF) {
|
||||
var fmt = typeof dateNF == "number" ? SSF._table[dateNF] : dateNF;
|
||||
fmt = fmt.replace(dateNFregex, "(\\d+)");
|
||||
return new RegExp("^" + fmt + "$");
|
||||
}
|
||||
function dateNF_fix(str, dateNF, match) {
|
||||
var Y = -1, m = -1, d = -1, H = -1, M = -1, S = -1;
|
||||
(dateNF.match(dateNFregex)||[]).forEach(function(n, i) {
|
||||
var v = parseInt(match[i+1], 10);
|
||||
switch(n.toLowerCase().charAt(0)) {
|
||||
case 'y': Y = v; break; case 'd': d = v; break;
|
||||
case 'h': H = v; break; case 's': S = v; break;
|
||||
case 'm': if(H >= 0) M = v; else m = v; break;
|
||||
}
|
||||
});
|
||||
if(S >= 0 && M == -1 && m >= 0) { M = m; m = -1; }
|
||||
var datestr = (("" + (Y>=0?Y: new Date().getFullYear())).slice(-4) + "-" + ("00" + (m>=1?m:1)).slice(-2) + "-" + ("00" + (d>=1?d:1)).slice(-2));
|
||||
if(datestr.length == 7) datestr = "0" + datestr;
|
||||
if(datestr.length == 8) datestr = "20" + datestr;
|
||||
var timestr = (("00" + (H>=0?H:0)).slice(-2) + ":" + ("00" + (M>=0?M:0)).slice(-2) + ":" + ("00" + (S>=0?S:0)).slice(-2));
|
||||
if(H == -1 && M == -1 && S == -1) return datestr;
|
||||
if(Y == -1 && m == -1 && d == -1) return timestr;
|
||||
return datestr + "T" + timestr;
|
||||
}
|
||||
|
||||
var DO_NOT_EXPORT_CFB = true;
|
||||
/* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */
|
||||
/* vim: set ts=2: */
|
||||
@ -1385,22 +1412,17 @@ function evert_arr(obj) {
|
||||
return o;
|
||||
}
|
||||
|
||||
var basedate = new Date(1899, 11, 30, 0, 0, 0); // 2209161600000
|
||||
var dnthresh = basedate.getTime() + (new Date().getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000;
|
||||
function datenum(v, date1904) {
|
||||
var epoch = v.getTime();
|
||||
if(date1904) epoch += 1462*24*60*60*1000;
|
||||
return (epoch + 2209161600000) / (24 * 60 * 60 * 1000);
|
||||
return (epoch - dnthresh) / (24 * 60 * 60 * 1000);
|
||||
}
|
||||
function numdate(v) {
|
||||
var date = SSF.parse_date_code(v);
|
||||
var val = new Date();
|
||||
if(date == null) throw new Error("Bad Date Code: " + v);
|
||||
val.setUTCDate(date.d);
|
||||
val.setUTCMonth(date.m-1);
|
||||
val.setUTCFullYear(date.y);
|
||||
val.setUTCHours(date.H);
|
||||
val.setUTCMinutes(date.M);
|
||||
val.setUTCSeconds(date.S);
|
||||
return val;
|
||||
var out = new Date();
|
||||
out.setTime(v * 24 * 60 * 60 * 1000 + dnthresh);
|
||||
return out;
|
||||
}
|
||||
|
||||
/* ISO 8601 Duration */
|
||||
@ -1433,9 +1455,14 @@ function parse_isodur(s) {
|
||||
var good_pd_date = new Date('2017-02-19T19:06:09.000Z');
|
||||
if(isNaN(good_pd_date.getFullYear())) good_pd_date = new Date('2/19/17');
|
||||
var good_pd = good_pd_date.getFullYear() == 2017;
|
||||
function parseDate(str) {
|
||||
/* parses aa date as a local date */
|
||||
function parseDate(str, fixdate) {
|
||||
var d = new Date(str);
|
||||
if(good_pd) return d;
|
||||
if(good_pd) {
|
||||
if(fixdate > 0) d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1000);
|
||||
else if(fixdate < 0) d.setTime(d.getTime() - d.getTimezoneOffset() * 60 * 1000);
|
||||
return d;
|
||||
}
|
||||
if(str instanceof Date) return str;
|
||||
if(good_pd_date.getFullYear() == 1917 && !isNaN(d.getFullYear())) {
|
||||
var s = d.getFullYear();
|
||||
@ -1443,7 +1470,7 @@ function parseDate(str) {
|
||||
d.setFullYear(d.getFullYear() + 100); return d;
|
||||
}
|
||||
var n = str.match(/\d+/g)||["2017","2","19","0","0","0"];
|
||||
return new Date(Date.UTC(+n[0], +n[1] - 1, +n[2], (+n[3]||0), (+n[4]||0), (+n[5]||0)));
|
||||
return new Date(+n[0], +n[1] - 1, +n[2], (+n[3]||0), (+n[4]||0), (+n[5]||0));
|
||||
}
|
||||
|
||||
function cc2str(arr) {
|
||||
@ -1630,7 +1657,7 @@ var xlml_unfixstr = (function() {
|
||||
|
||||
function parsexmlbool(value, tag) {
|
||||
switch(value) {
|
||||
case '1': case 'true': case 'TRUE': return true;
|
||||
case 1: case true: case '1': case 'true': case 'TRUE': return true;
|
||||
/* case '0': case 'false': case 'FALSE':*/
|
||||
default: return false;
|
||||
}
|
||||
@ -5605,6 +5632,7 @@ var PRN = (function() {
|
||||
var R = 0, C = 0, v = 0;
|
||||
var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0;
|
||||
str = str.replace(/\r\n/mg, "\n");
|
||||
var _re = o.dateNF != null ? dateNF_regex(o.dateNF) : null;
|
||||
function finish_cell() {
|
||||
var s = str.slice(start, end);
|
||||
var cell = ({});
|
||||
@ -5612,10 +5640,12 @@ var PRN = (function() {
|
||||
else if(s == "TRUE") { cell.t = 'b'; cell.v = true; }
|
||||
else if(s == "FALSE") { cell.t = 'b'; cell.v = false; }
|
||||
else if(!isNaN(v = +s)) { cell.t = 'n'; cell.w = s; cell.v = v; }
|
||||
else if(!isNaN(fuzzydate(s).getDate())) {
|
||||
else if(!isNaN(fuzzydate(s).getDate()) || _re && s.match(_re)) {
|
||||
cell.z = o.dateNF || SSF._table[14];
|
||||
if(o.cellDates) { cell.t = 'd'; cell.v = parseDate(s); }
|
||||
else { cell.t = 'n'; cell.v = datenum(parseDate(s)); }
|
||||
var k = 0;
|
||||
if(_re && s.match(_re)){ s=dateNF_fix(s, o.dateNF, (s.match(_re)||[])); k=1; }
|
||||
if(o.cellDates) { cell.t = 'd'; cell.v = parseDate(s, k); }
|
||||
else { cell.t = 'n'; cell.v = datenum(parseDate(s, k)); }
|
||||
cell.w = SSF.format(cell.z, cell.v instanceof Date ? datenum(cell.v):cell.v);
|
||||
} else {
|
||||
cell.t = 's';
|
||||
@ -10784,7 +10814,7 @@ function write_ws_xml_cell(cell, ref, ws, opts, idx, wb) {
|
||||
case 'n': vv = ''+cell.v; break;
|
||||
case 'e': vv = BErr[cell.v]; break;
|
||||
case 'd':
|
||||
if(opts.cellDates) vv = parseDate(cell.v).toISOString();
|
||||
if(opts.cellDates) vv = parseDate(cell.v, -1).toISOString();
|
||||
else {
|
||||
cell.t = 'n';
|
||||
vv = ''+(cell.v = datenum(parseDate(cell.v)));
|
||||
@ -10937,7 +10967,8 @@ return function parse_ws_xml_data(sdata, s, opts, guess, themes, styles) {
|
||||
break;
|
||||
case 'b': p.v = parsexmlbool(p.v); break;
|
||||
case 'd':
|
||||
if(!opts.cellDates) { p.v = datenum(parseDate(p.v)); p.t = 'n'; }
|
||||
if(opts.cellDates) p.v = parseDate(p.v, 1);
|
||||
else { p.v = datenum(parseDate(p.v, 1)); p.t = 'n'; }
|
||||
break;
|
||||
/* error string in .w, number in .v */
|
||||
case 'e':
|
||||
@ -10954,9 +10985,7 @@ return function parse_ws_xml_data(sdata, s, opts, guess, themes, styles) {
|
||||
}
|
||||
}
|
||||
safe_format(p, fmtid, fillid, opts, themes, styles);
|
||||
if(opts.cellDates && do_format && p.t == 'n' && SSF.is_date(SSF._table[fmtid])) {
|
||||
var _d = SSF.parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(Date.UTC(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u)); }
|
||||
}
|
||||
if(opts.cellDates && do_format && p.t == 'n' && SSF.is_date(SSF._table[fmtid])) { p.t = 'd'; p.v = numdate(p.v); }
|
||||
if(dense) {
|
||||
var _r = decode_cell(tag.r);
|
||||
if(!s[_r.r]) s[_r.r] = [];
|
||||
@ -11572,7 +11601,7 @@ function parse_ws_bin(data, _opts, rels, wb, themes, styles) {
|
||||
if(refguess.e.r < row.r) refguess.e.r = row.r;
|
||||
if(refguess.e.c < C) refguess.e.c = C;
|
||||
if(opts.cellDates && cf && p.t == 'n' && SSF.is_date(SSF._table[cf.ifmt])) {
|
||||
var _d = SSF.parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(Date.UTC(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u)); }
|
||||
var _d = SSF.parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }
|
||||
}
|
||||
break;
|
||||
|
||||
@ -12054,38 +12083,37 @@ function write_cs_bin(idx, opts, wb, rels) {
|
||||
}
|
||||
/* 18.2.28 (CT_WorkbookProtection) Defaults */
|
||||
var WBPropsDef = [
|
||||
['allowRefreshQuery', '0'],
|
||||
['autoCompressPictures', '1'],
|
||||
['backupFile', '0'],
|
||||
['checkCompatibility', '0'],
|
||||
['codeName', ''],
|
||||
['date1904', '0'],
|
||||
['dateCompatibility', '1'],
|
||||
//['defaultThemeVersion', '0'],
|
||||
['filterPrivacy', '0'],
|
||||
['hidePivotFieldList', '0'],
|
||||
['promptedSolutions', '0'],
|
||||
['publishItems', '0'],
|
||||
['refreshAllConnections', false],
|
||||
['saveExternalLinkValues', '1'],
|
||||
['showBorderUnselectedTables', '1'],
|
||||
['showInkAnnotation', '1'],
|
||||
['showObjects', 'all'],
|
||||
['showPivotChartFilter', '0']
|
||||
//['updateLinks', 'userSet']
|
||||
['allowRefreshQuery', false, "bool"],
|
||||
['autoCompressPictures', true, "bool"],
|
||||
['backupFile', false, "bool"],
|
||||
['checkCompatibility', false, "bool"],
|
||||
['codeName', ''],
|
||||
['date1904', false, "bool"],
|
||||
['defaultThemeVersion', 0, "int"],
|
||||
['filterPrivacy', false, "bool"],
|
||||
['hidePivotFieldList', false, "bool"],
|
||||
['promptedSolutions', false, "bool"],
|
||||
['publishItems', false, "bool"],
|
||||
['refreshAllConnections', false, "bool"],
|
||||
['saveExternalLinkValues', true, "bool"],
|
||||
['showBorderUnselectedTables', true, "bool"],
|
||||
['showInkAnnotation', true, "bool"],
|
||||
['showObjects', 'all'],
|
||||
['showPivotChartFilter', false, "bool"],
|
||||
['updateLinks', 'userSet']
|
||||
];
|
||||
|
||||
/* 18.2.30 (CT_BookView) Defaults */
|
||||
var WBViewDef = [
|
||||
['activeTab', '0'],
|
||||
['autoFilterDateGrouping', '1'],
|
||||
['firstSheet', '0'],
|
||||
['minimized', '0'],
|
||||
['showHorizontalScroll', '1'],
|
||||
['showSheetTabs', '1'],
|
||||
['showVerticalScroll', '1'],
|
||||
['tabRatio', '600'],
|
||||
['visibility', 'visible']
|
||||
['activeTab', 0, "int"],
|
||||
['autoFilterDateGrouping', true, "bool"],
|
||||
['firstSheet', 0, "int"],
|
||||
['minimized', false, "bool"],
|
||||
['showHorizontalScroll', true, "bool"],
|
||||
['showSheetTabs', true, "bool"],
|
||||
['showVerticalScroll', true, "bool"],
|
||||
['tabRatio', 600, "int"],
|
||||
['visibility', 'visible']
|
||||
//window{Height,Width}, {x,y}Window
|
||||
];
|
||||
|
||||
@ -12134,12 +12162,20 @@ function push_defaults_array(target, defaults) {
|
||||
for(var j = 0; j != target.length; ++j) { var w = target[j];
|
||||
for(var i=0; i != defaults.length; ++i) { var z = defaults[i];
|
||||
if(w[z[0]] == null) w[z[0]] = z[1];
|
||||
else switch(z[2]) {
|
||||
case "bool": if(typeof w[z[0]] == "string") w[z[0]] = parsexmlbool(w[z[0]], z[0]); break;
|
||||
case "int": if(typeof w[z[0]] == "string") w[z[0]] = parseInt(w[z[0]], 10); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
function push_defaults(target, defaults) {
|
||||
for(var i = 0; i != defaults.length; ++i) { var z = defaults[i];
|
||||
if(target[z[0]] == null) target[z[0]] = z[1];
|
||||
else switch(z[2]) {
|
||||
case "bool": if(typeof target[z[0]] == "string") target[z[0]] = parsexmlbool(target[z[0]], z[0]); break;
|
||||
case "int": if(typeof target[z[0]] == "string") target[z[0]] = parseInt(target[z[0]], 10); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -12153,6 +12189,13 @@ function parse_wb_defaults(wb) {
|
||||
_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904, 'date1904');
|
||||
}
|
||||
|
||||
function safe1904(wb) {
|
||||
/* TODO: store date1904 somewhere else */
|
||||
if(!wb.Workbook) return "false";
|
||||
if(!wb.Workbook.WBProps) return "false";
|
||||
return parsexmlbool(wb.Workbook.WBProps.date1904) ? "true" : "false";
|
||||
}
|
||||
|
||||
var badchars = "][*?\/\\".split("");
|
||||
function check_ws_name(n, safe) {
|
||||
if(n.length > 31) { if(safe) return false; throw new Error("Sheet names cannot exceed 31 chars"); }
|
||||
@ -12203,8 +12246,17 @@ function parse_wb_xml(data, opts) {
|
||||
case '<fileSharing': case '<fileSharing/>': break;
|
||||
|
||||
/* 18.2.28 workbookPr CT_WorkbookPr ? */
|
||||
case '<workbookPr': delete y[0]; wb.WBProps = y; break;
|
||||
case '<workbookPr/>': delete y[0]; wb.WBProps = y; break;
|
||||
case '<workbookPr':
|
||||
case '<workbookPr/>':
|
||||
WBPropsDef.forEach(function(w) {
|
||||
if(y[w[0]] == null) return;
|
||||
switch(w[2]) {
|
||||
case "bool": wb.WBProps[w[0]] = parsexmlbool(y[w[0]], w[0]); break;
|
||||
case "int": wb.WBProps[w[0]] = parseInt(y[w[0]], 10); break;
|
||||
default: wb.WBProps[w[0]] = y[w[0]];
|
||||
}
|
||||
});
|
||||
break;
|
||||
case '</workbookPr>': break;
|
||||
|
||||
/* 18.2.29 workbookProtection CT_WorkbookProtection ? */
|
||||
@ -12325,14 +12377,6 @@ var WB_XML_ROOT = writextag('workbook', null, {
|
||||
'xmlns:r': XMLNS.r
|
||||
});
|
||||
|
||||
function safe1904(wb) {
|
||||
/* TODO: store date1904 somewhere else */
|
||||
if(!wb.Workbook) return "false";
|
||||
if(!wb.Workbook.WBProps) return "false";
|
||||
// $FlowIgnore
|
||||
return parsexmlbool(wb.Workbook.WBProps.date1904) ? "true" : "false";
|
||||
}
|
||||
|
||||
function write_wb_xml(wb, opts) {
|
||||
var o = [XML_HEADER];
|
||||
o[o.length] = WB_XML_ROOT;
|
||||
@ -12342,7 +12386,16 @@ function write_wb_xml(wb, opts) {
|
||||
/* fileVersion */
|
||||
/* fileSharing */
|
||||
|
||||
o[o.length] = (writextag('workbookPr', null, {date1904:safe1904(wb), codeName:"ThisWorkbook"}));
|
||||
var workbookPr = ({codeName:"ThisWorkbook"});
|
||||
if(wb.Workbook && wb.Workbook.WBProps) {
|
||||
if(wb.Workbook.WBProps.codeName) workbookPr.codeName = wb.Workbook.WBProps.codeName;
|
||||
WBPropsDef.forEach(function(x) {
|
||||
if((wb.Workbook.WBProps[x[0]]) == null) return;
|
||||
if((wb.Workbook.WBProps[x[0]]) == x[1]) return;
|
||||
workbookPr[x[0]] = (wb.Workbook.WBProps[x[0]]);
|
||||
});
|
||||
}
|
||||
o[o.length] = (writextag('workbookPr', null, workbookPr));
|
||||
|
||||
/* workbookProtection */
|
||||
/* bookViews */
|
||||
@ -12410,14 +12463,36 @@ function write_BrtBundleSh(data, o) {
|
||||
|
||||
/* [MS-XLSB] 2.4.807 BrtWbProp */
|
||||
function parse_BrtWbProp(data, length) {
|
||||
data.read_shift(4);
|
||||
var dwThemeVersion = data.read_shift(4);
|
||||
var o = ({});
|
||||
var flags = data.read_shift(4);
|
||||
o.defaultThemeVersion = data.read_shift(4);
|
||||
var strName = (length > 8) ? parse_XLWideString(data) : "";
|
||||
return [dwThemeVersion, strName];
|
||||
if(strName.length > 0) o.codeName = strName;
|
||||
o.autoCompressPictures = !!(flags & 0x10000);
|
||||
o.backupFile = !!(flags & 0x40);
|
||||
o.checkCompatibility = !!(flags & 0x1000);
|
||||
o.date1904 = !!(flags & 0x01);
|
||||
o.filterPrivacy = !!(flags & 0x08);
|
||||
o.hidePivotFieldList = !!(flags & 0x400);
|
||||
o.promptedSolutions = !!(flags & 0x10);
|
||||
o.publishItems = !!(flags & 0x800);
|
||||
o.refreshAllConnections = !!(flags & 0x40000);
|
||||
o.saveExternalLinkValues = !!(flags & 0x80);
|
||||
o.showBorderUnselectedTables = !!(flags & 0x04);
|
||||
o.showInkAnnotation = !!(flags & 0x20);
|
||||
o.showObjects = ["all", "placeholders", "none"][(flags >> 13) & 0x03];
|
||||
o.showPivotChartFilter = !!(flags & 0x8000);
|
||||
o.updateLinks = ["userSet", "never", "always"][(flags >> 8) & 0x03];
|
||||
return o;
|
||||
}
|
||||
function write_BrtWbProp(data, o) {
|
||||
if(!o) o = new_buf(72);
|
||||
o.write_shift(4, 0);
|
||||
var flags = 0;
|
||||
if(data) {
|
||||
/* TODO: mirror parse_BrtWbProp fields */
|
||||
if(data.filterPrivacy) flags |= 0x08;
|
||||
}
|
||||
o.write_shift(4, flags);
|
||||
o.write_shift(4, 0);
|
||||
write_XLSBCodeName("ThisWorkbook", o);
|
||||
return o.slice(0, o.l);
|
||||
@ -12477,6 +12552,9 @@ function parse_wb_bin(data, opts) {
|
||||
break;
|
||||
case 0x040C: /* 'BrtNameExt' */ break;
|
||||
|
||||
case 0x0099: /* 'BrtWbProp' */
|
||||
wb.WBProps = val; break;
|
||||
|
||||
/* case 'BrtModelTimeGroupingCalcCol' */
|
||||
/* case 'BrtRevisionPtr' */
|
||||
/* case 'BrtUid' */
|
||||
@ -12508,7 +12586,6 @@ function parse_wb_bin(data, opts) {
|
||||
case 0x0822: /* 'BrtTimelineCachePivotCacheID' */
|
||||
case 0x018D: /* 'BrtUserBookView' */
|
||||
case 0x009A: /* 'BrtWbFactoid' */
|
||||
case 0x0099: /* 'BrtWbProp' */
|
||||
case 0x045D: /* 'BrtWbProp14' */
|
||||
case 0x0229: /* 'BrtWebOpt' */
|
||||
case 0x082B: /* 'BrtWorkBookPr15' */
|
||||
@ -12619,7 +12696,7 @@ function write_wb_bin(wb, opts) {
|
||||
write_record(ba, "BrtBeginBook");
|
||||
write_record(ba, "BrtFileVersion", write_BrtFileVersion());
|
||||
/* [[BrtFileSharingIso] BrtFileSharing] */
|
||||
write_record(ba, "BrtWbProp", write_BrtWbProp());
|
||||
write_record(ba, "BrtWbProp", write_BrtWbProp(wb.Workbook && wb.Workbook.WBProps || null));
|
||||
/* [ACABSPATH] */
|
||||
/* [[BrtBookProtectionIso] BrtBookProtection] */
|
||||
write_BOOKVIEWS(ba, wb, opts);
|
||||
@ -12793,7 +12870,7 @@ function safe_format_xlml(cell, nf, o) {
|
||||
var z = XLMLFormatMap[nf]||nf||"General";
|
||||
if(o.cellNF) cell.z = z;
|
||||
if(o.cellDates && cell.t == 'n' && SSF.is_date(z)) {
|
||||
var _d = SSF.parse_date_code(cell.v); if(_d) { cell.t = 'd'; cell.v = new Date(Date.UTC(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u)); }
|
||||
var _d = SSF.parse_date_code(cell.v); if(_d) { cell.t = 'd'; cell.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }
|
||||
}
|
||||
} catch(e) { if(o.WTF) throw e; }
|
||||
}
|
||||
@ -12910,7 +12987,7 @@ function parse_xlml_xml(d, opts) {
|
||||
var cstys = [], csty, seencol = false;
|
||||
var arrayf = [];
|
||||
var rowinfo = [], rowobj = {};
|
||||
var Workbook = { Sheets:[] }, wsprops = {};
|
||||
var Workbook = ({ Sheets:[], WBProps:{date1904:false} }), wsprops = {};
|
||||
xlmlregex.lastIndex = 0;
|
||||
str = str.replace(/<!--([^\u2603]*?)-->/mg,"");
|
||||
while((Rn = xlmlregex.exec(str))) switch(Rn[3]) {
|
||||
@ -13190,6 +13267,9 @@ Workbook.Names.push(_DefinedName);
|
||||
|
||||
/* ExcelWorkbook */
|
||||
case 'ExcelWorkbook': switch(Rn[3]) {
|
||||
case 'Date1904':
|
||||
Workbook.WBProps.date1904 = true;
|
||||
break;
|
||||
case 'WindowHeight': break;
|
||||
case 'WindowWidth': break;
|
||||
case 'WindowTopX': break;
|
||||
@ -13208,7 +13288,6 @@ Workbook.Names.push(_DefinedName);
|
||||
case 'Dll': break;
|
||||
case 'AcceptLabelsInFormulas': break;
|
||||
case 'DoNotSaveLinkValues': break;
|
||||
case 'Date1904': break;
|
||||
case 'Iteration': break;
|
||||
case 'MaxIterations': break;
|
||||
case 'MaxChange': break;
|
||||
@ -13868,7 +13947,7 @@ function safe_format_xf(p, opts, date1904) {
|
||||
}
|
||||
else p.w = SSF.format(fmtid,p.v, {date1904:!!date1904});
|
||||
if(opts.cellDates && fmtid && p.t == 'n' && SSF.is_date(SSF._table[fmtid])) {
|
||||
var _d = SSF.parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(Date.UTC(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u)); }
|
||||
var _d = SSF.parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }
|
||||
}
|
||||
} catch(e) { if(opts.WTF) throw e; }
|
||||
}
|
||||
@ -13898,7 +13977,7 @@ function parse_workbook(blob, options) {
|
||||
var cell_valid = true;
|
||||
var XFs = []; /* XF records */
|
||||
var palette = [];
|
||||
var Workbook = ({ Sheets:[] }), wsprops = {};
|
||||
var Workbook = ({ Sheets:[], WBProps:{date1904:false} }), wsprops = {};
|
||||
var get_rgb = function getrgb(icv) {
|
||||
if(icv < 8) return XLSIcv[icv];
|
||||
if(icv < 64) return palette[icv-8] || XLSIcv[icv];
|
||||
@ -14010,7 +14089,8 @@ function parse_workbook(blob, options) {
|
||||
/* nested switch statements to workaround V8 128 limit */
|
||||
switch(Rn) {
|
||||
/* Workbook Options */
|
||||
case 'Date1904': wb.opts.Date1904 = val; break;
|
||||
case 'Date1904':
|
||||
wb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;
|
||||
case 'WriteProtect': wb.opts.WriteProtect = true; break;
|
||||
case 'FilePass':
|
||||
if(!opts.enc) blob.l = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user