diff --git a/package.json b/package.json index 612a824..aae9b56 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xlsx", - "version": "0.0.7", + "version": "0.0.8", "author": "Niggler", "description": "(one day) a full-featured XLSX parser and writer. For now, primitive parser", "keywords": [ diff --git a/xlsx.js b/xlsx.js index 6acaebb..ee626c3 100644 --- a/xlsx.js +++ b/xlsx.js @@ -115,7 +115,7 @@ function parseSheet(data) { //TODO: use a real xml parser var p = {}; q.forEach(function(f){var x=d.match(matchtag(f));if(x)p[f]=unescapexml(x[1]);}); /* SCHEMA IS ACTUALLY INCORRECT HERE. IF A CELL HAS NO T, EMIT "" */ - if(cell.t === undefined) { p.t = "str"; p.v = undefined; } + if(cell.t === undefined && p.v === undefined) { p.t = "str"; p.v = undefined; } else p.t = (cell.t ? cell.t : "n"); // default is "n" in schema switch(p.t) { case 'n': p.v = parseFloat(p.v); break; @@ -215,6 +215,7 @@ function parseCT(data) { function parseWB(data) { var wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: "" }; + var pass = false; data.match(/<[^>]*>/g).forEach(function(x) { var y = parsexmltag(x); switch(y[0]) { @@ -229,15 +230,20 @@ function parseWB(data) { case '<workbookView': delete y[0]; wb.WBView.push(y); break; case '<sheets>': case '</sheets>': break; // aggregate sheet case '<sheet': delete y[0]; wb.Sheets.push(y); break; - case '</ext>': case '</extLst>': case '</workbook>': break; + case '</extLst>': case '</workbook>': break; case '<extLst>': break; case '<calcPr': delete y[0]; wb.CalcPr = y; break; case '<calcPr/>': delete y[0]; wb.CalcPr = y; break; case '<definedNames/>': break; case '<mx:ArchID': break; - case '<ext': break;//TODO: check with different versions of excel - default: console.log(y); + case '<ext': pass=true; break; //TODO: check with versions of excel + case '</ext>': pass=false; break; + + /* Introduced for Excel2013 Baseline */ + case '<mc:AlternateContent': pass=true; break; // TODO: do something + case '</mc:AlternateContent>': pass=false; break; // TODO: do something + default: if(!pass) console.error("WB Tag",x,y); } }); if(wb.xmlns !== XMLNS_WB) throw "Unknown Namespace: " + wb.xmlns;