forked from sheetjs/sheetjs
whitespace cleanup
This commit is contained in:
parent
7d7d26a9cd
commit
3d0315358a
49
xlsx.js
49
xlsx.js
@ -8,7 +8,7 @@ var ct2type = {
|
||||
"application/vnd.openxmlformats-officedocument.extended-properties+xml": "extprops",
|
||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml": "calcchains",
|
||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":"sheets",
|
||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml": "strs",
|
||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml": "strs",
|
||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":"styles",
|
||||
"application/vnd.openxmlformats-officedocument.theme+xml":"themes",
|
||||
"foo": "bar"
|
||||
@ -89,7 +89,7 @@ function parsexmltag(tag) {
|
||||
if(words.length === 1) return z;
|
||||
tag.match(/(\w+)="([^"]*)"/g).map(
|
||||
function(x){var y=x.match(/(\w+)="([^"]*)"/); z[y[1]] = y[2]; });
|
||||
return z;
|
||||
return z;
|
||||
}
|
||||
|
||||
|
||||
@ -105,16 +105,16 @@ function parseSheet(data) { //TODO: use a real xml parser
|
||||
//s.cells = {};
|
||||
var q = ["v","f"];
|
||||
if(!data.match(/<sheetData *\/>/))
|
||||
data.match(/<sheetData>([^]*)<\/sheetData>/m)[1].split("</row>").forEach(function(x) {
|
||||
data.match(/<sheetData>([^]*)<\/sheetData>/m)[1].split("</row>").forEach(function(x) {
|
||||
if(x === "") return;
|
||||
var row = parsexmltag(x.match(/<row[^>]*>/)[0]); //s.rows[row.r]=row.spans;
|
||||
if(refguess.s.r > row.r - 1) refguess.s.r = row.r - 1;
|
||||
if(refguess.s.r > row.r - 1) refguess.s.r = row.r - 1;
|
||||
if(refguess.e.r < row.r - 1) refguess.e.r = row.r - 1;
|
||||
|
||||
var cells = x.substr(x.indexOf('>')+1).split(/<c/);
|
||||
cells.forEach(function(c, idx) { if(c === "") return;
|
||||
c = "<c" + c;
|
||||
if(refguess.s.c > idx - 1) refguess.s.c = idx - 1;
|
||||
if(refguess.s.c > idx - 1) refguess.s.c = idx - 1;
|
||||
if(refguess.e.c < idx - 1) refguess.e.c = idx - 1;
|
||||
var cell = parsexmltag((c.match(/<c[^>]*>/)||[c])[0]); delete cell[0];
|
||||
var d = c.substr(c.indexOf('>')+1);
|
||||
@ -152,13 +152,13 @@ function matchtag(f,g) {return new RegExp('<'+f+'(?: xml:space="preserve")?>([^]
|
||||
|
||||
function parseVector(data) {
|
||||
var h = parsexmltag(data);
|
||||
|
||||
|
||||
var matches = data.match(new RegExp("<vt:" + h.baseType + ">(.*?)</vt:" + h.baseType + ">", 'g'));
|
||||
if(matches.length != h.size) throw "unexpected vector length " + matches.length + " != " + h.size;
|
||||
var res = [];
|
||||
matches.forEach(function(x) {
|
||||
var v = x.replace(/<[/]?vt:variant>/g,"").match(/<vt:([^>]*)>(.*)</);
|
||||
res.push({v:v[2], t:v[1]});
|
||||
res.push({v:v[2], t:v[1]});
|
||||
});
|
||||
return res;
|
||||
}
|
||||
@ -181,13 +181,13 @@ var utf8read = function(orig) {
|
||||
return out;
|
||||
};
|
||||
|
||||
function parseStrs(data) {
|
||||
function parseStrs(data) {
|
||||
var s = [];
|
||||
var sst = data.match(new RegExp("<sst ([^>]*)>([\\s\\S]*)<\/sst>","m"));
|
||||
if(sst) {
|
||||
s = sst[2].replace(/<si>/g,"").split(/<\/si>/).map(function(x) { var z = {};
|
||||
var y=x.match(/<(.*)>([\s\S]*)<\/.*/); if(y) z[y[1].split(" ")[0]]=utf8read(unescapexml(y[2])); return z;});
|
||||
|
||||
|
||||
sst = parsexmltag(sst[1]); s.count = sst.count; s.uniqueCount = sst.uniqueCount;
|
||||
}
|
||||
if(debug) s.rawdata = data;
|
||||
@ -199,7 +199,7 @@ function parseProps(data) {
|
||||
var strings = ["Application", "DocSecurity", "Company", "AppVersion"];
|
||||
var bools = ["HyperlinksChanged","SharedDoc","LinksUpToDate","ScaleCrop"];
|
||||
var xtra = ["HeadingPairs", "TitlesOfParts","dc:creator","cp:lastModifiedBy","dcterms:created", "dcterms:modified"];
|
||||
|
||||
|
||||
strings.forEach(function(f){p[f] = (data.match(matchtag(f))||[])[1];});
|
||||
bools.forEach(function(f){p[f] = (data.match(matchtag(f))||[])[1] == "true";});
|
||||
xtra.forEach(function(f) {
|
||||
@ -224,7 +224,7 @@ function parseProps(data) {
|
||||
p["LastModifiedBy"] = q["cp:lastModifiedBy"];
|
||||
p["CreatedDate"] = new Date(q["dcterms:created"]);
|
||||
p["ModifiedDate"] = new Date(q["dcterms:modified"]);
|
||||
|
||||
|
||||
if(debug) p.rawdata = data;
|
||||
return p;
|
||||
}
|
||||
@ -247,7 +247,7 @@ function parseDeps(data) {
|
||||
var ctext = {};
|
||||
|
||||
function parseCT(data) {
|
||||
var ct = { workbooks: [], sheets: [], calcchains: [], themes: [], styles: [],
|
||||
var ct = { workbooks: [], sheets: [], calcchains: [], themes: [], styles: [],
|
||||
coreprops: [], extprops: [], strs:[], xmlns: "" };
|
||||
if(data == null) return data;
|
||||
data.match(/<[^>]*>/g).forEach(function(x) {
|
||||
@ -256,7 +256,7 @@ function parseCT(data) {
|
||||
case '<?xml': break;
|
||||
case '<Types': ct.xmlns = y.xmlns; break;
|
||||
case '<Default': ctext[y.Extension] = y.ContentType; break;
|
||||
case '<Override':
|
||||
case '<Override':
|
||||
if(y.ContentType in ct2type)ct[ct2type[y.ContentType]].push(y.PartName);
|
||||
break;
|
||||
}
|
||||
@ -278,40 +278,39 @@ function parseWB(data) {
|
||||
case '<?xml': break;
|
||||
case '<workbook': wb.xmlns = y.xmlns; break;
|
||||
case '<fileVersion':
|
||||
//if(y.appName != "xl") throw "Unexpected workbook.appName: "+y.appName;
|
||||
delete y[0]; wb.AppVersion = y; break;
|
||||
case '<workbookPr': delete y[0]; wb.WBProps = y; break;
|
||||
case '<workbookPr/>': delete y[0]; wb.WBProps = y; break;
|
||||
case '<bookViews>': case '</bookViews>': break; // aggregate workbookView
|
||||
case '<workbookView': delete y[0]; wb.WBView.push(y); break;
|
||||
case '<sheets>': case '</sheets>': break; // aggregate sheet
|
||||
case '<sheet': delete y[0]; y.name = utf8read(y.name); wb.Sheets.push(y); break;
|
||||
case '<sheet': delete y[0]; y.name = utf8read(y.name); wb.Sheets.push(y); break;
|
||||
case '</extLst>': case '</workbook>': break;
|
||||
case '<workbookProtection/>': break; // LibreOffice
|
||||
case '<extLst>': break;
|
||||
case '<workbookProtection/>': break; // LibreOffice
|
||||
case '<extLst>': break;
|
||||
case '<calcPr': delete y[0]; wb.CalcPr = y; break;
|
||||
case '<calcPr/>': delete y[0]; wb.CalcPr = y; break;
|
||||
|
||||
|
||||
case '<mx:ArchID': break;
|
||||
case '<ext': pass=true; break; //TODO: check with versions of excel
|
||||
case '</ext>': pass=false; break;
|
||||
|
||||
case '</ext>': pass=false; break;
|
||||
|
||||
case '<definedNames/>': break;
|
||||
case '<definedNames>': pass=true; break;
|
||||
case '</definedNames>': pass=false; break;
|
||||
/* Introduced for Excel2013 Baseline */
|
||||
case '<mc:AlternateContent': pass=true; break; // TODO: do something
|
||||
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;
|
||||
|
||||
|
||||
var z;
|
||||
for(z in WBPropsDef) if(null == wb.WBProps[z]) wb.WBProps[z] = WBPropsDef[z];
|
||||
wb.WBView.forEach(function(w){for(var z in WBViewDef) if(null==w[z]) w[z]=WBViewDef[z]; });
|
||||
for(z in CalcPrDef) if(null == wb.CalcPr[z]) wb.CalcPr[z] = CalcPrDef[z];
|
||||
wb.Sheets.forEach(function(w){for(var z in SheetDef) if(null==w[z]) w[z]=SheetDef[z]; });
|
||||
wb.Sheets.forEach(function(w){for(var z in SheetDef) if(null==w[z]) w[z]=SheetDef[z]; });
|
||||
if(debug) wb.rawdata = data;
|
||||
return wb;
|
||||
}
|
||||
@ -468,7 +467,7 @@ function sheet_to_csv(sheet) {
|
||||
var out = "";
|
||||
if(sheet["!ref"]) {
|
||||
var r = utils.decode_range(sheet["!ref"]);
|
||||
for(var R = r.s.r; R <= r.e.r; ++R) {
|
||||
for(var R = r.s.r; R <= r.e.r; ++R) {
|
||||
var row = [];
|
||||
for(var C = r.s.c; C <= r.e.c; ++C) {
|
||||
var val = sheet[utils.encode_cell({c:C,r:R})];
|
||||
@ -502,6 +501,6 @@ if(typeof require !== 'undefined' && typeof exports !== 'undefined') {
|
||||
var zip = XLSX.read(args[0], {type:'file'});
|
||||
console.log(zip.Sheets);
|
||||
};
|
||||
if(typeof module !== 'undefined' && require.main === module)
|
||||
if(typeof module !== 'undefined' && require.main === module)
|
||||
exports.main(process.argv.slice(2));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user