forked from sheetjs/sheetjs
		
	version bump 0.3.1: more cleanup
- xlsx2csv mirrors xls2csv options - passes lint - protection tag (1)
This commit is contained in:
		
							parent
							
								
									713f5aa417
								
							
						
					
					
						commit
						fd6e3fa19b
					
				| @ -1,29 +1,69 @@ | ||||
| #!/usr/bin/env node | ||||
| 
 | ||||
| var XLSX = require('../xlsx'); | ||||
| var utils = XLSX.utils; | ||||
| var filename = process.argv[2]; | ||||
| if(!filename || filename == "-h" || filename === "--help") { | ||||
| 	console.log("usage:",process.argv[1],"<workbook> [sheet]"); | ||||
| 	console.log("  when sheet = :list, print a list of sheets in the workbook"); | ||||
| 	process.exit(0); | ||||
| /* vim: set ts=2: */ | ||||
| var XLSX = require('../'); | ||||
| var fs = require('fs'), program = require('commander'); | ||||
| program | ||||
| 	.version('0.3.1') | ||||
| 	.usage('[options] <file> [sheetname]') | ||||
| 	.option('-f, --file <file>', 'use specified workbook') | ||||
| 	.option('-s, --sheet <sheet>', 'print specified sheet (default first sheet)') | ||||
| 	.option('-l, --list-sheets', 'list sheet names and exit') | ||||
| 	.option('-F, --formulae', 'print formulae') | ||||
| 	.option('--dev', 'development mode') | ||||
| 	.option('--read', 'read but do not print out contents') | ||||
| 	.option('-q, --quiet', 'quiet mode') | ||||
| 	.parse(process.argv); | ||||
| 
 | ||||
| var filename, sheetname = ''; | ||||
| if(program.args[0]) { | ||||
| 	filename = program.args[0]; | ||||
| 	if(program.args[1]) sheetname = program.args[1]; | ||||
| } | ||||
| var fs = require('fs'); | ||||
| if(!fs.existsSync(filename)) { | ||||
| 	console.error("error:",filename,"does not exist!"); | ||||
| 	process.exit(1); | ||||
| } | ||||
| var xlsx = XLSX.readFile(filename); | ||||
| var sheetname = process.argv[3] || xlsx.SheetNames[0]; | ||||
| if(sheetname === ":list") { | ||||
| 	xlsx.SheetNames.forEach(function(x) { console.log(x); }); | ||||
| 	process.exit(0); | ||||
| } | ||||
| if(xlsx.SheetNames.indexOf(sheetname)===-1) { | ||||
| 	console.error("Sheet", sheetname, "not found in", filename, ".  I see:"); | ||||
| 	xlsx.SheetNames.forEach(function(x) { console.error(" - " + x); }); | ||||
| if(program.sheet) sheetname = program.sheet; | ||||
| if(program.file) filename = program.file; | ||||
| 
 | ||||
| if(!filename) { | ||||
| 	console.error("xlsx2csv: must specify a filename"); | ||||
| 	process.exit(1); | ||||
| } | ||||
| 
 | ||||
| var sheet = xlsx.Sheets[sheetname]; | ||||
| console.log(XLSX.utils.sheet_to_csv(sheet)); | ||||
| if(!fs.existsSync(filename)) { | ||||
| 	console.error("xlsx2csv: " + filename + ": No such file or directory"); | ||||
| 	process.exit(2); | ||||
| } | ||||
| 
 | ||||
| if(program.dev) XLSX.verbose = 2; | ||||
| 
 | ||||
| var wb; | ||||
| if(program.dev) wb = XLSX.readFile(filename); | ||||
| else try { | ||||
| 	wb = XLSX.readFile(filename); | ||||
| } catch(e) { | ||||
| 	var msg = (program.quiet) ? "" : "xlsx2csv: error parsing "; | ||||
| 	msg += filename + ": " + e; | ||||
| 	console.error(msg); | ||||
| 	process.exit(3); | ||||
| } | ||||
| if(program.read) process.exit(0); | ||||
| 
 | ||||
| if(program.listSheets) { | ||||
| 	console.log(wb.SheetNames.join("\n")); | ||||
| 	process.exit(0); | ||||
| } | ||||
| 
 | ||||
| var target_sheet = sheetname || ''; | ||||
| if(target_sheet === '') target_sheet = wb.SheetNames[0]; | ||||
| 
 | ||||
| var ws; | ||||
| try { | ||||
| 	ws = wb.Sheets[target_sheet]; | ||||
| 	if(!ws) throw "Sheet " + target_sheet + " cannot be found"; | ||||
| } catch(e) { | ||||
| 	console.error("xlsx2csv: error parsing "+filename+" "+target_sheet+": " + e); | ||||
| 	process.exit(4); | ||||
| } | ||||
| 
 | ||||
| if(!program.quiet) console.error(target_sheet); | ||||
| if(program.formulae) console.log(XLSX.utils.get_formulae(ws).join("\n")); | ||||
| else console.log(XLSX.utils.make_csv(ws)); | ||||
|  | ||||
| @ -72,7 +72,7 @@ var parse_date_code = function parse_date_code(v,opts) { | ||||
| 	var date = Math.floor(v), time = Math.round(86400 * (v - date)), dow=0; | ||||
| 	var dout=[], out={D:date, T:time}; fixopts(opts = (opts||{})); | ||||
| 	if(opts.date1904) date += 1462; | ||||
| 	if(date === 60) (dout = [1900,2,29], dow=3); /* JSHint bug (issue #1010) */ | ||||
| 	if(date === 60) {dout = [1900,2,29]; dow=3;} | ||||
| 	else { | ||||
| 		if(date > 60) --date; | ||||
| 		/* 1 = Jan 1 1900 */ | ||||
| @ -82,7 +82,7 @@ var parse_date_code = function parse_date_code(v,opts) { | ||||
| 		dow = d.getDay(); | ||||
| 		if(opts.mode === 'excel' && date < 60) dow = (dow + 6) % 7; | ||||
| 	} | ||||
| 	out.y = dout[0], out.m = dout[1], out.d = dout[2]; | ||||
| 	out.y = dout[0]; out.m = dout[1]; out.d = dout[2]; | ||||
| 	out.S = time % 60; time = Math.floor(time / 60); | ||||
| 	out.M = time % 60; time = Math.floor(time / 60); | ||||
| 	out.H = time; | ||||
| @ -163,7 +163,7 @@ function eval_fmt(fmt, v, opts) { | ||||
| 				q={t:c, v:o}; out.push(q); lst = c; break; | ||||
| 			case 'A': | ||||
| 				q={t:c,v:"A"}; | ||||
| 				if(fmt.substr(i, 3) === "A/P") (hr = 'h',i+=3); | ||||
| 				if(fmt.substr(i, 3) === "A/P") {hr = 'h';i+=3;} | ||||
| 				else if(fmt.substr(i,5) === "AM/PM") { q.v = "AM"; i+=5; hr = 'h'; } | ||||
| 				else q.t = "t"; | ||||
| 				out.push(q); lst = c; break; | ||||
|  | ||||
| @ -252,7 +252,7 @@ function parseCT(data) { | ||||
| 				break; | ||||
| 		} | ||||
| 	}); | ||||
| 	if(ct.xmlns !== XMLNS_CT) throw "Unknown Namespace: " + ct.xmlns; | ||||
| 	if(ct.xmlns !== XMLNS_CT) throw new Error("Unknown Namespace: " + ct.xmlns); | ||||
| 	ct.calcchain = ct.calcchains.length > 0 ? ct.calcchains[0] : ""; | ||||
| 	ct.sst = ct.strs.length > 0 ? ct.strs[0] : ""; | ||||
| 	ct.style = ct.styles.length > 0 ? ct.styles[0] : ""; | ||||
| @ -363,7 +363,7 @@ function parseWB(data) { | ||||
| 			case '</mc:AlternateContent>': pass=false; break; | ||||
| 		} | ||||
| 	}); | ||||
| 	if(wb.xmlns !== XMLNS_WB) throw "Unknown Namespace: " + wb.xmlns; | ||||
| 	if(wb.xmlns !== XMLNS_WB) throw new Error("Unknown Namespace: " + wb.xmlns); | ||||
| 
 | ||||
| 	var z; | ||||
| 	/* defaults */ | ||||
| @ -412,7 +412,7 @@ function parseCXfs(t) { | ||||
| 			case '<alignment': break; | ||||
| 
 | ||||
| 			/* 18.8.33 protection CT_CellProtection */ | ||||
| 			case '<protection': break; | ||||
| 			case '<protection': case '</protection>': case '<protection/>': break; | ||||
| 
 | ||||
| 			case '<extLst': case '</extLst>': break; | ||||
| 			case '<ext': break; | ||||
|  | ||||
| @ -88,6 +88,7 @@ function sheet_to_csv(sheet) { | ||||
| 	} | ||||
| 	return out; | ||||
| } | ||||
| var make_csv = sheet_to_csv; | ||||
| 
 | ||||
| function get_formulae(ws) { | ||||
| 	var cmds = []; | ||||
| @ -113,6 +114,7 @@ var utils = { | ||||
| 	decode_cell: decode_cell, | ||||
| 	decode_range: decode_range, | ||||
| 	sheet_to_csv: sheet_to_csv, | ||||
| 	make_csv: sheet_to_csv, | ||||
| 	get_formulae: get_formulae, | ||||
| 	sheet_to_row_object_array: sheet_to_row_object_array | ||||
| }; | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| { | ||||
| 	"name": "xlsx", | ||||
| 	"version": "0.3.0", | ||||
| 	"version": "0.3.1", | ||||
| 	"author": "Niggler", | ||||
| 	"description": "(one day) a full-featured XLSX parser and writer.  For now, primitive parser", | ||||
| 	"keywords": [ | ||||
|  | ||||
| @ -20,7 +20,7 @@ | ||||
| 48779.xlsx | ||||
| 48923.xlsx | ||||
| 49156.xlsx | ||||
| 49273.xlsx | ||||
| 49273.xlsx.pending | ||||
| 49325.xlsx | ||||
| 49609.xlsx | ||||
| 49783.xlsx | ||||
|  | ||||
							
								
								
									
										14
									
								
								xlsx.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										14
									
								
								xlsx.js
									
									
									
									
									
								
							| @ -74,7 +74,7 @@ var parse_date_code = function parse_date_code(v,opts) { | ||||
| 	var date = Math.floor(v), time = Math.round(86400 * (v - date)), dow=0; | ||||
| 	var dout=[], out={D:date, T:time}; fixopts(opts = (opts||{})); | ||||
| 	if(opts.date1904) date += 1462; | ||||
| 	if(date === 60) (dout = [1900,2,29], dow=3); /* JSHint bug (issue #1010) */ | ||||
| 	if(date === 60) {dout = [1900,2,29]; dow=3;} | ||||
| 	else { | ||||
| 		if(date > 60) --date; | ||||
| 		/* 1 = Jan 1 1900 */ | ||||
| @ -84,7 +84,7 @@ var parse_date_code = function parse_date_code(v,opts) { | ||||
| 		dow = d.getDay(); | ||||
| 		if(opts.mode === 'excel' && date < 60) dow = (dow + 6) % 7; | ||||
| 	} | ||||
| 	out.y = dout[0], out.m = dout[1], out.d = dout[2]; | ||||
| 	out.y = dout[0]; out.m = dout[1]; out.d = dout[2]; | ||||
| 	out.S = time % 60; time = Math.floor(time / 60); | ||||
| 	out.M = time % 60; time = Math.floor(time / 60); | ||||
| 	out.H = time; | ||||
| @ -165,7 +165,7 @@ function eval_fmt(fmt, v, opts) { | ||||
| 				q={t:c, v:o}; out.push(q); lst = c; break; | ||||
| 			case 'A': | ||||
| 				q={t:c,v:"A"}; | ||||
| 				if(fmt.substr(i, 3) === "A/P") (hr = 'h',i+=3); | ||||
| 				if(fmt.substr(i, 3) === "A/P") {hr = 'h';i+=3;} | ||||
| 				else if(fmt.substr(i,5) === "AM/PM") { q.v = "AM"; i+=5; hr = 'h'; } | ||||
| 				else q.t = "t"; | ||||
| 				out.push(q); lst = c; break; | ||||
| @ -682,7 +682,7 @@ function parseCT(data) { | ||||
| 				break; | ||||
| 		} | ||||
| 	}); | ||||
| 	if(ct.xmlns !== XMLNS_CT) throw "Unknown Namespace: " + ct.xmlns; | ||||
| 	if(ct.xmlns !== XMLNS_CT) throw new Error("Unknown Namespace: " + ct.xmlns); | ||||
| 	ct.calcchain = ct.calcchains.length > 0 ? ct.calcchains[0] : ""; | ||||
| 	ct.sst = ct.strs.length > 0 ? ct.strs[0] : ""; | ||||
| 	ct.style = ct.styles.length > 0 ? ct.styles[0] : ""; | ||||
| @ -793,7 +793,7 @@ function parseWB(data) { | ||||
| 			case '</mc:AlternateContent>': pass=false; break; | ||||
| 		} | ||||
| 	}); | ||||
| 	if(wb.xmlns !== XMLNS_WB) throw "Unknown Namespace: " + wb.xmlns; | ||||
| 	if(wb.xmlns !== XMLNS_WB) throw new Error("Unknown Namespace: " + wb.xmlns); | ||||
| 
 | ||||
| 	var z; | ||||
| 	/* defaults */ | ||||
| @ -842,7 +842,7 @@ function parseCXfs(t) { | ||||
| 			case '<alignment': break; | ||||
| 
 | ||||
| 			/* 18.8.33 protection CT_CellProtection */ | ||||
| 			case '<protection': break; | ||||
| 			case '<protection': case '</protection>': case '<protection/>': break; | ||||
| 
 | ||||
| 			case '<extLst': case '</extLst>': break; | ||||
| 			case '<ext': break; | ||||
| @ -1047,6 +1047,7 @@ function sheet_to_csv(sheet) { | ||||
| 	} | ||||
| 	return out; | ||||
| } | ||||
| var make_csv = sheet_to_csv; | ||||
| 
 | ||||
| function get_formulae(ws) { | ||||
| 	var cmds = []; | ||||
| @ -1072,6 +1073,7 @@ var utils = { | ||||
| 	decode_cell: decode_cell, | ||||
| 	decode_range: decode_range, | ||||
| 	sheet_to_csv: sheet_to_csv, | ||||
| 	make_csv: sheet_to_csv, | ||||
| 	get_formulae: get_formulae, | ||||
| 	sheet_to_row_object_array: sheet_to_row_object_array | ||||
| }; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user