From 8938336e1c001593e949612b8d95dcb2556e1e2c Mon Sep 17 00:00:00 2001 From: Alex Litskevich Date: Sun, 19 Mar 2017 20:26:13 +0300 Subject: [PATCH] XLSX Defined Names closes #162 h/t @alitskevich --- bits/72_wbxml.js | 20 +++++++++++++++++--- xlsx.flow.js | 20 +++++++++++++++++--- xlsx.js | 20 +++++++++++++++++--- 3 files changed, 51 insertions(+), 9 deletions(-) diff --git a/bits/72_wbxml.js b/bits/72_wbxml.js index 9048628..2c1e134 100644 --- a/bits/72_wbxml.js +++ b/bits/72_wbxml.js @@ -2,9 +2,11 @@ var wbnsregex = /<\w+:workbook/; function parse_wb_xml(data, opts)/*:WorkbookFile*/ { if(!data) throw new Error("Could not find file"); - var wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: "" }; + var wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, Names:{'!names':[]}, xmlns: "" }; var pass = false, xmlns = "xmlns"; - (data.match(tagregex)||[]).forEach(function xml_wb(x) { + var dname = {}, dnstart = 0; + /*(data.match(tagregex)||[]).forEach */ + data.replace(tagregex, function xml_wb(x, idx) { var y = parsexmltag(x); switch(strip_ns(y[0])) { case '': case '': pass=false; break; /* 18.2.5 definedName CT_DefinedName + */ - case '': case '': break; + case '': { + dname.Ref = data.slice(dnstart, idx); + wb.Names[dname.Name] = dname; + wb.Names['!names'].push(dname.Name); + } break; + case '': break; /* 18.2.2 calcPr CT_CalcPr ? */ case '': case '': pass=false; break; /* 18.2.5 definedName CT_DefinedName + */ - case '': case '': break; + case '': { + dname.Ref = data.slice(dnstart, idx); + wb.Names[dname.Name] = dname; + wb.Names['!names'].push(dname.Name); + } break; + case '': break; /* 18.2.2 calcPr CT_CalcPr ? */ case '': case '': pass=false; break; /* 18.2.5 definedName CT_DefinedName + */ - case '': case '': break; + case '': { + dname.Ref = data.slice(dnstart, idx); + wb.Names[dname.Name] = dname; + wb.Names['!names'].push(dname.Name); + } break; + case '': break; /* 18.2.2 calcPr CT_CalcPr ? */ case '