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