Skip to content

Commit 8508ad4

Browse files
committed
version bump 0.12.2: BIFF2-4 features
- correct BIFF-dependent cell reference wrapping - record layout fixes from sample files - use BIFF version 2.4.338 for BOF (fixes SheetJS#995 h/t @benjaminleetmaa) - fixed potentially vulnerable regexes (h/t @davisjam) - removed insecure deep dependency (fixes SheetJS#996 h/t @dcatoday)
1 parent 88e9e31 commit 8508ad4

36 files changed

+259
-201
lines changed

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ tmp
1212
*.[pP][rR][nN]
1313
*.[sS][lL][kK]
1414
*.socialcalc
15-
*.[xX][lL][sSwWcCaAtT]
15+
*.[xX][lL][sSwWcCaAtTmM]
1616
*.[xX][lL][sSaAtT][xXmMbB]
1717
*.[oO][dD][sS]
1818
*.[fF][oO][dD][sS]

.npmignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ tmp
1414
*.[pP][rR][nN]
1515
*.[sS][lL][kK]
1616
*.socialcalc
17-
*.[xX][lL][sSwWcCaAtT]
17+
*.[xX][lL][sSwWcCaAtTmM]
1818
*.[xX][lL][sSaAtT][xXmMbB]
1919
*.[oO][dD][sS]
2020
*.[fF][oO][dD][sS]

bits/01_version.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
XLSX.version = '0.12.1';
1+
XLSX.version = '0.12.2';

bits/10_ssf.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
/*jshint -W041 */
33
var SSF/*:SSFModule*/ = ({}/*:any*/);
44
var make_ssf = function make_ssf(SSF/*:SSFModule*/){
5-
SSF.version = '0.10.0';
5+
SSF.version = '0.10.2';
66
function _strrev(x/*:string*/)/*:string*/ { var o = "", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }
77
function fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = ""; while(o.length < l) o+=c; return o; }
88
function pad0(v/*:any*/,d/*:number*/)/*:string*/{var t=""+v; return t.length>=d?t:fill('0',d-t.length)+t;}
@@ -791,7 +791,7 @@ function eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number*/) {
791791
}
792792
SSF._eval = eval_fmt;
793793
var cfregex = /\[[=<>]/;
794-
var cfregex2 = /\[([=<>]*)(-?\d+\.?\d*)\]/;
794+
var cfregex2 = /\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;
795795
function chkcond(v, rr) {
796796
if(rr == null) return false;
797797
var thresh = parseFloat(rr[2]);

bits/22_xmlutils.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
var XML_HEADER = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r\n';
22
var attregexg=/([^"\s?>\/]+)\s*=\s*((?:")([^"]*)(?:")|(?:')([^']*)(?:')|([^'">\s]+))/g;
3-
var tagregex=/<[\/\?]?[a-zA-Z0-9:]+(?:\s+[^"\s?>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s]+))*\s?[\/\?]?>/g;
3+
var tagregex=/<[\/\?]?[a-zA-Z0-9:]+(?:\s+[^"\s?>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s=]+))*\s?[\/\?]?>/g;
44
if(!(XML_HEADER.match(tagregex))) tagregex = /<[^>]*>/g;
55
var nsregex=/<\w*:/, nsregex2 = /<(\/?)\w+:/;
66
function parsexmltag(tag/*:string*/, skip_root/*:?boolean*/)/*:any*/ {

bits/23_binutils.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ function write_double_le(b/*:RawBytes|CFBlob*/, v/*:number*/, idx/*:number*/) {
2525
b[idx + 7] = (e >> 4) | bs;
2626
}
2727

28-
var __toBuffer = function(bufs/*:Array<any>*/) { var x=[],w=10240; for(var i=0;i<bufs[0].length;++i) for(var j=0,L=bufs[0][i].length;j<L;j+=w) x.push.apply(x, bufs[0][i].slice(j,j+w)); return x; };
28+
var __toBuffer = function(bufs/*:Array<Array<RawBytes> >*/)/*:RawBytes*/ { var x=[],w=10240; for(var i=0;i<bufs[0].length;++i) if(bufs[0][i]) for(var j=0,L=bufs[0][i].length;j<L;j+=w) x.push.apply(x, bufs[0][i].slice(j,j+w)); return x; };
2929
var ___toBuffer = __toBuffer;
3030
var __utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/)/*:string*/ { var ss/*:Array<string>*/=[]; for(var i=s; i<e; i+=2) ss.push(String.fromCharCode(__readUInt16LE(b,i))); return ss.join("").replace(chr0,''); };
3131
var ___utf16le = __utf16le;

bits/25_cellutils.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ function shift_range_xls(cell, range, opts) {
2222
return out;
2323
}
2424

25-
function encode_cell_xls(c/*:CellAddress*/)/*:string*/ {
25+
function encode_cell_xls(c/*:CellAddress*/, biff/*:number*/)/*:string*/ {
26+
if(c.cRel && c.c < 0) { c = dup(c); c.c += (biff > 8) ? 0x4000 : 0x100; }
27+
if(c.rRel && c.r < 0) { c = dup(c); c.r += (biff > 8) ? 0x100000 : ((biff > 5) ? 0x10000 : 0x4000); }
2628
var s = encode_cell(c);
2729
if(c.cRel === 0) s = fix_col(s);
2830
if(c.rRel === 0) s = fix_row(s);
@@ -31,7 +33,7 @@ function encode_cell_xls(c/*:CellAddress*/)/*:string*/ {
3133

3234
function encode_range_xls(r, opts)/*:string*/ {
3335
if(r.s.r == 0 && !r.s.rRel) {
34-
if(r.e.r == (opts.biff >= 12 ? 0xFFFFF : 0xFFFF) && !r.e.rRel) {
36+
if(r.e.r == (opts.biff >= 12 ? 0xFFFFF : (opts.biff >= 8 ? 0x10000 : 0x4000)) && !r.e.rRel) {
3537
return (r.s.cRel ? "" : "$") + encode_col(r.s.c) + ":" + (r.e.cRel ? "" : "$") + encode_col(r.e.c);
3638
}
3739
}
@@ -40,5 +42,5 @@ function encode_range_xls(r, opts)/*:string*/ {
4042
return (r.s.rRel ? "" : "$") + encode_row(r.s.r) + ":" + (r.e.rRel ? "" : "$") + encode_row(r.e.r);
4143
}
4244
}
43-
return encode_cell_xls(r.s) + ":" + encode_cell_xls(r.e);
45+
return encode_cell_xls(r.s, opts.biff) + ":" + encode_cell_xls(r.e, opts.biff);
4446
}

bits/29_xlsenum.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ var VT_UI4 = 0x0013;
2323
var VT_LPSTR = 0x001E;
2424
//var VT_LPWSTR = 0x001F;
2525
var VT_FILETIME = 0x0040;
26-
//var VT_BLOB = 0x0041;
26+
var VT_BLOB = 0x0041;
2727
//var VT_STREAM = 0x0042;
2828
//var VT_STORAGE = 0x0043;
2929
//var VT_STREAMED_Object = 0x0044;
@@ -61,6 +61,7 @@ var DocSummaryPIDDSI = {
6161
/*::[*/0x13/*::]*/: { n: 'SharedDoc', t: VT_BOOL },
6262
/*::[*/0x16/*::]*/: { n: 'HLinksChanged', t: VT_BOOL },
6363
/*::[*/0x17/*::]*/: { n: 'AppVersion', t: VT_I4, p: 'version' },
64+
/*::[*/0x18/*::]*/: { n: 'DigSig', t: VT_BLOB },
6465
/*::[*/0x1A/*::]*/: { n: 'ContentType', t: VT_STRING },
6566
/*::[*/0x1B/*::]*/: { n: 'ContentStatus', t: VT_STRING },
6667
/*::[*/0x1C/*::]*/: { n: 'Language', t: VT_STRING },

bits/38_xlstypes.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ function parse_dictionary(blob,CodePage) {
8383
function parse_BLOB(blob) {
8484
var size = blob.read_shift(4);
8585
var bytes = blob.slice(blob.l,blob.l+size);
86+
blob.l += size;
8687
if((size & 3) > 0) blob.l += (4 - (size & 3)) & 3;
8788
return bytes;
8889
}
@@ -93,7 +94,7 @@ function parse_ClipboardData(blob) {
9394
var o = {};
9495
o.Size = blob.read_shift(4);
9596
//o.Format = blob.read_shift(4);
96-
blob.l += o.Size;
97+
blob.l += o.Size + 3 - (o.Size - 1) % 4;
9798
return o;
9899
}
99100

@@ -239,6 +240,7 @@ function parse_PropertySetStream(file, PIDSI, clsid) {
239240
rval.FMTID = FMTID0;
240241
//rval.PSet0 = PSet0;
241242
if(NumSets === 1) return rval;
243+
if(Offset1 - blob.l == 2) blob.l += 2;
242244
if(blob.l !== Offset1) throw new Error("Length mismatch 2: " + blob.l + " !== " + Offset1);
243245
var PSet1;
244246
try { PSet1 = parse_PropertySet(blob, null); } catch(e) {/* empty */}

bits/39_xlsbiff.js

+3
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,9 @@ function parse_BOF(blob, length) {
155155
switch(o.BIFFVer) {
156156
case 0x0600: /* BIFF8 */
157157
case 0x0500: /* BIFF5 */
158+
case 0x0400: /* BIFF4 */
159+
case 0x0300: /* BIFF3 */
160+
case 0x0200: /* BIFF2 */
158161
case 0x0002: case 0x0007: /* BIFF2 */
159162
break;
160163
default: if(length > 6) throw new Error("Unexpected BIFF Ver " + o.BIFFVer);

bits/44_offcrypto.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ function parse_FilePassHeader(blob, length/*:number*/, oo) {
309309
function parse_FilePass(blob, length/*:number*/, opts) {
310310
var o = ({ Type: opts.biff >= 8 ? blob.read_shift(2) : 0 }/*:any*/); /* wEncryptionType */
311311
if(o.Type) parse_FilePassHeader(blob, length-2, o);
312-
else parse_XORObfuscation(blob, length-2, opts, o);
312+
else parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);
313313
return o;
314314
}
315315

bits/62_fxls.js

+11-8
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@ function parse_RgceArea_BIFF2(blob/*::, length, opts*/) {
2727
}
2828

2929
/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */
30-
function parse_RgceAreaRel(blob, length/*::, opts*/) {
31-
var r=blob.read_shift(length == 12 ? 4 : 2), R=blob.read_shift(length == 12 ? 4 : 2);
30+
function parse_RgceAreaRel(blob, length, opts) {
31+
if(opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);
32+
var r=blob.read_shift(opts.biff == 12 ? 4 : 2), R=blob.read_shift(opts.biff == 12 ? 4 : 2);
3233
var c=parse_ColRelU(blob, 2);
3334
var C=parse_ColRelU(blob, 2);
3435
return { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };
@@ -118,7 +119,7 @@ function parse_PtgAreaErr3d(blob, length, opts) {
118119
/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */
119120
function parse_PtgAreaN(blob, length, opts) {
120121
var type = (blob[blob.l++] & 0x60) >> 5;
121-
var area = parse_RgceAreaRel(blob, opts && opts.biff > 8 ? 12 : 8, opts);
122+
var area = parse_RgceAreaRel(blob, length - 1, opts);
122123
return [type, area];
123124
}
124125

@@ -372,6 +373,7 @@ function parse_PtgMemFunc(blob, length, opts) {
372373
function parse_PtgRefErr(blob, length, opts) {
373374
var type = (blob.read_shift(1) >>> 5) & 0x03;
374375
blob.l += 4;
376+
if(opts.biff < 8) blob.l--;
375377
if(opts.biff == 12) blob.l += 2;
376378
return [type];
377379
}
@@ -675,6 +677,7 @@ function get_ixti(supbooks, ixti/*:number*/, opts)/*:string*/ {
675677
return formula_quote_sheet_name(get_ixti_raw(supbooks, ixti, opts), opts);
676678
}
677679
function stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, supbooks, opts)/*:string*/ {
680+
var biff = (opts && opts.biff) || 8;
678681
var _range = /*range != null ? range :*/ {s:{c:0, r:0},e:{c:0, r:0}};
679682
var stack/*:Array<string>*/ = [], e1, e2, /*::type,*/ c/*:CellAddress*/, ixti=0, nameidx=0, r, sname="";
680683
if(!formula[0] || !formula[0][0]) return "";
@@ -746,24 +749,25 @@ function stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, supbooks,
746749

747750
case 'PtgRef': /* [MS-XLS] 2.5.198.84 */
748751
/*::type = f[1][0]; */c = shift_cell_xls((f[1][1]/*:any*/), _range, opts);
749-
stack.push(encode_cell_xls(c));
752+
stack.push(encode_cell_xls(c, biff));
750753
break;
751754
case 'PtgRefN': /* [MS-XLS] 2.5.198.88 */
752755
/*::type = f[1][0]; */c = cell ? shift_cell_xls((f[1][1]/*:any*/), cell, opts) : (f[1][1]/*:any*/);
753-
stack.push(encode_cell_xls(c));
756+
stack.push(encode_cell_xls(c, biff));
754757
break;
755758
case 'PtgRef3d': /* [MS-XLS] 2.5.198.85 */
756759
/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; c = shift_cell_xls((f[1][2]/*:any*/), _range, opts);
757760
sname = get_ixti(supbooks, ixti, opts);
758761
var w = sname; /* IE9 fails on defined names */ // eslint-disable-line no-unused-vars
759-
stack.push(sname + "!" + encode_cell_xls(c));
762+
stack.push(sname + "!" + encode_cell_xls(c, biff));
760763
break;
761764

762765
case 'PtgFunc': /* [MS-XLS] 2.5.198.62 */
763766
case 'PtgFuncVar': /* [MS-XLS] 2.5.198.63 */
764767
/* f[1] = [argc, func, type] */
765768
var argc/*:number*/ = (f[1][0]/*:any*/), func/*:string*/ = (f[1][1]/*:any*/);
766769
if(!argc) argc = 0;
770+
argc &= 0x7F;
767771
var args = argc == 0 ? [] : stack.slice(-argc);
768772
stack.length -= argc;
769773
if(func === 'User') func = args.shift();
@@ -798,6 +802,7 @@ function stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, supbooks,
798802
stack.push("SUM(" + stack.pop() + ")");
799803
break;
800804

805+
case 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 */
801806
case 'PtgAttrSemi': /* [MS-XLS] 2.5.198.37 */
802807
break;
803808

@@ -931,8 +936,6 @@ function stringify_formula(formula/*Array<any>*/, range, cell/*:any*/, supbooks,
931936
case 'PtgElfRwV': /* [MS-XLS] 2.5.198.55 */
932937
throw new Error("Unsupported ELFs");
933938

934-
case 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 TODO -- find a test case*/
935-
throw new Error('Unrecognized Formula Token: ' + String(f));
936939
case 'PtgSxName': /* [MS-XLS] 2.5.198.91 TODO -- find a test case */
937940
throw new Error('Unrecognized Formula Token: ' + String(f));
938941
case 'PtgList': /* [MS-XLSB] 2.5.97.52 TODO -- find a test case */

bits/69_chartxml.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ function parse_numCache(data/*:string*/)/*:[Array<number>, string]*/ {
33

44
/* 21.2.2.150 pt CT_NumVal */
55
(data.match(/<c:pt idx="(\d*)">(.*?)<\/c:pt>/mg)||[]).forEach(function(pt) {
6-
var q = pt.match(/<c:pt idx="(.*?)"><c:v>(.*)<\/c:v><\/c:pt>/);
6+
var q = pt.match(/<c:pt idx="(\d*?)"><c:v>(.*)<\/c:v><\/c:pt>/);
77
if(!q) return;
88
col[+q[1]] = +q[2];
99
});

bits/75_xlml.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ function xlml_normalize(d)/*:string*/ {
168168

169169
/* TODO: Everything */
170170
/* UOS uses CJK in tags */
171-
var xlmlregex = /<(\/?)([^\s?>!\/:]*:|)([^\s?>]*[^\s?>\/])[^>]*>/mg;
171+
var xlmlregex = /<(\/?)([^\s?>!\/:]*:|)([^\s?>:\/]+)[^>]*>/mg;
172172
//var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
173173
function parse_xlml_xml(d, _opts)/*:Workbook*/ {
174174
var opts = _opts || {};

bits/76_xls.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ function parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {
213213
last_Rn = R.n;
214214
if(R.r === 2 || R.r == 12) {
215215
var rt = blob.read_shift(2); length -= 2;
216-
if(!opts.enc && rt !== RecordType) throw new Error("rt mismatch: " + rt + "!=" + RecordType);
216+
if(!opts.enc && rt !== RecordType && (((rt&0xFF)<<8)|(rt>>8)) !== RecordType) throw new Error("rt mismatch: " + rt + "!=" + RecordType);
217217
if(R.r == 12){ blob.l += 10; length -= 10; } // skip FRT
218218
}
219219
//console.error(R,blob.l,length,blob.length);
@@ -232,7 +232,6 @@ function parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {
232232
case 'FilePass':
233233
if(!opts.enc) blob.l = 0;
234234
opts.enc = val;
235-
if(opts.WTF) console.error(val);
236235
if(!options.password) throw new Error("File is password-protected");
237236
if(val.valid == null) throw new Error("Encryption scheme unsupported");
238237
if(!val.valid) throw new Error("Password is incorrect");
@@ -337,6 +336,9 @@ function parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {
337336
/*::[*/0x0209/*::]*/:3,
338337
/*::[*/0x0409/*::]*/:4
339338
}[RecordType] || {
339+
/*::[*/0x0200/*::]*/:2,
340+
/*::[*/0x0300/*::]*/:3,
341+
/*::[*/0x0400/*::]*/:4,
340342
/*::[*/0x0500/*::]*/:5,
341343
/*::[*/0x0600/*::]*/:8,
342344
/*::[*/0x0002/*::]*/:2,
@@ -517,7 +519,7 @@ function parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {
517519
for(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)
518520
for(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {
519521
cc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];
520-
if(cc) cc.l.Tooltip = val[1];
522+
if(cc && cc.l) cc.l.Tooltip = val[1];
521523
}
522524
} break;
523525

demos/angular2/Makefile

+5-19
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,9 @@
1-
.PHONY: angular
2-
angular:
3-
# Test Angular2 build
4-
cp package.json-angular2 package.json
5-
rm -rf node_modules
6-
npm install
7-
if [ ! -e node_modules ]; then mkdir node_modules; fi
8-
if [ ! -e node_modules/xlsx ]; then cd node_modules; ln -s ../../../ xlsx; cd -; fi
9-
npm run build
10-
11-
# Test Angular4 build
12-
cp package.json-angular4 package.json
13-
rm -rf node_modules
14-
npm install
15-
if [ ! -e node_modules ]; then mkdir node_modules; fi
16-
if [ ! -e node_modules/xlsx ]; then cd node_modules; ln -s ../../../ xlsx; cd -; fi
17-
npm run build
1+
.PHONY: all
2+
all: angular5
183

19-
# Test Angular5 build
20-
cp package.json-angular5 package.json
4+
.PHONY: angular2 angular4 angular5
5+
angular2 angular4 angular5:
6+
cp package.json-$@ package.json
217
rm -rf node_modules
228
npm install
239
if [ ! -e node_modules ]; then mkdir node_modules; fi

demos/extendscript/aftereffects.jsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ var basePath = thisFile.path;
77
var filename = "/sheetjs.xlsx";
88

99
/* Read file from disk */
10-
var workbook = XLSX.readFile(basePath + filename);
10+
var workbook = XLSX.readFile(basePath + filename, {cellDates:true});
1111

1212
/* Display first worksheet */
1313
var first_sheet_name = workbook.SheetNames[0], first_worksheet = workbook.Sheets[first_sheet_name];

demos/extendscript/estoolkit.jsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ var basePath = thisFile.path;
77
var filename = "/sheetjs.xlsx";
88

99
/* Read file from disk */
10-
var workbook = XLSX.readFile(basePath + filename);
10+
var workbook = XLSX.readFile(basePath + filename, {cellDates:true});
1111

1212
/* Display first worksheet */
1313
var first_sheet_name = workbook.SheetNames[0], first_worksheet = workbook.Sheets[first_sheet_name];

demos/extendscript/illustrator.jsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ var basePath = thisFile.path;
77
var filename = "/sheetjs.xlsx";
88

99
/* Read file from disk */
10-
var workbook = XLSX.readFile(basePath + filename);
10+
var workbook = XLSX.readFile(basePath + filename, {cellDates:true});
1111

1212
/* Display first worksheet */
1313
var first_sheet_name = workbook.SheetNames[0], first_worksheet = workbook.Sheets[first_sheet_name];

demos/extendscript/indesign.jsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ var basePath = thisFile.path;
77
var filename = "/sheetjs.xlsx";
88

99
/* Read file from disk */
10-
var workbook = XLSX.readFile(basePath + filename);
10+
var workbook = XLSX.readFile(basePath + filename, {cellDates:true});
1111

1212
/* Display first worksheet */
1313
var first_sheet_name = workbook.SheetNames[0], first_worksheet = workbook.Sheets[first_sheet_name];

demos/extendscript/photoshop.jsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ var basePath = thisFile.path;
77
var filename = "/sheetjs.xlsx";
88

99
/* Read file from disk */
10-
var workbook = XLSX.readFile(basePath + filename);
10+
var workbook = XLSX.readFile(basePath + filename, {cellDates:true});
1111

1212
/* Display first worksheet */
1313
var first_sheet_name = workbook.SheetNames[0], first_worksheet = workbook.Sheets[first_sheet_name];

demos/extendscript/test.jsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ var basePath = thisFile.path;
66
var filename = "/sheetjs.xlsx";
77

88
/* Read file from disk */
9-
var workbook = XLSX.readFile(basePath + filename);
9+
var workbook = XLSX.readFile(basePath + filename, {cellDates:true});
1010

1111
/* Display first worksheet */
1212
var first_sheet_name = workbook.SheetNames[0], first_worksheet = workbook.Sheets[first_sheet_name];

dist/xlsx.core.min.js

+13-13
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/xlsx.core.min.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)