diff --git a/bits/01_version.js b/bits/01_version.js index 69b1f72f3e22b34e5aeb7b4c40ccf875fd403496..440b91ad98e8977ea626a3cf0cfb2cc361e00ed0 100644 --- a/bits/01_version.js +++ b/bits/01_version.js @@ -1 +1 @@ -XLSX.version = '0.14.0'; +XLSX.version = '0.14.1'; diff --git a/bits/67_wsxml.js b/bits/67_wsxml.js index 2e9d55123518a9da60e4cc15255b88f8e950ea8e..b00f8f8c470dbcaa41fb33a41c15c0401e7c03f1 100644 --- a/bits/67_wsxml.js +++ b/bits/67_wsxml.js @@ -191,8 +191,21 @@ function parse_ws_xml_autofilter(data/*:string*/) { var o = { ref: (data.match(/ref="([^"]*)"/)||[])[1]}; return o; } -function write_ws_xml_autofilter(data)/*:string*/ { - return writextag("autoFilter", null, {ref:data.ref}); +function write_ws_xml_autofilter(data, ws, wb, idx)/*:string*/ { + var ref = typeof data.ref == "string" ? data.ref : encode_range(data.ref); + if(!wb.Workbook) wb.Workbook = {}; + if(!wb.Workbook.Names) wb.Workbook.Names = []; + var names/*: Array */ = wb.Workbook.Names; + var range = decode_range(ref); + if(range.s.r == range.e.r) { range.e.r = decode_range(ws["!ref"]).e.r; ref = encode_range(range); } + for(var i = 0; i < names.length; ++i) { + var name = names[i]; + if(name.Name != '_xlnm._FilterDatabase') continue; + if(name.Sheet != idx) continue; + name.Ref = "'" + wb.SheetNames[idx] + "'!" + ref; break; + } + if(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: "'" + wb.SheetNames[idx] + "'!" + ref }); + return writextag("autoFilter", null, {ref:ref}); } /* 18.3.1.88 sheetViews CT_SheetViews */ @@ -515,7 +528,7 @@ function write_ws_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ { /* protectedRanges */ /* scenarios */ - if(ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter']); + if(ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter'], ws, wb, idx); /* sortState */ /* dataConsolidate */ diff --git a/bits/76_xls.js b/bits/76_xls.js index bec6a56424c6b79c826a0ecc331c5694c694c439..56e51b7b7060d16f7564fe4e883e264a2f977e02 100644 --- a/bits/76_xls.js +++ b/bits/76_xls.js @@ -135,14 +135,11 @@ function parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ { delete line.ixfe; delete line.XF; lastcell = cell; last_cell = encode_cell(cell); - if(range.s) { - if(cell.r < range.s.r) range.s.r = cell.r; - if(cell.c < range.s.c) range.s.c = cell.c; - } - if(range.e) { - if(cell.r + 1 > range.e.r) range.e.r = cell.r + 1; - if(cell.c + 1 > range.e.c) range.e.c = cell.c + 1; - } + if(!range || !range.s || !range.e) range = {s:{r:0,c:0},e:{r:0,c:0}}; + if(cell.r < range.s.r) range.s.r = cell.r; + if(cell.c < range.s.c) range.s.c = cell.c; + if(cell.r + 1 > range.e.r) range.e.r = cell.r + 1; + if(cell.c + 1 > range.e.c) range.e.c = cell.c + 1; if(options.cellFormula && line.f) { for(var afi = 0; afi < arrayf.length; ++afi) { if(arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue; diff --git a/bits/97_node.js b/bits/97_node.js index 6453de17dcfb787046312dfea35d5a82cd5f2969..3b1a3b432c622661c97e4f6c2bb4173920991477 100644 --- a/bits/97_node.js +++ b/bits/97_node.js @@ -101,9 +101,9 @@ if(has_buf && typeof require != 'undefined') (function() { stream._read = function() { if(R > r.e.r) return stream.push(null); while(R <= r.e.r) { - ++R; //if ((rowinfo[R-1]||{}).hidden) continue; var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o); + ++R; if((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) { stream.push(row.row); break; diff --git a/dist/xlsx.core.min.js b/dist/xlsx.core.min.js index cc03297d9afd8395571afb4e25824067a76301b5..b25e0ab3b29996d241be9e1f7712fa1986fc5bd4 100644 Binary files a/dist/xlsx.core.min.js and b/dist/xlsx.core.min.js differ diff --git a/dist/xlsx.core.min.map b/dist/xlsx.core.min.map index 4125bf101914f31d8677ff2075dcd1658071f3c9..48d99d85f83067f99d0bd09aeffb74ab61cd4880 100644 Binary files a/dist/xlsx.core.min.map and b/dist/xlsx.core.min.map differ diff --git a/dist/xlsx.extendscript.js b/dist/xlsx.extendscript.js index 3cc75edafc47d640f90c7ec4117aa65e78aafbb4..5a1a0914d206d75d688da1d140c42eee112d5d0c 100644 Binary files a/dist/xlsx.extendscript.js and b/dist/xlsx.extendscript.js differ diff --git a/dist/xlsx.full.min.js b/dist/xlsx.full.min.js index bc4a4dcb4b8ddb414aa65b51851e73cdd82e1c2b..f6230e195c9e744470e3a32795e9da00377957b6 100644 Binary files a/dist/xlsx.full.min.js and b/dist/xlsx.full.min.js differ diff --git a/dist/xlsx.full.min.map b/dist/xlsx.full.min.map index 936c4bd286fdcf63b4cef006388cdb96c57ff717..82a1c9dc69e319575ff7ee84d4c104f75bdfe5e2 100644 Binary files a/dist/xlsx.full.min.map and b/dist/xlsx.full.min.map differ diff --git a/dist/xlsx.js b/dist/xlsx.js index ad30dca9f2e39478bafc9194e47d56e603578aa5..49c81fd119247a1d4d374a096d50387cd2df8822 100644 Binary files a/dist/xlsx.js and b/dist/xlsx.js differ diff --git a/dist/xlsx.min.js b/dist/xlsx.min.js index 5a2617b7ec3d459e9887a32d5de761ca871ae4eb..81cce68751dfe57e8df018cdfc0386e64c4daeb5 100644 Binary files a/dist/xlsx.min.js and b/dist/xlsx.min.js differ diff --git a/dist/xlsx.min.map b/dist/xlsx.min.map index b466ac0bc1f89601cc47418d8bf1a069045c00cb..02ec2668bb4fb9e362e222ec43951a10629e22f7 100644 Binary files a/dist/xlsx.min.map and b/dist/xlsx.min.map differ diff --git a/package.json b/package.json index c397441bc4918d56a5d64edc81b007d1cb19c3e8..51a3a6aa9a2c4a970acb721eeb35821cbfb8341a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xlsx", - "version": "0.14.0", + "version": "0.14.1", "author": "sheetjs", "description": "SheetJS Spreadsheet data parser and writer", "keywords": [ diff --git a/xlsx.flow.js b/xlsx.flow.js index 89d463bad26a03d314764453a07235992b418c84..037e08d1a116cb651c24df67796ee10d46ed3c28 100644 --- a/xlsx.flow.js +++ b/xlsx.flow.js @@ -4,7 +4,7 @@ /*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false */ var XLSX = {}; function make_xlsx_lib(XLSX){ -XLSX.version = '0.14.0'; +XLSX.version = '0.14.1'; var current_codepage = 1200, current_ansi = 1252; /*:: declare var cptable:any; */ /*global cptable:true, window */ @@ -13076,8 +13076,21 @@ function parse_ws_xml_autofilter(data/*:string*/) { var o = { ref: (data.match(/ref="([^"]*)"/)||[])[1]}; return o; } -function write_ws_xml_autofilter(data)/*:string*/ { - return writextag("autoFilter", null, {ref:data.ref}); +function write_ws_xml_autofilter(data, ws, wb, idx)/*:string*/ { + var ref = typeof data.ref == "string" ? data.ref : encode_range(data.ref); + if(!wb.Workbook) wb.Workbook = {}; + if(!wb.Workbook.Names) wb.Workbook.Names = []; + var names/*: Array */ = wb.Workbook.Names; + var range = decode_range(ref); + if(range.s.r == range.e.r) { range.e.r = decode_range(ws["!ref"]).e.r; ref = encode_range(range); } + for(var i = 0; i < names.length; ++i) { + var name = names[i]; + if(name.Name != '_xlnm._FilterDatabase') continue; + if(name.Sheet != idx) continue; + name.Ref = "'" + wb.SheetNames[idx] + "'!" + ref; break; + } + if(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: "'" + wb.SheetNames[idx] + "'!" + ref }); + return writextag("autoFilter", null, {ref:ref}); } /* 18.3.1.88 sheetViews CT_SheetViews */ @@ -13400,7 +13413,7 @@ function write_ws_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ { /* protectedRanges */ /* scenarios */ - if(ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter']); + if(ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter'], ws, wb, idx); /* sortState */ /* dataConsolidate */ @@ -16520,14 +16533,11 @@ function parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ { delete line.ixfe; delete line.XF; lastcell = cell; last_cell = encode_cell(cell); - if(range.s) { - if(cell.r < range.s.r) range.s.r = cell.r; - if(cell.c < range.s.c) range.s.c = cell.c; - } - if(range.e) { - if(cell.r + 1 > range.e.r) range.e.r = cell.r + 1; - if(cell.c + 1 > range.e.c) range.e.c = cell.c + 1; - } + if(!range || !range.s || !range.e) range = {s:{r:0,c:0},e:{r:0,c:0}}; + if(cell.r < range.s.r) range.s.r = cell.r; + if(cell.c < range.s.c) range.s.c = cell.c; + if(cell.r + 1 > range.e.r) range.e.r = cell.r + 1; + if(cell.c + 1 > range.e.c) range.e.c = cell.c + 1; if(options.cellFormula && line.f) { for(var afi = 0; afi < arrayf.length; ++afi) { if(arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue; @@ -21063,9 +21073,9 @@ if(has_buf && typeof require != 'undefined') (function() { stream._read = function() { if(R > r.e.r) return stream.push(null); while(R <= r.e.r) { - ++R; //if ((rowinfo[R-1]||{}).hidden) continue; var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o); + ++R; if((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) { stream.push(row.row); break; diff --git a/xlsx.js b/xlsx.js index d826c3bb508702feb8e5d4c031d665494e0a90cd..7aeba511ed6b19bc6f698a1462afcd96f0e55544 100644 Binary files a/xlsx.js and b/xlsx.js differ