diff --git a/bits/01_version.js b/bits/01_version.js index 85bedcf417f3cc972076d7119d986e93db2a206d..f2a8554a4b1c599489f06bcb6d0415ce56bb4a9e 100644 --- a/bits/01_version.js +++ b/bits/01_version.js @@ -1 +1 @@ -XLSX.version = '0.16.6'; +XLSX.version = '0.16.7'; diff --git a/bits/20_jsutils.js b/bits/20_jsutils.js index 40052fd7b2be68399bc6c464e3d56b033018bd04..f9a2db9f4f3eaa04ce910fd6ab5eaf63e8d1e569 100644 --- a/bits/20_jsutils.js +++ b/bits/20_jsutils.js @@ -122,6 +122,7 @@ function fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = ""; while(o.length function fuzzynum(s/*:string*/)/*:number*/ { var v/*:number*/ = Number(s); if(!isNaN(v)) return v; + if(!/\d/.test(s)) return v; var wt = 1; var ss = s.replace(/([\d]),([\d])/g,"$1$2").replace(/[$]/g,"").replace(/[%]/g, function() { wt *= 100; return "";}); if(!isNaN(v = Number(ss))) return v / wt; diff --git a/bits/29_xlsenum.js b/bits/29_xlsenum.js index 69b63b758c4ad09c807d4c8495706bd88d75e9b4..05c431e28408a79feafde15cd6d7be85377a6a63 100644 --- a/bits/29_xlsenum.js +++ b/bits/29_xlsenum.js @@ -1,43 +1,43 @@ /* [MS-OLEPS] 2.2 PropertyType */ //var VT_EMPTY = 0x0000; //var VT_NULL = 0x0001; -var VT_I2 = 0x0002; -var VT_I4 = 0x0003; +var VT_I2 = 0x0002; +var VT_I4 = 0x0003; //var VT_R4 = 0x0004; //var VT_R8 = 0x0005; //var VT_CY = 0x0006; //var VT_DATE = 0x0007; //var VT_BSTR = 0x0008; //var VT_ERROR = 0x000A; -var VT_BOOL = 0x000B; -var VT_VARIANT = 0x000C; +var VT_BOOL = 0x000B; +var VT_VARIANT = 0x000C; //var VT_DECIMAL = 0x000E; //var VT_I1 = 0x0010; //var VT_UI1 = 0x0011; //var VT_UI2 = 0x0012; -var VT_UI4 = 0x0013; +var VT_UI4 = 0x0013; //var VT_I8 = 0x0014; //var VT_UI8 = 0x0015; //var VT_INT = 0x0016; //var VT_UINT = 0x0017; -var VT_LPSTR = 0x001E; +var VT_LPSTR = 0x001E; //var VT_LPWSTR = 0x001F; var VT_FILETIME = 0x0040; -var VT_BLOB = 0x0041; +var VT_BLOB = 0x0041; //var VT_STREAM = 0x0042; //var VT_STORAGE = 0x0043; //var VT_STREAMED_Object = 0x0044; //var VT_STORED_Object = 0x0045; //var VT_BLOB_Object = 0x0046; -var VT_CF = 0x0047; +var VT_CF = 0x0047; //var VT_CLSID = 0x0048; //var VT_VERSIONED_STREAM = 0x0049; -var VT_VECTOR = 0x1000; +var VT_VECTOR = 0x1000; //var VT_ARRAY = 0x2000; -var VT_STRING = 0x0050; // 2.3.3.1.11 VtString -var VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString -var VT_CUSTOM = [VT_STRING, VT_USTR]; +var VT_STRING = 0x0050; // 2.3.3.1.11 VtString +var VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString +var VT_CUSTOM = [VT_STRING, VT_USTR]; /* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */ var DocSummaryPIDDSI = { @@ -100,9 +100,9 @@ var SpecialProperties = { /*::[*/0x72627262/*::]*/: {} }; -(function () { - for (var y in SpecialProperties) if (Object.prototype.hasOwnProperty.call(SpecialProperties, y)) - DocSummaryPIDDSI[y] = SummaryPIDSI[y] = SpecialProperties[y]; +(function() { + for(var y in SpecialProperties) if(Object.prototype.hasOwnProperty.call(SpecialProperties, y)) + DocSummaryPIDDSI[y] = SummaryPIDSI[y] = SpecialProperties[y]; })(); var DocSummaryRE/*:{[key:string]:string}*/ = evert_key(DocSummaryPIDDSI, "n"); @@ -185,7 +185,7 @@ var XLSFillPattern = [ 'gray0625' ]; -function rgbify(arr/*:Array*/)/*:Array<[number, number, number]>*/ { return arr.map(function (x) { return [(x >> 16) & 255, (x >> 8) & 255, x & 255]; }); } +function rgbify(arr/*:Array*/)/*:Array<[number, number, number]>*/ { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); } /* [MS-XLS] 2.5.161 */ /* [MS-XLSB] 2.5.75 Icv */ @@ -295,4 +295,4 @@ var BErr = { /*::[*/0x2B/*::]*/: "#GETTING_DATA", /*::[*/0xFF/*::]*/: "#WTF?" }; -var RBErr = evert_num(BErr); \ No newline at end of file +var RBErr = evert_num(BErr); diff --git a/bits/31_rels.js b/bits/31_rels.js index 388d59cccca3ba7d20d352b40f3fe371038677a1..7d731a6a600bcd2c6bd51ffbf97f800d38dfb2e7 100644 --- a/bits/31_rels.js +++ b/bits/31_rels.js @@ -7,6 +7,8 @@ var RELS = ({ XPATH: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath", XMISS: "http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing", XLINK: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink", + CXML: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml", + CXMLP: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps", VBA: "http://schemas.microsoft.com/office/2006/relationships/vbaProject" }/*:any*/); diff --git a/bits/72_wbxml.js b/bits/72_wbxml.js index fc9d424f3e6f92919cd5e930c7e8ebf1bd54906e..9ceb275e830e20e67a780a22b2005dd3c827cc7a 100644 --- a/bits/72_wbxml.js +++ b/bits/72_wbxml.js @@ -192,7 +192,17 @@ function write_wb_xml(wb/*:Workbook*//*::, opts:?WriteOpts*/)/*:string*/ { var sheets = wb.Workbook && wb.Workbook.Sheets || []; var i = 0; - /* bookViews */ + /* bookViews only written if first worksheet is hidden */ + if(sheets && sheets[0] && !!sheets[0].Hidden) { + o[o.length] = ""; + for(i = 0; i != wb.SheetNames.length; ++i) { + if(!sheets[i]) break; + if(!sheets[i].Hidden) break; + } + if(i == wb.SheetNames.length) i = 0; + o[o.length] = ''; + o[o.length] = ""; + } o[o.length] = ""; for(i = 0; i != wb.SheetNames.length; ++i) { diff --git a/bits/75_xlml.js b/bits/75_xlml.js index 0e937289dde0d33ddc5a30bd91c0b4e1b860efcb..c2eee20379893ad099775854e6f93584a25e22b0 100644 --- a/bits/75_xlml.js +++ b/bits/75_xlml.js @@ -611,6 +611,8 @@ function parse_xlml_xml(d, _opts)/*:Workbook*/ { case 'donotdisplaygridlines' /*case 'DoNotDisplayGridlines'*/: break; + case 'activerow' /*case 'ActiveRow'*/: break; + case 'activecol' /*case 'ActiveCol'*/: break; case 'toprowbottompane' /*case 'TopRowBottomPane'*/: break; case 'leftcolumnrightpane' /*case 'LeftColumnRightPane'*/: break; @@ -630,8 +632,6 @@ function parse_xlml_xml(d, _opts)/*:Workbook*/ { case 'horizontalresolution' /*case 'HorizontalResolution'*/: break; case 'verticalresolution' /*case 'VerticalResolution'*/: break; case 'numberofcopies' /*case 'NumberofCopies'*/: break; - case 'activerow' /*case 'ActiveRow'*/: break; - case 'activecol' /*case 'ActiveCol'*/: break; case 'activepane' /*case 'ActivePane'*/: break; case 'toprowvisible' /*case 'TopRowVisible'*/: break; case 'leftcolumnvisible' /*case 'LeftColumnVisible'*/: break; diff --git a/bits/81_writeods.js b/bits/81_writeods.js index 905913fdc86653c14aa94ac1017758cc765b0d14..e43e05aee1d02a7dabeee83bedb7beee4a3d043e 100644 --- a/bits/81_writeods.js +++ b/bits/81_writeods.js @@ -33,7 +33,7 @@ var write_content_ods/*:{(wb:any, opts:any):string}*/ = (function() { var write_ws = function(ws, wb/*:Workbook*/, i/*:number*//*::, opts*/)/*:string*/ { /* Section 9 Tables */ var o/*:Array*/ = []; - o.push(' \n'); + o.push(' \n'); var R=0,C=0, range = decode_range(ws['!ref']); var marr/*:Array*/ = ws['!merges'] || [], mi = 0; var dense = Array.isArray(ws); @@ -105,6 +105,7 @@ var write_content_ods/*:{(wb:any, opts:any):string}*/ = (function() { var write_automatic_styles_ods = function(o/*:Array*/) { o.push(' \n'); + o.push(' \n'); o.push(' \n'); o.push(' /\n'); @@ -113,11 +114,16 @@ var write_content_ods/*:{(wb:any, opts:any):string}*/ = (function() { o.push(' \n'); o.push(' \n'); + /* table */ o.push(' \n'); // style:master-page-name="mp1">\n'); o.push(' \n'); o.push(' \n'); + /* table cells, text */ o.push(' \n'); + + /* page-layout */ + o.push(' \n'); }; diff --git a/bits/84_defaults.js b/bits/84_defaults.js index 2d6bdc81ab7aba2a9767974180ff4feccd572da5..ef33911056cafe6a196540ed09cf8b7b51d76f74 100644 --- a/bits/84_defaults.js +++ b/bits/84_defaults.js @@ -8,7 +8,8 @@ function fix_opts_func(defaults/*:Array >*/)/*:{(o:any):void}*/ { }; } -var fix_read_opts = fix_opts_func([ +var fix_read_opts = function(opts) { +fix_opts_func([ ['cellNF', false], /* emit cell number format string as .z */ ['cellHTML', true], /* emit html string as .h */ ['cellFormula', true], /* emit formulae as .f */ @@ -27,8 +28,8 @@ var fix_read_opts = fix_opts_func([ ['password',''], /* password */ ['WTF', false] /* WTF mode (throws errors) */ -]); - +])(opts); +}; var fix_write_opts = fix_opts_func([ ['cellDates', false], /* write date cells with type `d` */ diff --git a/dist/xlsx.core.min.js b/dist/xlsx.core.min.js index 021d8c096addb79ea94368d2eb6af5991baa1f74..f26096c262da78b8b032553a1c5d74b33ef9d37d 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 a2a2046846bea0705266468f1147aa3cdecb6582..53d4e4a9d94caab5884c9fb47a201e7adff4499d 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 f43e5b33a3d17ee5f9c76fa4b6ed18a088d26b2f..34f9c6115eeb5dd56bcc9f4f41ec758fbf05b184 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 505c422cba540d54a36cdaffd7f2bad8c093b12c..bac0177e11ab87453d3036b64aeb0385c9a5f24e 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 fb862abaf6273d25b39c1d73b7f6b11dedbf62bd..505d5159911ded6c9215b578ca77abdb47d43516 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 ba5d3b94f3b70a2a6e085625606447f1bd3a54e4..48acc55bd5df753ef8bc15e3fa4b2b04230e289e 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 94bc6386fd0e85a5093a6ed02e863bb2c2576600..6bbe76aa083bf567fa9f221314c42eaa10c5e978 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 0f036fea9861d2ebad4728b35c385108b5e2d105..aebd90dfc2410a45346093cedb385b5f08b89495 100644 Binary files a/dist/xlsx.min.map and b/dist/xlsx.min.map differ diff --git a/dist/xlsx.mini.min.js b/dist/xlsx.mini.min.js index e1d4939799be4bba1a27bd35664dde80670d2f04..4efc170eeb95232c5045eaaa85a67c3d2f54782b 100644 Binary files a/dist/xlsx.mini.min.js and b/dist/xlsx.mini.min.js differ diff --git a/dist/xlsx.mini.min.map b/dist/xlsx.mini.min.map index 221bbe091f26c11d0a100c00dd48e1bd6704c88b..9131439b29d1ad60eeaa345d5b53784696a6cccf 100644 Binary files a/dist/xlsx.mini.min.map and b/dist/xlsx.mini.min.map differ diff --git a/package.json b/package.json index 48d16c20bf4b4ccd630484160840fc80535dc5dd..f5143a6e96cd633da871e35467e93f0d55152656 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xlsx", - "version": "0.16.6", + "version": "0.16.7", "author": "sheetjs", "description": "SheetJS Spreadsheet data parser and writer", "keywords": [ diff --git a/test.js b/test.js index c93ce253c6b4cbf897d41e6c4ee41b258ce70036..6d3a05b37c01a424a10762aaedcf1be7f7446590 100644 --- a/test.js +++ b/test.js @@ -1224,6 +1224,23 @@ describe('parse features', function() { }); }); }); }); + describe('workbook codename unicode', function() { + var ws, wb; + var bef = (function() { + wb = X.utils.book_new(); + ws = X.utils.aoa_to_sheet([[1]]); + X.utils.book_append_sheet(wb, ws, "Sheet1"); + wb.Workbook = { WBProps: { CodeName: "本工作簿" } }; + }); + if(typeof before != 'undefined') before(bef); + else it('before', bef); + ['xlsx', 'xlsb'].forEach(function(m) { it(m, function() { + var bstr = X.write(wb, {type: "binary", bookType: m}); + var nwb = X.read(bstr, {type: "binary"}); + assert.equal(nwb.Workbook.WBProps.CodeName, wb.Workbook.WBProps.CodeName); + }); }); + }); + describe('auto filter', function() {[ ['xlsx', paths.afxlsx], ['xlsb', paths.afxlsb], @@ -1255,7 +1272,8 @@ describe('parse features', function() { assert.equal(get_cell(wb2.Sheets.Sheet1, "A2").h, "&"); assert.equal(get_cell(wb2.Sheets.Sheet1, "B2").h, "<"); assert.equal(get_cell(wb2.Sheets.Sheet1, "C2").h, ">"); - assert.equal(get_cell(wb2.Sheets.Sheet1, "D2").h, "
"); + var h = get_cell(wb2.Sheets.Sheet1, "D2").h; + assert(h == " " || h == "
"); }); }); }); @@ -2184,7 +2202,12 @@ describe('HTML', function() { var expected_rows = []; expected_rows[0] = expected_rows[2] = {hidden: true}; assert.equal(ws['!ref'], "A1:A3"); - assert.deepEqual(ws['!rows'], expected_rows); + try { + assert.deepEqual(ws['!rows'], expected_rows); + } catch(e) { + expected_rows[1] = {}; + assert.deepEqual(ws['!rows'], expected_rows); + } assert.equal(get_cell(ws, "A1").v, "Foo"); assert.equal(get_cell(ws, "A2").v, "Bar"); assert.equal(get_cell(ws, "A3").v, "Baz"); diff --git a/tests/core.js b/tests/core.js index c93ce253c6b4cbf897d41e6c4ee41b258ce70036..6d3a05b37c01a424a10762aaedcf1be7f7446590 100644 Binary files a/tests/core.js and b/tests/core.js differ diff --git a/xlsx.flow.js b/xlsx.flow.js index 9ba8e20e83be5af9f58261a369be64605aa9717c..efd1727bacc692d5b9b538e889435bf21fbd8449 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.16.6'; +XLSX.version = '0.16.7'; var current_codepage = 1200, current_ansi = 1252; /*:: declare var cptable:any; */ /*global cptable:true, window */ @@ -2940,6 +2940,7 @@ function fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = ""; while(o.length function fuzzynum(s/*:string*/)/*:number*/ { var v/*:number*/ = Number(s); if(!isNaN(v)) return v; + if(!/\d/.test(s)) return v; var wt = 1; var ss = s.replace(/([\d]),([\d])/g,"$1$2").replace(/[$]/g,"").replace(/[%]/g, function() { wt *= 100; return "";}); if(!isNaN(v = Number(ss))) return v / wt; @@ -4198,43 +4199,43 @@ function parse_ClipboardFormatOrUnicodeString(o) { return parse_ClipboardFormatO /* [MS-OLEPS] 2.2 PropertyType */ //var VT_EMPTY = 0x0000; //var VT_NULL = 0x0001; -var VT_I2 = 0x0002; -var VT_I4 = 0x0003; +var VT_I2 = 0x0002; +var VT_I4 = 0x0003; //var VT_R4 = 0x0004; //var VT_R8 = 0x0005; //var VT_CY = 0x0006; //var VT_DATE = 0x0007; //var VT_BSTR = 0x0008; //var VT_ERROR = 0x000A; -var VT_BOOL = 0x000B; -var VT_VARIANT = 0x000C; +var VT_BOOL = 0x000B; +var VT_VARIANT = 0x000C; //var VT_DECIMAL = 0x000E; //var VT_I1 = 0x0010; //var VT_UI1 = 0x0011; //var VT_UI2 = 0x0012; -var VT_UI4 = 0x0013; +var VT_UI4 = 0x0013; //var VT_I8 = 0x0014; //var VT_UI8 = 0x0015; //var VT_INT = 0x0016; //var VT_UINT = 0x0017; -var VT_LPSTR = 0x001E; +var VT_LPSTR = 0x001E; //var VT_LPWSTR = 0x001F; var VT_FILETIME = 0x0040; -var VT_BLOB = 0x0041; +var VT_BLOB = 0x0041; //var VT_STREAM = 0x0042; //var VT_STORAGE = 0x0043; //var VT_STREAMED_Object = 0x0044; //var VT_STORED_Object = 0x0045; //var VT_BLOB_Object = 0x0046; -var VT_CF = 0x0047; +var VT_CF = 0x0047; //var VT_CLSID = 0x0048; //var VT_VERSIONED_STREAM = 0x0049; -var VT_VECTOR = 0x1000; +var VT_VECTOR = 0x1000; //var VT_ARRAY = 0x2000; -var VT_STRING = 0x0050; // 2.3.3.1.11 VtString -var VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString -var VT_CUSTOM = [VT_STRING, VT_USTR]; +var VT_STRING = 0x0050; // 2.3.3.1.11 VtString +var VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString +var VT_CUSTOM = [VT_STRING, VT_USTR]; /* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */ var DocSummaryPIDDSI = { @@ -4297,9 +4298,9 @@ var SpecialProperties = { /*::[*/0x72627262/*::]*/: {} }; -(function () { - for (var y in SpecialProperties) if (Object.prototype.hasOwnProperty.call(SpecialProperties, y)) - DocSummaryPIDDSI[y] = SummaryPIDSI[y] = SpecialProperties[y]; +(function() { + for(var y in SpecialProperties) if(Object.prototype.hasOwnProperty.call(SpecialProperties, y)) + DocSummaryPIDDSI[y] = SummaryPIDSI[y] = SpecialProperties[y]; })(); var DocSummaryRE/*:{[key:string]:string}*/ = evert_key(DocSummaryPIDDSI, "n"); @@ -4382,7 +4383,7 @@ var XLSFillPattern = [ 'gray0625' ]; -function rgbify(arr/*:Array*/)/*:Array<[number, number, number]>*/ { return arr.map(function (x) { return [(x >> 16) & 255, (x >> 8) & 255, x & 255]; }); } +function rgbify(arr/*:Array*/)/*:Array<[number, number, number]>*/ { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); } /* [MS-XLS] 2.5.161 */ /* [MS-XLSB] 2.5.75 Icv */ @@ -4492,7 +4493,8 @@ var BErr = { /*::[*/0x2B/*::]*/: "#GETTING_DATA", /*::[*/0xFF/*::]*/: "#WTF?" }; -var RBErr = evert_num(BErr);/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */ +var RBErr = evert_num(BErr); +/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */ /* 12.3 Part Summary */ /* 14.2 Part Summary */ /* [MS-XLSX] 2.1 Part Enumerations ; [MS-XLSB] 2.1.7 Part Enumeration */ @@ -4803,6 +4805,8 @@ var RELS = ({ XPATH: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath", XMISS: "http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing", XLINK: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink", + CXML: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml", + CXMLP: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps", VBA: "http://schemas.microsoft.com/office/2006/relationships/vbaProject" }/*:any*/); @@ -13543,7 +13547,7 @@ function write_ws_xml_sheetviews(ws, opts, idx, wb)/*:string*/ { } function write_ws_xml_cell(cell/*:Cell*/, ref, ws, opts/*::, idx, wb*/)/*:string*/ { - if(cell.v === undefined && cell.f === undefined || cell.t === 'z') return ""; + if(cell.v === undefined && typeof cell.f !== "string" || cell.t === 'z') return ""; var vv = ""; var oldt = cell.t, oldv = cell.v; if(cell.t !== "z") switch(cell.t) { @@ -13579,7 +13583,7 @@ function write_ws_xml_cell(cell/*:Cell*/, ref, ws, opts/*::, idx, wb*/)/*:string o.t = "str"; break; } if(cell.t != oldt) { cell.t = oldt; cell.v = oldv; } - if(cell.f) { + if(typeof cell.f == "string" && cell.f) { var ff = cell.F && cell.F.slice(0, ref.length) == ref ? {t:"array", ref:cell.F} : null; v = writextag('f', escapexml(cell.f), ff) + (cell.v != null ? v : ""); } @@ -15302,7 +15306,17 @@ function write_wb_xml(wb/*:Workbook*//*::, opts:?WriteOpts*/)/*:string*/ { var sheets = wb.Workbook && wb.Workbook.Sheets || []; var i = 0; - /* bookViews */ + /* bookViews only written if first worksheet is hidden */ + if(sheets && sheets[0] && !!sheets[0].Hidden) { + o[o.length] = ""; + for(i = 0; i != wb.SheetNames.length; ++i) { + if(!sheets[i]) break; + if(!sheets[i].Hidden) break; + } + if(i == wb.SheetNames.length) i = 0; + o[o.length] = ''; + o[o.length] = ""; + } o[o.length] = ""; for(i = 0; i != wb.SheetNames.length; ++i) { @@ -16335,6 +16349,8 @@ function parse_xlml_xml(d, _opts)/*:Workbook*/ { case 'donotdisplaygridlines' /*case 'DoNotDisplayGridlines'*/: break; + case 'activerow' /*case 'ActiveRow'*/: break; + case 'activecol' /*case 'ActiveCol'*/: break; case 'toprowbottompane' /*case 'TopRowBottomPane'*/: break; case 'leftcolumnrightpane' /*case 'LeftColumnRightPane'*/: break; @@ -16354,8 +16370,6 @@ function parse_xlml_xml(d, _opts)/*:Workbook*/ { case 'horizontalresolution' /*case 'HorizontalResolution'*/: break; case 'verticalresolution' /*case 'VerticalResolution'*/: break; case 'numberofcopies' /*case 'NumberofCopies'*/: break; - case 'activerow' /*case 'ActiveRow'*/: break; - case 'activecol' /*case 'ActiveCol'*/: break; case 'activepane' /*case 'ActivePane'*/: break; case 'toprowvisible' /*case 'TopRowVisible'*/: break; case 'leftcolumnvisible' /*case 'LeftColumnVisible'*/: break; @@ -20381,7 +20395,7 @@ var write_content_ods/*:{(wb:any, opts:any):string}*/ = (function() { var write_ws = function(ws, wb/*:Workbook*/, i/*:number*//*::, opts*/)/*:string*/ { /* Section 9 Tables */ var o/*:Array*/ = []; - o.push(' \n'); + o.push(' \n'); var R=0,C=0, range = decode_range(ws['!ref']); var marr/*:Array*/ = ws['!merges'] || [], mi = 0; var dense = Array.isArray(ws); @@ -20453,6 +20467,7 @@ var write_content_ods/*:{(wb:any, opts:any):string}*/ = (function() { var write_automatic_styles_ods = function(o/*:Array*/) { o.push(' \n'); + o.push(' \n'); o.push(' \n'); o.push(' /\n'); @@ -20461,11 +20476,16 @@ var write_content_ods/*:{(wb:any, opts:any):string}*/ = (function() { o.push(' \n'); o.push(' \n'); + /* table */ o.push(' \n'); // style:master-page-name="mp1">\n'); o.push(' \n'); o.push(' \n'); + /* table cells, text */ o.push(' \n'); + + /* page-layout */ + o.push(' \n'); }; @@ -20609,7 +20629,8 @@ function fix_opts_func(defaults/*:Array >*/)/*:{(o:any):void}*/ { }; } -var fix_read_opts = fix_opts_func([ +var fix_read_opts = function(opts) { +fix_opts_func([ ['cellNF', false], /* emit cell number format string as .z */ ['cellHTML', true], /* emit html string as .h */ ['cellFormula', true], /* emit formulae as .f */ @@ -20628,8 +20649,8 @@ var fix_read_opts = fix_opts_func([ ['password',''], /* password */ ['WTF', false] /* WTF mode (throws errors) */ -]); - +])(opts); +}; var fix_write_opts = fix_opts_func([ ['cellDates', false], /* write date cells with type `d` */ @@ -21461,7 +21482,6 @@ function sheet_to_formulae(sheet/*:Worksheet*/)/*:Array*/ { } function sheet_add_json(_ws/*:?Worksheet*/, js/*:Array*/, opts)/*:Worksheet*/ { - if(!js.length) return _ws; var o = opts || {}; var offset = +!o.skipHeader; var ws/*:Worksheet*/ = _ws || ({}/*:any*/); diff --git a/xlsx.js b/xlsx.js index d9b2278f49797ffd26940977e4734d12c050e0d3..76e3941678b1d1accf91b9109e29c09558e9e1c9 100644 Binary files a/xlsx.js and b/xlsx.js differ diff --git a/xlsx.mini.flow.js b/xlsx.mini.flow.js index 892f6583a116bcc91b92a47914dded40ce48d6e4..79dc4b5424067d1749327853e4d41f649bf53561 100644 --- a/xlsx.mini.flow.js +++ b/xlsx.mini.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.16.6'; +XLSX.version = '0.16.7'; var current_codepage = 1200, current_ansi = 1252; var VALID_ANSI = [ 874, 932, 936, 949, 950 ]; @@ -2918,6 +2918,7 @@ function fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = ""; while(o.length function fuzzynum(s/*:string*/)/*:number*/ { var v/*:number*/ = Number(s); if(!isNaN(v)) return v; + if(!/\d/.test(s)) return v; var wt = 1; var ss = s.replace(/([\d]),([\d])/g,"$1$2").replace(/[$]/g,"").replace(/[%]/g, function() { wt *= 100; return "";}); if(!isNaN(v = Number(ss))) return v / wt; @@ -3829,43 +3830,43 @@ function aoa_to_sheet(data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ { return sheet_ /* [MS-OLEPS] 2.2 PropertyType */ //var VT_EMPTY = 0x0000; //var VT_NULL = 0x0001; -var VT_I2 = 0x0002; -var VT_I4 = 0x0003; +var VT_I2 = 0x0002; +var VT_I4 = 0x0003; //var VT_R4 = 0x0004; //var VT_R8 = 0x0005; //var VT_CY = 0x0006; //var VT_DATE = 0x0007; //var VT_BSTR = 0x0008; //var VT_ERROR = 0x000A; -var VT_BOOL = 0x000B; -var VT_VARIANT = 0x000C; +var VT_BOOL = 0x000B; +var VT_VARIANT = 0x000C; //var VT_DECIMAL = 0x000E; //var VT_I1 = 0x0010; //var VT_UI1 = 0x0011; //var VT_UI2 = 0x0012; -var VT_UI4 = 0x0013; +var VT_UI4 = 0x0013; //var VT_I8 = 0x0014; //var VT_UI8 = 0x0015; //var VT_INT = 0x0016; //var VT_UINT = 0x0017; -var VT_LPSTR = 0x001E; +var VT_LPSTR = 0x001E; //var VT_LPWSTR = 0x001F; var VT_FILETIME = 0x0040; -var VT_BLOB = 0x0041; +var VT_BLOB = 0x0041; //var VT_STREAM = 0x0042; //var VT_STORAGE = 0x0043; //var VT_STREAMED_Object = 0x0044; //var VT_STORED_Object = 0x0045; //var VT_BLOB_Object = 0x0046; -var VT_CF = 0x0047; +var VT_CF = 0x0047; //var VT_CLSID = 0x0048; //var VT_VERSIONED_STREAM = 0x0049; -var VT_VECTOR = 0x1000; +var VT_VECTOR = 0x1000; //var VT_ARRAY = 0x2000; -var VT_STRING = 0x0050; // 2.3.3.1.11 VtString -var VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString -var VT_CUSTOM = [VT_STRING, VT_USTR]; +var VT_STRING = 0x0050; // 2.3.3.1.11 VtString +var VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString +var VT_CUSTOM = [VT_STRING, VT_USTR]; /* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */ var DocSummaryPIDDSI = { @@ -3928,9 +3929,9 @@ var SpecialProperties = { /*::[*/0x72627262/*::]*/: {} }; -(function () { - for (var y in SpecialProperties) if (Object.prototype.hasOwnProperty.call(SpecialProperties, y)) - DocSummaryPIDDSI[y] = SummaryPIDSI[y] = SpecialProperties[y]; +(function() { + for(var y in SpecialProperties) if(Object.prototype.hasOwnProperty.call(SpecialProperties, y)) + DocSummaryPIDDSI[y] = SummaryPIDSI[y] = SpecialProperties[y]; })(); var DocSummaryRE/*:{[key:string]:string}*/ = evert_key(DocSummaryPIDDSI, "n"); @@ -4013,7 +4014,7 @@ var XLSFillPattern = [ 'gray0625' ]; -function rgbify(arr/*:Array*/)/*:Array<[number, number, number]>*/ { return arr.map(function (x) { return [(x >> 16) & 255, (x >> 8) & 255, x & 255]; }); } +function rgbify(arr/*:Array*/)/*:Array<[number, number, number]>*/ { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); } /* [MS-XLS] 2.5.161 */ /* [MS-XLSB] 2.5.75 Icv */ @@ -4123,7 +4124,8 @@ var BErr = { /*::[*/0x2B/*::]*/: "#GETTING_DATA", /*::[*/0xFF/*::]*/: "#WTF?" }; -var RBErr = evert_num(BErr);/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */ +var RBErr = evert_num(BErr); +/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */ /* 12.3 Part Summary */ /* 14.2 Part Summary */ /* [MS-XLSX] 2.1 Part Enumerations ; [MS-XLSB] 2.1.7 Part Enumeration */ @@ -4434,6 +4436,8 @@ var RELS = ({ XPATH: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath", XMISS: "http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing", XLINK: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink", + CXML: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml", + CXMLP: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps", VBA: "http://schemas.microsoft.com/office/2006/relationships/vbaProject" }/*:any*/); @@ -7464,7 +7468,7 @@ function write_ws_xml_sheetviews(ws, opts, idx, wb)/*:string*/ { } function write_ws_xml_cell(cell/*:Cell*/, ref, ws, opts/*::, idx, wb*/)/*:string*/ { - if(cell.v === undefined && cell.f === undefined || cell.t === 'z') return ""; + if(cell.v === undefined && typeof cell.f !== "string" || cell.t === 'z') return ""; var vv = ""; var oldt = cell.t, oldv = cell.v; if(cell.t !== "z") switch(cell.t) { @@ -7500,7 +7504,7 @@ function write_ws_xml_cell(cell/*:Cell*/, ref, ws, opts/*::, idx, wb*/)/*:string o.t = "str"; break; } if(cell.t != oldt) { cell.t = oldt; cell.v = oldv; } - if(cell.f) { + if(typeof cell.f == "string" && cell.f) { var ff = cell.F && cell.F.slice(0, ref.length) == ref ? {t:"array", ref:cell.F} : null; v = writextag('f', escapexml(cell.f), ff) + (cell.v != null ? v : ""); } @@ -8329,7 +8333,17 @@ function write_wb_xml(wb/*:Workbook*//*::, opts:?WriteOpts*/)/*:string*/ { var sheets = wb.Workbook && wb.Workbook.Sheets || []; var i = 0; - /* bookViews */ + /* bookViews only written if first worksheet is hidden */ + if(sheets && sheets[0] && !!sheets[0].Hidden) { + o[o.length] = ""; + for(i = 0; i != wb.SheetNames.length; ++i) { + if(!sheets[i]) break; + if(!sheets[i].Hidden) break; + } + if(i == wb.SheetNames.length) i = 0; + o[o.length] = ''; + o[o.length] = ""; + } o[o.length] = ""; for(i = 0; i != wb.SheetNames.length; ++i) { @@ -8712,7 +8726,8 @@ function fix_opts_func(defaults/*:Array >*/)/*:{(o:any):void}*/ { }; } -var fix_read_opts = fix_opts_func([ +var fix_read_opts = function(opts) { +fix_opts_func([ ['cellNF', false], /* emit cell number format string as .z */ ['cellHTML', true], /* emit html string as .h */ ['cellFormula', true], /* emit formulae as .f */ @@ -8731,8 +8746,8 @@ var fix_read_opts = fix_opts_func([ ['password',''], /* password */ ['WTF', false] /* WTF mode (throws errors) */ -]); - +])(opts); +}; var fix_write_opts = fix_opts_func([ ['cellDates', false], /* write date cells with type `d` */ @@ -9564,7 +9579,6 @@ function sheet_to_formulae(sheet/*:Worksheet*/)/*:Array*/ { } function sheet_add_json(_ws/*:?Worksheet*/, js/*:Array*/, opts)/*:Worksheet*/ { - if(!js.length) return _ws; var o = opts || {}; var offset = +!o.skipHeader; var ws/*:Worksheet*/ = _ws || ({}/*:any*/); diff --git a/xlsx.mini.js b/xlsx.mini.js index 51050d85a1ecab2267667a3288833953cb60cbd5..c562db524d65914ad473fd2cd860dd2a7631d24f 100644 --- a/xlsx.mini.js +++ b/xlsx.mini.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.16.6'; +XLSX.version = '0.16.7'; var current_codepage = 1200, current_ansi = 1252; var VALID_ANSI = [ 874, 932, 936, 949, 950 ]; @@ -2839,6 +2839,7 @@ function fill(c,l) { var o = ""; while(o.length < l) o+=c; return o; } function fuzzynum(s) { var v = Number(s); if(!isNaN(v)) return v; + if(!/\d/.test(s)) return v; var wt = 1; var ss = s.replace(/([\d]),([\d])/g,"$1$2").replace(/[$]/g,"").replace(/[%]/g, function() { wt *= 100; return "";}); if(!isNaN(v = Number(ss))) return v / wt; @@ -3739,43 +3740,43 @@ function aoa_to_sheet(data, opts) { return sheet_add_aoa(null, data, opts); } /* [MS-OLEPS] 2.2 PropertyType */ //var VT_EMPTY = 0x0000; //var VT_NULL = 0x0001; -var VT_I2 = 0x0002; -var VT_I4 = 0x0003; +var VT_I2 = 0x0002; +var VT_I4 = 0x0003; //var VT_R4 = 0x0004; //var VT_R8 = 0x0005; //var VT_CY = 0x0006; //var VT_DATE = 0x0007; //var VT_BSTR = 0x0008; //var VT_ERROR = 0x000A; -var VT_BOOL = 0x000B; -var VT_VARIANT = 0x000C; +var VT_BOOL = 0x000B; +var VT_VARIANT = 0x000C; //var VT_DECIMAL = 0x000E; //var VT_I1 = 0x0010; //var VT_UI1 = 0x0011; //var VT_UI2 = 0x0012; -var VT_UI4 = 0x0013; +var VT_UI4 = 0x0013; //var VT_I8 = 0x0014; //var VT_UI8 = 0x0015; //var VT_INT = 0x0016; //var VT_UINT = 0x0017; -var VT_LPSTR = 0x001E; +var VT_LPSTR = 0x001E; //var VT_LPWSTR = 0x001F; var VT_FILETIME = 0x0040; -var VT_BLOB = 0x0041; +var VT_BLOB = 0x0041; //var VT_STREAM = 0x0042; //var VT_STORAGE = 0x0043; //var VT_STREAMED_Object = 0x0044; //var VT_STORED_Object = 0x0045; //var VT_BLOB_Object = 0x0046; -var VT_CF = 0x0047; +var VT_CF = 0x0047; //var VT_CLSID = 0x0048; //var VT_VERSIONED_STREAM = 0x0049; -var VT_VECTOR = 0x1000; +var VT_VECTOR = 0x1000; //var VT_ARRAY = 0x2000; -var VT_STRING = 0x0050; // 2.3.3.1.11 VtString -var VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString -var VT_CUSTOM = [VT_STRING, VT_USTR]; +var VT_STRING = 0x0050; // 2.3.3.1.11 VtString +var VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString +var VT_CUSTOM = [VT_STRING, VT_USTR]; /* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */ var DocSummaryPIDDSI = { @@ -3838,9 +3839,9 @@ var SpecialProperties = { 0x72627262: {} }; -(function () { - for (var y in SpecialProperties) if (Object.prototype.hasOwnProperty.call(SpecialProperties, y)) - DocSummaryPIDDSI[y] = SummaryPIDSI[y] = SpecialProperties[y]; +(function() { + for(var y in SpecialProperties) if(Object.prototype.hasOwnProperty.call(SpecialProperties, y)) + DocSummaryPIDDSI[y] = SummaryPIDSI[y] = SpecialProperties[y]; })(); var DocSummaryRE = evert_key(DocSummaryPIDDSI, "n"); @@ -3923,7 +3924,7 @@ var XLSFillPattern = [ 'gray0625' ]; -function rgbify(arr) { return arr.map(function (x) { return [(x >> 16) & 255, (x >> 8) & 255, x & 255]; }); } +function rgbify(arr) { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); } /* [MS-XLS] 2.5.161 */ /* [MS-XLSB] 2.5.75 Icv */ @@ -4033,7 +4034,8 @@ var BErr = { 0x2B: "#GETTING_DATA", 0xFF: "#WTF?" }; -var RBErr = evert_num(BErr);/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */ +var RBErr = evert_num(BErr); +/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */ /* 12.3 Part Summary */ /* 14.2 Part Summary */ /* [MS-XLSX] 2.1 Part Enumerations ; [MS-XLSB] 2.1.7 Part Enumeration */ @@ -4344,6 +4346,8 @@ var RELS = ({ XPATH: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath", XMISS: "http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing", XLINK: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink", + CXML: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml", + CXMLP: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps", VBA: "http://schemas.microsoft.com/office/2006/relationships/vbaProject" }); @@ -7373,7 +7377,7 @@ function write_ws_xml_sheetviews(ws, opts, idx, wb) { } function write_ws_xml_cell(cell, ref, ws, opts) { - if(cell.v === undefined && cell.f === undefined || cell.t === 'z') return ""; + if(cell.v === undefined && typeof cell.f !== "string" || cell.t === 'z') return ""; var vv = ""; var oldt = cell.t, oldv = cell.v; if(cell.t !== "z") switch(cell.t) { @@ -7409,7 +7413,7 @@ function write_ws_xml_cell(cell, ref, ws, opts) { o.t = "str"; break; } if(cell.t != oldt) { cell.t = oldt; cell.v = oldv; } - if(cell.f) { + if(typeof cell.f == "string" && cell.f) { var ff = cell.F && cell.F.slice(0, ref.length) == ref ? {t:"array", ref:cell.F} : null; v = writextag('f', escapexml(cell.f), ff) + (cell.v != null ? v : ""); } @@ -8236,7 +8240,17 @@ if(wb.Workbook.WBProps.CodeName) { workbookPr.codeName = wb.Workbook.WBProps.Cod var sheets = wb.Workbook && wb.Workbook.Sheets || []; var i = 0; - /* bookViews */ + /* bookViews only written if first worksheet is hidden */ + if(sheets && sheets[0] && !!sheets[0].Hidden) { + o[o.length] = ""; + for(i = 0; i != wb.SheetNames.length; ++i) { + if(!sheets[i]) break; + if(!sheets[i].Hidden) break; + } + if(i == wb.SheetNames.length) i = 0; + o[o.length] = ''; + o[o.length] = ""; + } o[o.length] = ""; for(i = 0; i != wb.SheetNames.length; ++i) { @@ -8619,7 +8633,8 @@ function fix_opts_func(defaults) { }; } -var fix_read_opts = fix_opts_func([ +var fix_read_opts = function(opts) { +fix_opts_func([ ['cellNF', false], /* emit cell number format string as .z */ ['cellHTML', true], /* emit html string as .h */ ['cellFormula', true], /* emit formulae as .f */ @@ -8638,8 +8653,8 @@ var fix_read_opts = fix_opts_func([ ['password',''], /* password */ ['WTF', false] /* WTF mode (throws errors) */ -]); - +])(opts); +}; var fix_write_opts = fix_opts_func([ ['cellDates', false], /* write date cells with type `d` */ @@ -9459,7 +9474,6 @@ function sheet_to_formulae(sheet) { } function sheet_add_json(_ws, js, opts) { - if(!js.length) return _ws; var o = opts || {}; var offset = +!o.skipHeader; var ws = _ws || ({});