forked from sheetjs/sheetjs
		
	Named Ranges silently ignored
Fixes #4 This is not the final fix -- the named ranges should be parsed
This commit is contained in:
		
							parent
							
								
									b275e4d4b5
								
							
						
					
					
						commit
						49c3d865b8
					
				@ -91,6 +91,9 @@ function handleDragover(e) {
 | 
			
		||||
	e.preventDefault();
 | 
			
		||||
	e.dataTransfer.dropEffect = 'copy';
 | 
			
		||||
}
 | 
			
		||||
drop.addEventListener('dragover', handleDragover, false);
 | 
			
		||||
drop.addEventListener('drop', handleDrop, false);
 | 
			
		||||
 | 
			
		||||
if(drop.addEventListener) { // IE compatibility
 | 
			
		||||
	drop.addEventListener('dragover', handleDragover, false);
 | 
			
		||||
	drop.addEventListener('drop', handleDrop, false);
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										32
									
								
								xlsx.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										32
									
								
								xlsx.js
									
									
									
									
									
								
							@ -142,6 +142,19 @@ function parseSheet(data) { //TODO: use a real xml parser
 | 
			
		||||
// matches <foo>...</foo> extracts content
 | 
			
		||||
function matchtag(f,g) {return new RegExp('<' + f + '>([\\s\\S]*)</' + f + '>',g||"");}
 | 
			
		||||
 | 
			
		||||
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]}); 
 | 
			
		||||
	});
 | 
			
		||||
	return res;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function parseStrs(data) { 
 | 
			
		||||
	var s = [];
 | 
			
		||||
	var sst = data.match(new RegExp("<sst ([^>]*)>([\\s\\S]*)<\/sst>","m"));
 | 
			
		||||
@ -168,8 +181,19 @@ function parseProps(data) {
 | 
			
		||||
		if(cur && cur.length > 0) q[f] = cur[1];
 | 
			
		||||
	});
 | 
			
		||||
 | 
			
		||||
	if(q["HeadingPairs"]) p["Worksheets"] = parseInt(q["HeadingPairs"].match(new RegExp("<vt:i4>(.*)<\/vt:i4>"))[1], 10); 
 | 
			
		||||
	if(q["TitlesOfParts"]) p["SheetNames"] = q["TitlesOfParts"].match(new RegExp("<vt:lpstr>([^<]*)<\/vt:lpstr>","g")).map(function(x){return x.match(new RegExp("<vt:lpstr>([^<]*)<\/vt:lpstr>"))[1];});
 | 
			
		||||
	if(q["HeadingPairs"] && q["TitlesOfParts"]) {
 | 
			
		||||
		var v = parseVector(q["HeadingPairs"]);
 | 
			
		||||
		var j = 0, widx = 0;
 | 
			
		||||
		for(var i = 0; i !== v.length; ++i) {
 | 
			
		||||
			switch(v[i].v) {
 | 
			
		||||
				case "Worksheets": widx = j; p["Worksheets"] = +v[++i]; break;
 | 
			
		||||
				case "Named Ranges": ++i; break; // TODO: Handle Named Ranges
 | 
			
		||||
				default: throw "Unrecognized key in Heading Pairs: " + v[i].v;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		var parts = parseVector(q["TitlesOfParts"]);
 | 
			
		||||
		p["SheetNames"] = parts.slice(widx, widx + p["Worksheets"])
 | 
			
		||||
	}
 | 
			
		||||
	p["Creator"] = q["dc:creator"];
 | 
			
		||||
	p["LastModifiedBy"] = q["cp:lastModifiedBy"];
 | 
			
		||||
	p["CreatedDate"] = new Date(q["dcterms:created"]);
 | 
			
		||||
@ -242,11 +266,13 @@ function parseWB(data) {
 | 
			
		||||
			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': pass=true; break; //TODO: check with versions of excel
 | 
			
		||||
			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=false; break; // TODO: do something
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user