forked from sheetjs/sheetjs
		
	make stream utils available to Node ESM
- sheet_to_csv blankrows/strip (fixes #2274 h/t @dmongit) - sheet_to_json fix dedupe (see #2460 h/t @giuliohome) - mini build browser tests
This commit is contained in:
		
							parent
							
								
									a32b30414b
								
							
						
					
					
						commit
						c6a86cfe98
					
				| @ -238,6 +238,17 @@ function write_vt(s, xlsx/*:?boolean*/)/*:string*/ { | ||||
| 	throw new Error("Unable to serialize " + s); | ||||
| } | ||||
| 
 | ||||
| function xlml_normalize(d)/*:string*/ { | ||||
| 	if(has_buf &&/*::typeof Buffer !== "undefined" && d != null && d instanceof Buffer &&*/ Buffer.isBuffer(d)) return d.toString('utf8'); | ||||
| 	if(typeof d === 'string') return d; | ||||
| 	/* duktape */ | ||||
| 	if(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d))); | ||||
| 	throw new Error("Bad input format: expected Buffer or string"); | ||||
| } | ||||
| /* UOS uses CJK in tags */ | ||||
| var xlmlregex = /<(\/?)([^\s?><!\/:]*:|)([^\s?<>:\/]+)(?:[\s?:\/][^>]*)?>/mg; | ||||
| //var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
 | ||||
| 
 | ||||
| var XMLNS = ({ | ||||
| 	'dc': 'http://purl.org/dc/elements/1.1/', | ||||
| 	'dcterms': 'http://purl.org/dc/terms/', | ||||
|  | ||||
| @ -162,18 +162,7 @@ function xlml_clean_comment(comment/*:any*/) { | ||||
| 	comment.v = comment.w = comment.ixfe = undefined; | ||||
| } | ||||
| 
 | ||||
| function xlml_normalize(d)/*:string*/ { | ||||
| 	if(has_buf &&/*::typeof Buffer !== "undefined" && d != null && d instanceof Buffer &&*/ Buffer.isBuffer(d)) return d.toString('utf8'); | ||||
| 	if(typeof d === 'string') return d; | ||||
| 	/* duktape */ | ||||
| 	if(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d))); | ||||
| 	throw new Error("Bad input format: expected Buffer or string"); | ||||
| } | ||||
| 
 | ||||
| /* TODO: Everything */ | ||||
| /* UOS uses CJK in tags */ | ||||
| var xlmlregex = /<(\/?)([^\s?><!\/:]*:|)([^\s?<>:\/]+)(?:[\s?:\/][^>]*)?>/mg; | ||||
| //var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
 | ||||
| function parse_xlml_xml(d, _opts)/*:Workbook*/ { | ||||
| 	var opts = _opts || {}; | ||||
| 	make_ssf(SSF); | ||||
|  | ||||
| @ -59,7 +59,7 @@ var HTML_ = (function() { | ||||
| 		return ws; | ||||
| 	} | ||||
| 	function html_to_book(str/*:string*/, opts)/*:Workbook*/ { | ||||
| 		var mtch = str.match(/<table.*?>[\s\S]*?<\/table>/gi); | ||||
| 		var mtch = str.match(/<table[\s\S]*?>[\s\S]*?<\/table>/gi); | ||||
| 		if(!mtch || mtch.length == 0) throw new Error("Invalid HTML: could not find <table>"); | ||||
| 		if(mtch.length == 1) return sheet_to_workbook(html_to_sheet(mtch[0], opts), opts); | ||||
| 		var wb = utils.book_new(); | ||||
|  | ||||
| @ -77,7 +77,7 @@ function sheet_to_json(sheet/*:Worksheet*/, opts/*:?Sheet2JSONOpts*/) { | ||||
| 				if(val == null) val = {w: "__EMPTY", t: "s"}; | ||||
| 				vv = v = format_cell(val, null, o); | ||||
| 				counter = 0; | ||||
| 				for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + "_" + (++counter); | ||||
| 				for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) { vv = v + "_" + (++counter); CC = -1; } | ||||
| 				hdr[C] = vv; | ||||
| 		} | ||||
| 	} | ||||
| @ -132,7 +132,7 @@ function sheet_to_csv(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/)/*:string*/ { | ||||
| 		row = make_csv_row(sheet, r, R, cols, fs, rs, FS, o); | ||||
| 		if(row == null) { continue; } | ||||
| 		if(o.strip) row = row.replace(endregex,""); | ||||
| 		out.push((w++ ? RS : "") + row); | ||||
| 		if(row || (o.blankrows !== false)) out.push((w++ ? RS : "") + row); | ||||
| 	} | ||||
| 	delete o.dense; | ||||
| 	return out.join(""); | ||||
|  | ||||
							
								
								
									
										228
									
								
								bits/97_node.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										228
									
								
								bits/97_node.js
									
									
									
									
									
								
							| @ -1,124 +1,120 @@ | ||||
| if(has_buf && typeof require != 'undefined') (function() { | ||||
| 	var strmod = require('stream'); | ||||
| 	if(!strmod) return; | ||||
| 	var Readable = strmod.Readable; | ||||
| 	if(!Readable) return; | ||||
| var _Readable; | ||||
| function set_readable(R) { _Readable = R; } | ||||
| 
 | ||||
| 	var write_csv_stream = function(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) { | ||||
| 		var stream = Readable(); | ||||
| 		var o = opts == null ? {} : opts; | ||||
| 		if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; } | ||||
| 		var r = safe_decode_range(sheet["!ref"]); | ||||
| 		var FS = o.FS !== undefined ? o.FS : ",", fs = FS.charCodeAt(0); | ||||
| 		var RS = o.RS !== undefined ? o.RS : "\n", rs = RS.charCodeAt(0); | ||||
| 		var endregex = new RegExp((FS=="|" ? "\\|" : FS)+"+$"); | ||||
| 		var row/*:?string*/ = "", cols/*:Array<string>*/ = []; | ||||
| 		o.dense = Array.isArray(sheet); | ||||
| 		var colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet["!cols"] || []; | ||||
| 		var rowinfo/*:Array<RowInfo>*/ = o.skipHidden && sheet["!rows"] || []; | ||||
| 		for(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C); | ||||
| 		var R = r.s.r; | ||||
| 		var BOM = false, w = 0; | ||||
| 		stream._read = function() { | ||||
| 			if(!BOM) { BOM = true; return stream.push("\uFEFF"); } | ||||
| 			while(R <= r.e.r) { | ||||
| 				++R; | ||||
| 				if ((rowinfo[R-1]||{}).hidden) continue; | ||||
| 				row = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o); | ||||
| 				if(row != null) { | ||||
| 					if(o.strip) row = row.replace(endregex,""); | ||||
| 					return stream.push((w++ ? RS : "") + row); | ||||
| 				} | ||||
| 			} | ||||
| 			return stream.push(null); | ||||
| 		}; | ||||
| 		return stream; | ||||
| 	}; | ||||
| 
 | ||||
| 	var write_html_stream = function(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*/) { | ||||
| 		var stream = Readable(); | ||||
| 
 | ||||
| 		var o = opts || {}; | ||||
| 		var header = o.header != null ? o.header : HTML_.BEGIN; | ||||
| 		var footer = o.footer != null ? o.footer : HTML_.END; | ||||
| 		stream.push(header); | ||||
| 		var r = decode_range(ws['!ref']); | ||||
| 		o.dense = Array.isArray(ws); | ||||
| 		stream.push(HTML_._preamble(ws, r, o)); | ||||
| 		var R = r.s.r; | ||||
| 		var end = false; | ||||
| 		stream._read = function() { | ||||
| 			if(R > r.e.r) { | ||||
| 				if(!end) { end = true; stream.push("</table>" + footer); } | ||||
| 				return stream.push(null); | ||||
| 			} | ||||
| 			while(R <= r.e.r) { | ||||
| 				stream.push(HTML_._row(ws, r, R, o)); | ||||
| 				++R; | ||||
| 				break; | ||||
| 			} | ||||
| 		}; | ||||
| 		return stream; | ||||
| 	}; | ||||
| 
 | ||||
| 	var write_json_stream = function(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) { | ||||
| 		var stream = Readable({objectMode:true}); | ||||
| 
 | ||||
| 		if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; } | ||||
| 		var val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array<any>*/ = [], v=0, vv=""; | ||||
| 		var r = {s:{r:0,c:0},e:{r:0,c:0}}; | ||||
| 		var o = opts || {}; | ||||
| 		var range = o.range != null ? o.range : sheet["!ref"]; | ||||
| 		if(o.header === 1) header = 1; | ||||
| 		else if(o.header === "A") header = 2; | ||||
| 		else if(Array.isArray(o.header)) header = 3; | ||||
| 		switch(typeof range) { | ||||
| 			case 'string': r = safe_decode_range(range); break; | ||||
| 			case 'number': r = safe_decode_range(sheet["!ref"]); r.s.r = range; break; | ||||
| 			default: r = range; | ||||
| 		} | ||||
| 		if(header > 0) offset = 0; | ||||
| 		var rr = encode_row(r.s.r); | ||||
| 		var cols/*:Array<string>*/ = []; | ||||
| 		var counter = 0; | ||||
| 		var dense = Array.isArray(sheet); | ||||
| 		var R = r.s.r, C = 0, CC = 0; | ||||
| 		if(dense && !sheet[R]) sheet[R] = []; | ||||
| 		for(C = r.s.c; C <= r.e.c; ++C) { | ||||
| 			cols[C] = encode_col(C); | ||||
| 			val = dense ? sheet[R][C] : sheet[cols[C] + rr]; | ||||
| 			switch(header) { | ||||
| 				case 1: hdr[C] = C - r.s.c; break; | ||||
| 				case 2: hdr[C] = cols[C]; break; | ||||
| 				case 3: hdr[C] = o.header[C - r.s.c]; break; | ||||
| 				default: | ||||
| 					if(val == null) val = {w: "__EMPTY", t: "s"}; | ||||
| 					vv = v = format_cell(val, null, o); | ||||
| 					counter = 0; | ||||
| 					for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + "_" + (++counter); | ||||
| 					hdr[C] = vv; | ||||
| function write_csv_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) { | ||||
| 	var stream = _Readable(); | ||||
| 	var o = opts == null ? {} : opts; | ||||
| 	if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; } | ||||
| 	var r = safe_decode_range(sheet["!ref"]); | ||||
| 	var FS = o.FS !== undefined ? o.FS : ",", fs = FS.charCodeAt(0); | ||||
| 	var RS = o.RS !== undefined ? o.RS : "\n", rs = RS.charCodeAt(0); | ||||
| 	var endregex = new RegExp((FS=="|" ? "\\|" : FS)+"+$"); | ||||
| 	var row/*:?string*/ = "", cols/*:Array<string>*/ = []; | ||||
| 	o.dense = Array.isArray(sheet); | ||||
| 	var colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet["!cols"] || []; | ||||
| 	var rowinfo/*:Array<RowInfo>*/ = o.skipHidden && sheet["!rows"] || []; | ||||
| 	for(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C); | ||||
| 	var R = r.s.r; | ||||
| 	var BOM = false, w = 0; | ||||
| 	stream._read = function() { | ||||
| 		if(!BOM) { BOM = true; return stream.push("\uFEFF"); } | ||||
| 		while(R <= r.e.r) { | ||||
| 			++R; | ||||
| 			if ((rowinfo[R-1]||{}).hidden) continue; | ||||
| 			row = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o); | ||||
| 			if(row != null) { | ||||
| 				if(o.strip) row = row.replace(endregex,""); | ||||
| 				if(row || (o.blankrows !== false)) return stream.push((w++ ? RS : "") + row); | ||||
| 			} | ||||
| 		} | ||||
| 		R = r.s.r + offset; | ||||
| 		stream._read = function() { | ||||
| 			while(R <= r.e.r) { | ||||
| 				//if ((rowinfo[R-1]||{}).hidden) continue;
 | ||||
| 				var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o); | ||||
| 				++R; | ||||
| 				if((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) { | ||||
| 					stream.push(row.row); | ||||
| 					return; | ||||
| 				} | ||||
| 			} | ||||
| 		return stream.push(null); | ||||
| 	}; | ||||
| 	return stream; | ||||
| } | ||||
| 
 | ||||
| function write_html_stream(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*/) { | ||||
| 	var stream = _Readable(); | ||||
| 
 | ||||
| 	var o = opts || {}; | ||||
| 	var header = o.header != null ? o.header : HTML_.BEGIN; | ||||
| 	var footer = o.footer != null ? o.footer : HTML_.END; | ||||
| 	stream.push(header); | ||||
| 	var r = decode_range(ws['!ref']); | ||||
| 	o.dense = Array.isArray(ws); | ||||
| 	stream.push(HTML_._preamble(ws, r, o)); | ||||
| 	var R = r.s.r; | ||||
| 	var end = false; | ||||
| 	stream._read = function() { | ||||
| 		if(R > r.e.r) { | ||||
| 			if(!end) { end = true; stream.push("</table>" + footer); } | ||||
| 			return stream.push(null); | ||||
| 		}; | ||||
| 		return stream; | ||||
| 		} | ||||
| 		while(R <= r.e.r) { | ||||
| 			stream.push(HTML_._row(ws, r, R, o)); | ||||
| 			++R; | ||||
| 			break; | ||||
| 		} | ||||
| 	}; | ||||
| 	return stream; | ||||
| } | ||||
| 
 | ||||
| 	XLSX.stream = { | ||||
| 		to_json: write_json_stream, | ||||
| 		to_html: write_html_stream, | ||||
| 		to_csv: write_csv_stream | ||||
| function write_json_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) { | ||||
| 	var stream = _Readable({objectMode:true}); | ||||
| 
 | ||||
| 	if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; } | ||||
| 	var val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array<any>*/ = [], v=0, vv=""; | ||||
| 	var r = {s:{r:0,c:0},e:{r:0,c:0}}; | ||||
| 	var o = opts || {}; | ||||
| 	var range = o.range != null ? o.range : sheet["!ref"]; | ||||
| 	if(o.header === 1) header = 1; | ||||
| 	else if(o.header === "A") header = 2; | ||||
| 	else if(Array.isArray(o.header)) header = 3; | ||||
| 	switch(typeof range) { | ||||
| 		case 'string': r = safe_decode_range(range); break; | ||||
| 		case 'number': r = safe_decode_range(sheet["!ref"]); r.s.r = range; break; | ||||
| 		default: r = range; | ||||
| 	} | ||||
| 	if(header > 0) offset = 0; | ||||
| 	var rr = encode_row(r.s.r); | ||||
| 	var cols/*:Array<string>*/ = []; | ||||
| 	var counter = 0; | ||||
| 	var dense = Array.isArray(sheet); | ||||
| 	var R = r.s.r, C = 0, CC = 0; | ||||
| 	if(dense && !sheet[R]) sheet[R] = []; | ||||
| 	for(C = r.s.c; C <= r.e.c; ++C) { | ||||
| 		cols[C] = encode_col(C); | ||||
| 		val = dense ? sheet[R][C] : sheet[cols[C] + rr]; | ||||
| 		switch(header) { | ||||
| 			case 1: hdr[C] = C - r.s.c; break; | ||||
| 			case 2: hdr[C] = cols[C]; break; | ||||
| 			case 3: hdr[C] = o.header[C - r.s.c]; break; | ||||
| 			default: | ||||
| 				if(val == null) val = {w: "__EMPTY", t: "s"}; | ||||
| 				vv = v = format_cell(val, null, o); | ||||
| 				counter = 0; | ||||
| 				for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + "_" + (++counter); | ||||
| 				hdr[C] = vv; | ||||
| 		} | ||||
| 	} | ||||
| 	R = r.s.r + offset; | ||||
| 	stream._read = function() { | ||||
| 		while(R <= r.e.r) { | ||||
| 			//if ((rowinfo[R-1]||{}).hidden) continue;
 | ||||
| 			var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o); | ||||
| 			++R; | ||||
| 			if((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) { | ||||
| 				stream.push(row.row); | ||||
| 				return; | ||||
| 			} | ||||
| 		} | ||||
| 		return stream.push(null); | ||||
| 	}; | ||||
| })(); | ||||
| 	return stream; | ||||
| }; | ||||
| 
 | ||||
| var __stream = { | ||||
| 	to_json: write_json_stream, | ||||
| 	to_html: write_html_stream, | ||||
| 	to_csv: write_csv_stream, | ||||
|   set_readable: set_readable | ||||
| }; | ||||
|  | ||||
| @ -11,4 +11,9 @@ XLSX.utils = utils; | ||||
| XLSX.writeXLSX = writeSyncXLSX; | ||||
| XLSX.writeFileXLSX = writeFileSyncXLSX; | ||||
| XLSX.SSF = SSF; | ||||
| if(typeof __stream !== "undefined") XLSX.stream = __stream; | ||||
| if(typeof CFB !== "undefined") XLSX.CFB = CFB; | ||||
| if(typeof require !== "undefined") { | ||||
|   var strmod = require('stream'); | ||||
|   if((strmod||{}).Readable) set_readable(strmod.Readable); | ||||
| } | ||||
|  | ||||
							
								
								
									
										30
									
								
								dist/xlsx.core.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										30
									
								
								dist/xlsx.core.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/xlsx.core.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/xlsx.core.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										267
									
								
								dist/xlsx.extendscript.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										267
									
								
								dist/xlsx.extendscript.js
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -3830,6 +3830,17 @@ function write_vt(s, xlsx) { | ||||
| 	throw new Error("Unable to serialize " + s); | ||||
| } | ||||
| 
 | ||||
| function xlml_normalize(d) { | ||||
| 	if(has_buf && Buffer.isBuffer(d)) return d.toString('utf8'); | ||||
| 	if(typeof d === 'string') return d; | ||||
| 	/* duktape */ | ||||
| 	if(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d))); | ||||
| 	throw new Error("Bad input format: expected Buffer or string"); | ||||
| } | ||||
| /* UOS uses CJK in tags */ | ||||
| var xlmlregex = /<(\/?)([^\s?><!\/:]*:|)([^\s?<>:\/]+)(?:[\s?:\/][^>]*)?>/mg; | ||||
| //var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
 | ||||
| 
 | ||||
| var XMLNS = ({ | ||||
| 	'dc': 'http://purl.org/dc/elements/1.1/', | ||||
| 	'dcterms': 'http://purl.org/dc/terms/', | ||||
| @ -17196,18 +17207,7 @@ function xlml_clean_comment(comment) { | ||||
| 	comment.v = comment.w = comment.ixfe = undefined; | ||||
| } | ||||
| 
 | ||||
| function xlml_normalize(d) { | ||||
| 	if(has_buf && Buffer.isBuffer(d)) return d.toString('utf8'); | ||||
| 	if(typeof d === 'string') return d; | ||||
| 	/* duktape */ | ||||
| 	if(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d))); | ||||
| 	throw new Error("Bad input format: expected Buffer or string"); | ||||
| } | ||||
| 
 | ||||
| /* TODO: Everything */ | ||||
| /* UOS uses CJK in tags */ | ||||
| var xlmlregex = /<(\/?)([^\s?><!\/:]*:|)([^\s?<>:\/]+)(?:[\s?:\/][^>]*)?>/mg; | ||||
| //var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
 | ||||
| function parse_xlml_xml(d, _opts) { | ||||
| 	var opts = _opts || {}; | ||||
| 	make_ssf(SSF); | ||||
| @ -21033,7 +21033,7 @@ var HTML_ = (function() { | ||||
| 		return ws; | ||||
| 	} | ||||
| 	function html_to_book(str, opts) { | ||||
| 		var mtch = str.match(/<table.*?>[\s\S]*?<\/table>/gi); | ||||
| 		var mtch = str.match(/<table[\s\S]*?>[\s\S]*?<\/table>/gi); | ||||
| 		if(!mtch || mtch.length == 0) throw new Error("Invalid HTML: could not find <table>"); | ||||
| 		if(mtch.length == 1) return sheet_to_workbook(html_to_sheet(mtch[0], opts), opts); | ||||
| 		var wb = utils.book_new(); | ||||
| @ -23739,7 +23739,7 @@ function sheet_to_json(sheet, opts) { | ||||
| 				if(val == null) val = {w: "__EMPTY", t: "s"}; | ||||
| 				vv = v = format_cell(val, null, o); | ||||
| 				counter = 0; | ||||
| 				for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + "_" + (++counter); | ||||
| 				for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) { vv = v + "_" + (++counter); CC = -1; } | ||||
| 				hdr[C] = vv; | ||||
| 		} | ||||
| 	} | ||||
| @ -23788,12 +23788,13 @@ function sheet_to_csv(sheet, opts) { | ||||
| 	var colinfo = o.skipHidden && sheet["!cols"] || []; | ||||
| 	var rowinfo = o.skipHidden && sheet["!rows"] || []; | ||||
| 	for(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C); | ||||
| 	var w = 0; | ||||
| 	for(var R = r.s.r; R <= r.e.r; ++R) { | ||||
| 		if ((rowinfo[R]||{}).hidden) continue; | ||||
| 		row = make_csv_row(sheet, r, R, cols, fs, rs, FS, o); | ||||
| 		if(row == null) { continue; } | ||||
| 		if(o.strip) row = row.replace(endregex,""); | ||||
| 		out.push(row + RS); | ||||
| 		if(row || (o.blankrows !== false)) out.push((w++ ? RS : "") + row); | ||||
| 	} | ||||
| 	delete o.dense; | ||||
| 	return out.join(""); | ||||
| @ -24048,131 +24049,126 @@ utils.sheet_set_array_formula = function(ws, range, formula, dynamic) { | ||||
| return utils; | ||||
| })(utils); | ||||
| 
 | ||||
| if(has_buf && typeof require != 'undefined') (function() { | ||||
| 	var strmod = undefined; | ||||
| 	if(!strmod) return; | ||||
| 	var Readable = strmod.Readable; | ||||
| 	if(!Readable) return; | ||||
| var _Readable; | ||||
| function set_readable(R) { _Readable = R; } | ||||
| 
 | ||||
| 	var write_csv_stream = function(sheet, opts) { | ||||
| 		var stream = Readable(); | ||||
| 		var o = opts == null ? {} : opts; | ||||
| 		if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; } | ||||
| 		var r = safe_decode_range(sheet["!ref"]); | ||||
| 		var FS = o.FS !== undefined ? o.FS : ",", fs = FS.charCodeAt(0); | ||||
| 		var RS = o.RS !== undefined ? o.RS : "\n", rs = RS.charCodeAt(0); | ||||
| 		var endregex = new RegExp((FS=="|" ? "\\|" : FS)+"+$"); | ||||
| 		var row = "", cols = []; | ||||
| 		o.dense = Array.isArray(sheet); | ||||
| 		var colinfo = o.skipHidden && sheet["!cols"] || []; | ||||
| 		var rowinfo = o.skipHidden && sheet["!rows"] || []; | ||||
| 		for(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C); | ||||
| 		var R = r.s.r; | ||||
| 		var BOM = false; | ||||
| 		stream._read = function() { | ||||
| 			if(!BOM) { BOM = true; return stream.push("\uFEFF"); } | ||||
| 			while(R <= r.e.r) { | ||||
| 				++R; | ||||
| 				if ((rowinfo[R-1]||{}).hidden) continue; | ||||
| 				row = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o); | ||||
| 				if(row != null) { | ||||
| 					if(o.strip) row = row.replace(endregex,""); | ||||
| 					stream.push(row + RS); | ||||
| 					break; | ||||
| 				} | ||||
| 			} | ||||
| 			if(R > r.e.r) return stream.push(null); | ||||
| 		}; | ||||
| 		return stream; | ||||
| 	}; | ||||
| 
 | ||||
| 	var write_html_stream = function(ws, opts) { | ||||
| 		var stream = Readable(); | ||||
| 
 | ||||
| 		var o = opts || {}; | ||||
| 		var header = o.header != null ? o.header : HTML_.BEGIN; | ||||
| 		var footer = o.footer != null ? o.footer : HTML_.END; | ||||
| 		stream.push(header); | ||||
| 		var r = decode_range(ws['!ref']); | ||||
| 		o.dense = Array.isArray(ws); | ||||
| 		stream.push(HTML_._preamble(ws, r, o)); | ||||
| 		var R = r.s.r; | ||||
| 		var end = false; | ||||
| 		stream._read = function() { | ||||
| 			if(R > r.e.r) { | ||||
| 				if(!end) { end = true; stream.push("</table>" + footer); } | ||||
| 				return stream.push(null); | ||||
| 			} | ||||
| 			while(R <= r.e.r) { | ||||
| 				stream.push(HTML_._row(ws, r, R, o)); | ||||
| 				++R; | ||||
| 				break; | ||||
| 			} | ||||
| 		}; | ||||
| 		return stream; | ||||
| 	}; | ||||
| 
 | ||||
| 	var write_json_stream = function(sheet, opts) { | ||||
| 		var stream = Readable({objectMode:true}); | ||||
| 
 | ||||
| 		if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; } | ||||
| 		var val = {t:'n',v:0}, header = 0, offset = 1, hdr = [], v=0, vv=""; | ||||
| 		var r = {s:{r:0,c:0},e:{r:0,c:0}}; | ||||
| 		var o = opts || {}; | ||||
| 		var range = o.range != null ? o.range : sheet["!ref"]; | ||||
| 		if(o.header === 1) header = 1; | ||||
| 		else if(o.header === "A") header = 2; | ||||
| 		else if(Array.isArray(o.header)) header = 3; | ||||
| 		switch(typeof range) { | ||||
| 			case 'string': r = safe_decode_range(range); break; | ||||
| 			case 'number': r = safe_decode_range(sheet["!ref"]); r.s.r = range; break; | ||||
| 			default: r = range; | ||||
| 		} | ||||
| 		if(header > 0) offset = 0; | ||||
| 		var rr = encode_row(r.s.r); | ||||
| 		var cols = []; | ||||
| 		var counter = 0; | ||||
| 		var dense = Array.isArray(sheet); | ||||
| 		var R = r.s.r, C = 0, CC = 0; | ||||
| 		if(dense && !sheet[R]) sheet[R] = []; | ||||
| 		for(C = r.s.c; C <= r.e.c; ++C) { | ||||
| 			cols[C] = encode_col(C); | ||||
| 			val = dense ? sheet[R][C] : sheet[cols[C] + rr]; | ||||
| 			switch(header) { | ||||
| 				case 1: hdr[C] = C - r.s.c; break; | ||||
| 				case 2: hdr[C] = cols[C]; break; | ||||
| 				case 3: hdr[C] = o.header[C - r.s.c]; break; | ||||
| 				default: | ||||
| 					if(val == null) val = {w: "__EMPTY", t: "s"}; | ||||
| 					vv = v = format_cell(val, null, o); | ||||
| 					counter = 0; | ||||
| 					for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + "_" + (++counter); | ||||
| 					hdr[C] = vv; | ||||
| function write_csv_stream(sheet, opts) { | ||||
| 	var stream = _Readable(); | ||||
| 	var o = opts == null ? {} : opts; | ||||
| 	if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; } | ||||
| 	var r = safe_decode_range(sheet["!ref"]); | ||||
| 	var FS = o.FS !== undefined ? o.FS : ",", fs = FS.charCodeAt(0); | ||||
| 	var RS = o.RS !== undefined ? o.RS : "\n", rs = RS.charCodeAt(0); | ||||
| 	var endregex = new RegExp((FS=="|" ? "\\|" : FS)+"+$"); | ||||
| 	var row = "", cols = []; | ||||
| 	o.dense = Array.isArray(sheet); | ||||
| 	var colinfo = o.skipHidden && sheet["!cols"] || []; | ||||
| 	var rowinfo = o.skipHidden && sheet["!rows"] || []; | ||||
| 	for(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C); | ||||
| 	var R = r.s.r; | ||||
| 	var BOM = false, w = 0; | ||||
| 	stream._read = function() { | ||||
| 		if(!BOM) { BOM = true; return stream.push("\uFEFF"); } | ||||
| 		while(R <= r.e.r) { | ||||
| 			++R; | ||||
| 			if ((rowinfo[R-1]||{}).hidden) continue; | ||||
| 			row = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o); | ||||
| 			if(row != null) { | ||||
| 				if(o.strip) row = row.replace(endregex,""); | ||||
| 				if(row || (o.blankrows !== false)) return stream.push((w++ ? RS : "") + row); | ||||
| 			} | ||||
| 		} | ||||
| 		R = r.s.r + offset; | ||||
| 		stream._read = function() { | ||||
| 			if(R > r.e.r) return stream.push(null); | ||||
| 			while(R <= r.e.r) { | ||||
| 				//if ((rowinfo[R-1]||{}).hidden) continue;
 | ||||
| 				var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o); | ||||
| 				++R; | ||||
| 				if((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) { | ||||
| 					stream.push(row.row); | ||||
| 					break; | ||||
| 				} | ||||
| 		return stream.push(null); | ||||
| 	}; | ||||
| 	return stream; | ||||
| } | ||||
| 
 | ||||
| function write_html_stream(ws, opts) { | ||||
| 	var stream = _Readable(); | ||||
| 
 | ||||
| 	var o = opts || {}; | ||||
| 	var header = o.header != null ? o.header : HTML_.BEGIN; | ||||
| 	var footer = o.footer != null ? o.footer : HTML_.END; | ||||
| 	stream.push(header); | ||||
| 	var r = decode_range(ws['!ref']); | ||||
| 	o.dense = Array.isArray(ws); | ||||
| 	stream.push(HTML_._preamble(ws, r, o)); | ||||
| 	var R = r.s.r; | ||||
| 	var end = false; | ||||
| 	stream._read = function() { | ||||
| 		if(R > r.e.r) { | ||||
| 			if(!end) { end = true; stream.push("</table>" + footer); } | ||||
| 			return stream.push(null); | ||||
| 		} | ||||
| 		while(R <= r.e.r) { | ||||
| 			stream.push(HTML_._row(ws, r, R, o)); | ||||
| 			++R; | ||||
| 			break; | ||||
| 		} | ||||
| 	}; | ||||
| 	return stream; | ||||
| } | ||||
| 
 | ||||
| function write_json_stream(sheet, opts) { | ||||
| 	var stream = _Readable({objectMode:true}); | ||||
| 
 | ||||
| 	if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; } | ||||
| 	var val = {t:'n',v:0}, header = 0, offset = 1, hdr = [], v=0, vv=""; | ||||
| 	var r = {s:{r:0,c:0},e:{r:0,c:0}}; | ||||
| 	var o = opts || {}; | ||||
| 	var range = o.range != null ? o.range : sheet["!ref"]; | ||||
| 	if(o.header === 1) header = 1; | ||||
| 	else if(o.header === "A") header = 2; | ||||
| 	else if(Array.isArray(o.header)) header = 3; | ||||
| 	switch(typeof range) { | ||||
| 		case 'string': r = safe_decode_range(range); break; | ||||
| 		case 'number': r = safe_decode_range(sheet["!ref"]); r.s.r = range; break; | ||||
| 		default: r = range; | ||||
| 	} | ||||
| 	if(header > 0) offset = 0; | ||||
| 	var rr = encode_row(r.s.r); | ||||
| 	var cols = []; | ||||
| 	var counter = 0; | ||||
| 	var dense = Array.isArray(sheet); | ||||
| 	var R = r.s.r, C = 0, CC = 0; | ||||
| 	if(dense && !sheet[R]) sheet[R] = []; | ||||
| 	for(C = r.s.c; C <= r.e.c; ++C) { | ||||
| 		cols[C] = encode_col(C); | ||||
| 		val = dense ? sheet[R][C] : sheet[cols[C] + rr]; | ||||
| 		switch(header) { | ||||
| 			case 1: hdr[C] = C - r.s.c; break; | ||||
| 			case 2: hdr[C] = cols[C]; break; | ||||
| 			case 3: hdr[C] = o.header[C - r.s.c]; break; | ||||
| 			default: | ||||
| 				if(val == null) val = {w: "__EMPTY", t: "s"}; | ||||
| 				vv = v = format_cell(val, null, o); | ||||
| 				counter = 0; | ||||
| 				for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + "_" + (++counter); | ||||
| 				hdr[C] = vv; | ||||
| 		} | ||||
| 	} | ||||
| 	R = r.s.r + offset; | ||||
| 	stream._read = function() { | ||||
| 		while(R <= r.e.r) { | ||||
| 			//if ((rowinfo[R-1]||{}).hidden) continue;
 | ||||
| 			var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o); | ||||
| 			++R; | ||||
| 			if((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) { | ||||
| 				stream.push(row.row); | ||||
| 				return; | ||||
| 			} | ||||
| 		}; | ||||
| 		return stream; | ||||
| 		} | ||||
| 		return stream.push(null); | ||||
| 	}; | ||||
| 	return stream; | ||||
| }; | ||||
| 
 | ||||
| 	XLSX.stream = { | ||||
| 		to_json: write_json_stream, | ||||
| 		to_html: write_html_stream, | ||||
| 		to_csv: write_csv_stream | ||||
| 	}; | ||||
| })(); | ||||
| 
 | ||||
| var __stream = { | ||||
| 	to_json: write_json_stream, | ||||
| 	to_html: write_html_stream, | ||||
| 	to_csv: write_csv_stream, | ||||
|   set_readable: set_readable | ||||
| }; | ||||
| if(typeof parse_xlscfb !== "undefined") XLSX.parse_xlscfb = parse_xlscfb; | ||||
| XLSX.parse_zip = parse_zip; | ||||
| XLSX.read = readSync; //xlsread
 | ||||
| @ -24186,7 +24182,12 @@ XLSX.utils = utils; | ||||
| XLSX.writeXLSX = writeSyncXLSX; | ||||
| XLSX.writeFileXLSX = writeFileSyncXLSX; | ||||
| XLSX.SSF = SSF; | ||||
| if(typeof __stream !== "undefined") XLSX.stream = __stream; | ||||
| if(typeof CFB !== "undefined") XLSX.CFB = CFB; | ||||
| if(typeof require !== "undefined") { | ||||
|   var strmod = undefined; | ||||
|   if((strmod||{}).Readable) set_readable(strmod.Readable); | ||||
| } | ||||
| } | ||||
| /*global define */ | ||||
| if(typeof exports !== 'undefined') make_xlsx_lib(exports); | ||||
|  | ||||
							
								
								
									
										30
									
								
								dist/xlsx.full.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										30
									
								
								dist/xlsx.full.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/xlsx.full.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/xlsx.full.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										16
									
								
								dist/xlsx.mini.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										16
									
								
								dist/xlsx.mini.min.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/xlsx.mini.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								dist/xlsx.mini.min.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -114,6 +114,10 @@ import * as XLSX from 'xlsx/xlsx.mjs'; | ||||
| import * as fs from 'fs'; | ||||
| XLSX.set_fs(fs); | ||||
| 
 | ||||
| /* load 'stream' for stream support */ | ||||
| import { Readable } from 'stream'; | ||||
| XLSX.stream.set_readable(Readable); | ||||
| 
 | ||||
| /* load the codepage support library for extended support with older formats  */ | ||||
| import * as cpexcel from 'xlsx/dist/cpexcel.full.mjs'; | ||||
| XLSX.set_cptable(cpexcel); | ||||
|  | ||||
| @ -224,8 +224,8 @@ The [included demos](demos/) cover mobile apps and other special deployments. | ||||
| ### Streaming Write | ||||
| 
 | ||||
| The streaming write functions are available in the `XLSX.stream` object.  They | ||||
| take the same arguments as the normal write functions but return a Readable | ||||
| Stream.  They are only exposed in NodeJS. | ||||
| take the same arguments as the normal write functions but return a NodeJS | ||||
| Readable Stream. | ||||
| 
 | ||||
| - `XLSX.stream.to_csv` is the streaming version of `XLSX.utils.sheet_to_csv`. | ||||
| - `XLSX.stream.to_html` is the streaming version of `XLSX.utils.sheet_to_html`. | ||||
|  | ||||
| @ -438,8 +438,11 @@ takes an options argument: | ||||
| | array of strings | Use specified strings as keys in row objects              | | ||||
| | (default)        | Read and disambiguate first row as keys                   | | ||||
| 
 | ||||
| If header is not `1`, the row object will contain the non-enumerable property | ||||
| `__rowNum__` that represents the row of the sheet corresponding to the entry. | ||||
| - If header is not `1`, the row object will contain the non-enumerable property | ||||
|   `__rowNum__` that represents the row of the sheet corresponding to the entry. | ||||
| - If header is an array, the keys will not be disambiguated.  This can lead to | ||||
|   unexpected results if the array values are not unique! | ||||
| 
 | ||||
| 
 | ||||
| <details> | ||||
|   <summary><b>Examples</b> (click to show)</summary> | ||||
|  | ||||
| @ -12,6 +12,7 @@ export { | ||||
| 	writeSyncXLSX as writeXLSX, | ||||
| 	writeFileSyncXLSX as writeFileXLSX, | ||||
| 	utils, | ||||
| 	__stream as stream, | ||||
| 	SSF, | ||||
| 	CFB | ||||
| }; | ||||
|  | ||||
| @ -77,4 +77,5 @@ bits/87_read.js | ||||
| bits/88_write.js | ||||
| bits/90_utils.js | ||||
| bits/95_api.js | ||||
| bits/97_node.js | ||||
| misc/98_esmxport.js | ||||
|  | ||||
							
								
								
									
										15
									
								
								test.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										15
									
								
								test.js
									
									
									
									
									
								
							| @ -1837,6 +1837,14 @@ describe('json output', function() { | ||||
| 			assert.equal(json[i].S_1, 7 + i); | ||||
| 		} | ||||
| 	}); | ||||
| 	it('should handle collisions in disambiguation', function() { | ||||
| 		var _data = [["a_1","a","a"],[1,2,3]]; | ||||
| 		var _ws = X.utils.aoa_to_sheet(_data); | ||||
| 		var json = X.utils.sheet_to_json(_ws); | ||||
| 		assert.equal(json[0].a, 2); | ||||
| 		assert.equal(json[0].a_1, 1); | ||||
| 		assert.equal(json[0].a_2, 3); | ||||
| 	}); | ||||
| 	it('should handle raw data if requested', function() { | ||||
| 		var _ws = X.utils.aoa_to_sheet(data, {cellDates:true}); | ||||
| 		var json = X.utils.sheet_to_json(_ws, {header:1, raw:true}); | ||||
| @ -2087,6 +2095,13 @@ describe('CSV', function() { | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws, {skipHidden:true}), "2,3,\nFALSE,,sheetjs\nbar,2/19/14,0.3\n,,\n,qux,"); | ||||
| 			delete ws["!cols"]; | ||||
| 		}); | ||||
| 		it('should properly handle blankrows and strip options', function() { | ||||
| 			var _ws = X.utils.aoa_to_sheet([[""],[],["", ""]]); | ||||
| 			assert.equal(X.utils.sheet_to_csv(_ws, {}), ",\n,\n,"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(_ws, {strip: true}), "\n\n"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(_ws, {blankrows: false}), ",\n,"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(_ws, {blankrows: false, strip: true}), ""); | ||||
| 		}); | ||||
| 	}); | ||||
| }); | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										41
									
								
								test.mjs
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										41
									
								
								test.mjs
									
									
									
										generated
									
									
									
								
							| @ -1442,8 +1442,8 @@ describe('write features', function() { | ||||
| 		var wb = X.utils.book_new(); | ||||
| 		X.utils.book_append_sheet(wb, X.utils.aoa_to_sheet([[1,2],[3,4]]), "Sheet1"); | ||||
| 		X.utils.book_append_sheet(wb, X.utils.aoa_to_sheet([[5,6],[7,8]]), "Sheet2"); | ||||
| 		assert.equal(X.write(wb, {type:"string", bookType:"csv", sheet:"Sheet1"}), "1,2\n3,4\n"); | ||||
| 		assert.equal(X.write(wb, {type:"string", bookType:"csv", sheet:"Sheet2"}), "5,6\n7,8\n"); | ||||
| 		assert.equal(X.write(wb, {type:"string", bookType:"csv", sheet:"Sheet1"}), "1,2\n3,4"); | ||||
| 		assert.equal(X.write(wb, {type:"string", bookType:"csv", sheet:"Sheet2"}), "5,6\n7,8"); | ||||
| 		assert.throws(function() { X.write(wb, {type:"string", bookType:"csv", sheet:"Sheet3"}); }); | ||||
| 	}); | ||||
| }); | ||||
| @ -1823,6 +1823,14 @@ describe('json output', function() { | ||||
| 			assert.equal(json[i].S_1, 7 + i); | ||||
| 		} | ||||
| 	}); | ||||
| 	it('should handle collisions in disambiguation', function() { | ||||
| 		var _data = [["a_1","a","a"],[1,2,3]]; | ||||
| 		var _ws = X.utils.aoa_to_sheet(_data); | ||||
| 		var json = X.utils.sheet_to_json(_ws); | ||||
| 		assert.equal(json[0].a, 2); | ||||
| 		assert.equal(json[0].a_1, 1); | ||||
| 		assert.equal(json[0].a_2, 3); | ||||
| 	}); | ||||
| 	it('should handle raw data if requested', function() { | ||||
| 		var _ws = X.utils.aoa_to_sheet(data, {cellDates:true}); | ||||
| 		var json = X.utils.sheet_to_json(_ws, {header:1, raw:true}); | ||||
| @ -2016,7 +2024,7 @@ describe('CSV', function() { | ||||
| 		if(typeof before != 'undefined') before(bef); | ||||
| 		else it('before', bef); | ||||
| 		it('should generate csv', function() { | ||||
| 			var baseline = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,2/19/14,0.3\n,,,\nbaz,,qux,\n"; | ||||
| 			var baseline = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,2/19/14,0.3\n,,,\nbaz,,qux,"; | ||||
| 			assert.equal(baseline, X.utils.sheet_to_csv(ws)); | ||||
| 		}); | ||||
| 		it('should handle FS', function() { | ||||
| @ -2028,18 +2036,18 @@ describe('CSV', function() { | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws, {RS:";"}).replace(/[;]/g,"\n"), X.utils.sheet_to_csv(ws)); | ||||
| 		}); | ||||
| 		it('should handle dateNF', function() { | ||||
| 			var baseline = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,20140219,0.3\n,,,\nbaz,,qux,\n"; | ||||
| 			var baseline = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,20140219,0.3\n,,,\nbaz,,qux,"; | ||||
| 			var _ws =  X.utils.aoa_to_sheet(data, {cellDates:true}); | ||||
| 			delete get_cell(_ws,"C3").w; | ||||
| 			delete get_cell(_ws,"C3").z; | ||||
| 			assert.equal(baseline, X.utils.sheet_to_csv(_ws, {dateNF:"YYYYMMDD"})); | ||||
| 		}); | ||||
| 		it('should handle strip', function() { | ||||
| 			var baseline = "1,2,3\nTRUE,FALSE,,sheetjs\nfoo,bar,2/19/14,0.3\n\nbaz,,qux\n"; | ||||
| 			var baseline = "1,2,3\nTRUE,FALSE,,sheetjs\nfoo,bar,2/19/14,0.3\n\nbaz,,qux"; | ||||
| 			assert.equal(baseline, X.utils.sheet_to_csv(ws, {strip:true})); | ||||
| 		}); | ||||
| 		it('should handle blankrows', function() { | ||||
| 			var baseline = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,2/19/14,0.3\nbaz,,qux,\n"; | ||||
| 			var baseline = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,2/19/14,0.3\nbaz,,qux,"; | ||||
| 			assert.equal(baseline, X.utils.sheet_to_csv(ws, {blankrows:false})); | ||||
| 		}); | ||||
| 		it('should handle various line endings', function() { | ||||
| @ -2052,27 +2060,34 @@ describe('CSV', function() { | ||||
| 			}); | ||||
| 		}); | ||||
| 		it('should handle skipHidden for rows if requested', function() { | ||||
| 			var baseline = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,2/19/14,0.3\n,,,\nbaz,,qux,\n"; | ||||
| 			var baseline = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,2/19/14,0.3\n,,,\nbaz,,qux,"; | ||||
| 			delete ws["!rows"]; | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws), baseline); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws, {skipHidden:true}), baseline); | ||||
| 			ws["!rows"] = [null,{hidden:true},null,null]; | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws), baseline); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws, {skipHidden:true}), "1,2,3,\nfoo,bar,2/19/14,0.3\n,,,\nbaz,,qux,\n"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws, {skipHidden:true}), "1,2,3,\nfoo,bar,2/19/14,0.3\n,,,\nbaz,,qux,"); | ||||
| 			delete ws["!rows"]; | ||||
| 		}); | ||||
| 		it('should handle skipHidden for columns if requested', function() { | ||||
| 			var baseline = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,2/19/14,0.3\n,,,\nbaz,,qux,\n"; | ||||
| 			var baseline = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,2/19/14,0.3\n,,,\nbaz,,qux,"; | ||||
| 			delete ws["!cols"]; | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws), baseline); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws, {skipHidden:true}), baseline); | ||||
| 			ws["!cols"] = [null,{hidden:true},null,null]; | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws), baseline); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws, {skipHidden:true}), "1,3,\nTRUE,,sheetjs\nfoo,2/19/14,0.3\n,,\nbaz,qux,\n"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws, {skipHidden:true}), "1,3,\nTRUE,,sheetjs\nfoo,2/19/14,0.3\n,,\nbaz,qux,"); | ||||
| 			ws["!cols"] = [{hidden:true},null,null,null]; | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws, {skipHidden:true}), "2,3,\nFALSE,,sheetjs\nbar,2/19/14,0.3\n,,\n,qux,\n"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws, {skipHidden:true}), "2,3,\nFALSE,,sheetjs\nbar,2/19/14,0.3\n,,\n,qux,"); | ||||
| 			delete ws["!cols"]; | ||||
| 		}); | ||||
| 		it('should properly handle blankrows and strip options', function() { | ||||
| 			var _ws = X.utils.aoa_to_sheet([[""],[],["", ""]]); | ||||
| 			assert.equal(X.utils.sheet_to_csv(_ws, {}), ",\n,\n,"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(_ws, {strip: true}), "\n\n"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(_ws, {blankrows: false}), ",\n,"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(_ws, {blankrows: false, strip: true}), ""); | ||||
| 		}); | ||||
| 	}); | ||||
| }); | ||||
| 
 | ||||
| @ -2249,11 +2264,11 @@ describe('HTML', function() { | ||||
| 		var html = "<table><thead><tr><th>A</th><th>B</th></tr></thead><tbody><tr><td>1</td><td>2</td></tr><tr><td>3</td><td>4</td></tr></tbody><tfoot><tr><th>4</th><th>6</th></tr></tfoot></table>"; | ||||
| 		it('HTML string', function() { | ||||
| 			var ws = X.read(html, {type:'string'}).Sheets.Sheet1; | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws),  "A,B\n1,2\n3,4\n4,6\n"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws),  "A,B\n1,2\n3,4\n4,6"); | ||||
| 		}); | ||||
| 		if(domtest) it('DOM', function() { | ||||
| 			var ws = X.utils.table_to_sheet(get_dom_element(html)); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws),  "A,B\n1,2\n3,4\n4,6\n"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws),  "A,B\n1,2\n3,4\n4,6"); | ||||
| 		}); | ||||
| 	}); | ||||
| }); | ||||
|  | ||||
							
								
								
									
										39
									
								
								test.ts
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										39
									
								
								test.ts
									
									
									
									
									
								
							| @ -1401,8 +1401,8 @@ Deno.test('write features', async function(t) { | ||||
| 		var wb = X.utils.book_new(); | ||||
| 		X.utils.book_append_sheet(wb, X.utils.aoa_to_sheet([[1,2],[3,4]]), "Sheet1"); | ||||
| 		X.utils.book_append_sheet(wb, X.utils.aoa_to_sheet([[5,6],[7,8]]), "Sheet2"); | ||||
| 		assert.equal(X.write(wb, {type:"string", bookType:"csv", sheet:"Sheet1"}), "1,2\n3,4\n"); | ||||
| 		assert.equal(X.write(wb, {type:"string", bookType:"csv", sheet:"Sheet2"}), "5,6\n7,8\n"); | ||||
| 		assert.equal(X.write(wb, {type:"string", bookType:"csv", sheet:"Sheet1"}), "1,2\n3,4"); | ||||
| 		assert.equal(X.write(wb, {type:"string", bookType:"csv", sheet:"Sheet2"}), "5,6\n7,8"); | ||||
| 		assert.throws(function() { X.write(wb, {type:"string", bookType:"csv", sheet:"Sheet3"}); }); | ||||
| 	}); | ||||
| }); | ||||
| @ -1778,6 +1778,14 @@ Deno.test('json output', async function(t) { | ||||
| 			assert.equal(json[i].S_1, 7 + i); | ||||
| 		} | ||||
| 	}); | ||||
| 	await t.step('should handle collisions in disambiguation', async function(t) { | ||||
| 		var _data = [["a_1","a","a"],[1,2,3]]; | ||||
| 		var _ws = X.utils.aoa_to_sheet(_data); | ||||
| 		var json: any = X.utils.sheet_to_json(_ws); | ||||
| 		assert.equal(json[0].a, 2); | ||||
| 		assert.equal(json[0].a_1, 1); | ||||
| 		assert.equal(json[0].a_2, 3); | ||||
| 	}); | ||||
| 	await t.step('should handle raw data if requested', async function(t) { | ||||
| 		var _ws = X.utils.aoa_to_sheet(data, {cellDates:true}); | ||||
| 		var json: Array<Array<any>> = X.utils.sheet_to_json(_ws, {header:1, raw:true}); | ||||
| @ -1966,7 +1974,7 @@ Deno.test('CSV', async function(t) { | ||||
| 			]; | ||||
| 			var ws = X.utils.aoa_to_sheet(data); | ||||
| 		await t.step('should generate csv', async function(t) { | ||||
| 			var baseline = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,2/19/14,0.3\n,,,\nbaz,,qux,\n"; | ||||
| 			var baseline = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,2/19/14,0.3\n,,,\nbaz,,qux,"; | ||||
| 			assert.equal(baseline, X.utils.sheet_to_csv(ws)); | ||||
| 		}); | ||||
| 		await t.step('should handle FS', async function(t) { | ||||
| @ -1978,18 +1986,18 @@ Deno.test('CSV', async function(t) { | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws, {RS:";"}).replace(/[;]/g,"\n"), X.utils.sheet_to_csv(ws)); | ||||
| 		}); | ||||
| 		await t.step('should handle dateNF', async function(t) { | ||||
| 			var baseline = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,20140219,0.3\n,,,\nbaz,,qux,\n"; | ||||
| 			var baseline = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,20140219,0.3\n,,,\nbaz,,qux,"; | ||||
| 			var _ws =  X.utils.aoa_to_sheet(data, {cellDates:true}); | ||||
| 			delete get_cell(_ws,"C3").w; | ||||
| 			delete get_cell(_ws,"C3").z; | ||||
| 			assert.equal(baseline, X.utils.sheet_to_csv(_ws, {dateNF:"YYYYMMDD"})); | ||||
| 		}); | ||||
| 		await t.step('should handle strip', async function(t) { | ||||
| 			var baseline = "1,2,3\nTRUE,FALSE,,sheetjs\nfoo,bar,2/19/14,0.3\n\nbaz,,qux\n"; | ||||
| 			var baseline = "1,2,3\nTRUE,FALSE,,sheetjs\nfoo,bar,2/19/14,0.3\n\nbaz,,qux"; | ||||
| 			assert.equal(baseline, X.utils.sheet_to_csv(ws, {strip:true})); | ||||
| 		}); | ||||
| 		await t.step('should handle blankrows', async function(t) { | ||||
| 			var baseline = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,2/19/14,0.3\nbaz,,qux,\n"; | ||||
| 			var baseline = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,2/19/14,0.3\nbaz,,qux,"; | ||||
| 			assert.equal(baseline, X.utils.sheet_to_csv(ws, {blankrows:false})); | ||||
| 		}); | ||||
| 		await t.step('should handle various line endings', async function(t) { | ||||
| @ -2002,27 +2010,34 @@ Deno.test('CSV', async function(t) { | ||||
| 			}); | ||||
| 		}); | ||||
| 		await t.step('should handle skipHidden for rows if requested', async function(t) { | ||||
| 			var baseline = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,2/19/14,0.3\n,,,\nbaz,,qux,\n"; | ||||
| 			var baseline = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,2/19/14,0.3\n,,,\nbaz,,qux,"; | ||||
| 			delete ws["!rows"]; | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws), baseline); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws, {skipHidden:true}), baseline); | ||||
| 			ws["!rows"] = ([,{hidden:true},,] as any); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws), baseline); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws, {skipHidden:true}), "1,2,3,\nfoo,bar,2/19/14,0.3\n,,,\nbaz,,qux,\n"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws, {skipHidden:true}), "1,2,3,\nfoo,bar,2/19/14,0.3\n,,,\nbaz,,qux,"); | ||||
| 			delete ws["!rows"]; | ||||
| 		}); | ||||
| 		await t.step('should handle skipHidden for columns if requested', async function(t) { | ||||
| 			var baseline = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,2/19/14,0.3\n,,,\nbaz,,qux,\n"; | ||||
| 			var baseline = "1,2,3,\nTRUE,FALSE,,sheetjs\nfoo,bar,2/19/14,0.3\n,,,\nbaz,,qux,"; | ||||
| 			delete ws["!cols"]; | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws), baseline); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws, {skipHidden:true}), baseline); | ||||
| 			ws["!cols"] = ([,{hidden:true},,] as any); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws), baseline); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws, {skipHidden:true}), "1,3,\nTRUE,,sheetjs\nfoo,2/19/14,0.3\n,,\nbaz,qux,\n"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws, {skipHidden:true}), "1,3,\nTRUE,,sheetjs\nfoo,2/19/14,0.3\n,,\nbaz,qux,"); | ||||
| 			ws["!cols"] = ([{hidden:true},,,] as any); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws, {skipHidden:true}), "2,3,\nFALSE,,sheetjs\nbar,2/19/14,0.3\n,,\n,qux,\n"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws, {skipHidden:true}), "2,3,\nFALSE,,sheetjs\nbar,2/19/14,0.3\n,,\n,qux,"); | ||||
| 			delete ws["!cols"]; | ||||
| 		}); | ||||
| 		await t.step('should properly handle blankrows and strip options', async function(t) { | ||||
| 			var _ws = X.utils.aoa_to_sheet([[""],[],["", ""]]); | ||||
| 			assert.equal(X.utils.sheet_to_csv(_ws, {}), ",\n,\n,"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(_ws, {strip: true}), "\n\n"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(_ws, {blankrows: false}), ",\n,"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(_ws, {blankrows: false, strip: true}), ""); | ||||
| 		}); | ||||
| 	}); | ||||
| }); | ||||
| 
 | ||||
| @ -2108,7 +2123,7 @@ Deno.test('HTML', async function(t) { | ||||
| 		var html = "<table><thead><tr><th>A</th><th>B</th></tr></thead><tbody><tr><td>1</td><td>2</td></tr><tr><td>3</td><td>4</td></tr></tbody><tfoot><tr><th>4</th><th>6</th></tr></tfoot></table>"; | ||||
| 		await t.step('HTML string', async function(t) { | ||||
| 			var ws = X.read(html, {type:'string'}).Sheets.Sheet1; | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws),  "A,B\n1,2\n3,4\n4,6\n"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws),  "A,B\n1,2\n3,4\n4,6"); | ||||
| 		}); | ||||
| 	}); | ||||
| }); | ||||
|  | ||||
							
								
								
									
										15
									
								
								tests/core.js
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										15
									
								
								tests/core.js
									
									
									
										generated
									
									
									
								
							| @ -1837,6 +1837,14 @@ describe('json output', function() { | ||||
| 			assert.equal(json[i].S_1, 7 + i); | ||||
| 		} | ||||
| 	}); | ||||
| 	it('should handle collisions in disambiguation', function() { | ||||
| 		var _data = [["a_1","a","a"],[1,2,3]]; | ||||
| 		var _ws = X.utils.aoa_to_sheet(_data); | ||||
| 		var json = X.utils.sheet_to_json(_ws); | ||||
| 		assert.equal(json[0].a, 2); | ||||
| 		assert.equal(json[0].a_1, 1); | ||||
| 		assert.equal(json[0].a_2, 3); | ||||
| 	}); | ||||
| 	it('should handle raw data if requested', function() { | ||||
| 		var _ws = X.utils.aoa_to_sheet(data, {cellDates:true}); | ||||
| 		var json = X.utils.sheet_to_json(_ws, {header:1, raw:true}); | ||||
| @ -2087,6 +2095,13 @@ describe('CSV', function() { | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws, {skipHidden:true}), "2,3,\nFALSE,,sheetjs\nbar,2/19/14,0.3\n,,\n,qux,"); | ||||
| 			delete ws["!cols"]; | ||||
| 		}); | ||||
| 		it('should properly handle blankrows and strip options', function() { | ||||
| 			var _ws = X.utils.aoa_to_sheet([[""],[],["", ""]]); | ||||
| 			assert.equal(X.utils.sheet_to_csv(_ws, {}), ",\n,\n,"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(_ws, {strip: true}), "\n\n"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(_ws, {blankrows: false}), ",\n,"); | ||||
| 			assert.equal(X.utils.sheet_to_csv(_ws, {blankrows: false, strip: true}), ""); | ||||
| 		}); | ||||
| 	}); | ||||
| }); | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										56
									
								
								tests/mini.html
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										56
									
								
								tests/mini.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,56 @@ | ||||
| <!DOCTYPE html> | ||||
| <html> | ||||
|   <head> | ||||
|     <title>JS-XLSX Core Test Runner</title> | ||||
|     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||
|     <link rel="stylesheet" href="mocha.css" /> | ||||
|     <link rel="icon" type="image/png" href="//oss.sheetjs.com/assets/img/logo.png" /> | ||||
|     <style> | ||||
|       #t { font: 20px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px 60px; font-weight: bold; } | ||||
|       #tt{ font: 16px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px 60px; } | ||||
|       th { font: 16px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif; margin: 0px 60px; font-weight: bold; text-align: left; } | ||||
|     </style> | ||||
|   </head> | ||||
|   <body> | ||||
|     <h1 id="t"><a href="http://sheetjs.com">JS-XLSX Browser-based Parsing Tests</a></h1> | ||||
|     <table id="tt"> | ||||
|       <tr> | ||||
|         <th>File Formats</th> | ||||
|         <td><a href="http://github.com/SheetJS/js-xlsx">Library Source</a></td> | ||||
|         <td><a href="http://SheetJS.github.io/js-xls">Interactive Demo</a></td> | ||||
|         <td><a href="http://npm.im/xlsx">"xlsx" on npm</a></td> | ||||
|         <td><a href="https://travis-ci.org/SheetJS/js-xlsx">node CI status</a></td> | ||||
|       </tr> | ||||
|       <tr><td colspan="5">Tests compiled from <a href="http://github.com/SheetJS/test_files">test_files repo</a> and are located at /test_files<br /></td></tr> | ||||
|     </table> | ||||
| <script type="text/javascript"> | ||||
| 	var _gaq = _gaq || []; | ||||
| 	_gaq.push(['_setAccount', 'UA-36810333-1']); | ||||
| 	_gaq.push(['_trackPageview']); | ||||
| 
 | ||||
| 	(function() { | ||||
| 		var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; | ||||
| 		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; | ||||
| 		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); | ||||
| 	})(); | ||||
| </script> | ||||
|     <script src="shim.js"></script> | ||||
|     <script src="base64.js"></script> | ||||
|     <script src="fs_.js"></script> | ||||
|     <script src="fixtures.js"></script> | ||||
|     <script src="xlsx.mini.min.js"></script> | ||||
|     <div id="mocha"></div> | ||||
|     <script src="mocha.js"></script> | ||||
|     <script> | ||||
|       window.initMochaPhantomJS && window.initMochaPhantomJS(); | ||||
|       mocha.setup({ui:'bdd', timeout:15000}); | ||||
|     </script> | ||||
|     <script src="mini.js"></script> | ||||
|     <script> | ||||
|       if(typeof mochaSaucePlease !== "undefined") mochaSaucePlease(); | ||||
|       else if(window.mochaPhantomJS) mochaPhantomJS.run(); | ||||
|       else typeof mocha_sauce !== 'undefined' ? mocha_sauce() : mocha.run(); | ||||
|     </script> | ||||
|   </body> | ||||
| </html> | ||||
							
								
								
									
										2449
									
								
								tests/mini.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2449
									
								
								tests/mini.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1
									
								
								tests/xlsx.mini.min.js
									
									
									
									
										vendored
									
									
										Symbolic link
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										1
									
								
								tests/xlsx.mini.min.js
									
									
									
									
										vendored
									
									
										Symbolic link
									
								
							| @ -0,0 +1 @@ | ||||
| ../dist/xlsx.mini.min.js | ||||
							
								
								
									
										2
									
								
								types/index.d.ts
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								types/index.d.ts
									
									
									
									
										vendored
									
									
								
							| @ -868,4 +868,6 @@ export interface StreamUtils { | ||||
|     to_html(sheet: WorkSheet, opts?: Sheet2HTMLOpts): any; | ||||
|     /** JSON object stream, generate one row at a time */ | ||||
|     to_json(sheet: WorkSheet, opts?: Sheet2JSONOpts): any; | ||||
|     /** Set `Readable` (internal) */ | ||||
|     set_readable(Readable: any): void; | ||||
| } | ||||
|  | ||||
							
								
								
									
										267
									
								
								xlsx.flow.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										267
									
								
								xlsx.flow.js
									
									
									
									
									
								
							| @ -3755,6 +3755,17 @@ function write_vt(s, xlsx/*:?boolean*/)/*:string*/ { | ||||
| 	throw new Error("Unable to serialize " + s); | ||||
| } | ||||
| 
 | ||||
| function xlml_normalize(d)/*:string*/ { | ||||
| 	if(has_buf &&/*::typeof Buffer !== "undefined" && d != null && d instanceof Buffer &&*/ Buffer.isBuffer(d)) return d.toString('utf8'); | ||||
| 	if(typeof d === 'string') return d; | ||||
| 	/* duktape */ | ||||
| 	if(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d))); | ||||
| 	throw new Error("Bad input format: expected Buffer or string"); | ||||
| } | ||||
| /* UOS uses CJK in tags */ | ||||
| var xlmlregex = /<(\/?)([^\s?><!\/:]*:|)([^\s?<>:\/]+)(?:[\s?:\/][^>]*)?>/mg; | ||||
| //var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
 | ||||
| 
 | ||||
| var XMLNS = ({ | ||||
| 	'dc': 'http://purl.org/dc/elements/1.1/', | ||||
| 	'dcterms': 'http://purl.org/dc/terms/', | ||||
| @ -17146,18 +17157,7 @@ function xlml_clean_comment(comment/*:any*/) { | ||||
| 	comment.v = comment.w = comment.ixfe = undefined; | ||||
| } | ||||
| 
 | ||||
| function xlml_normalize(d)/*:string*/ { | ||||
| 	if(has_buf &&/*::typeof Buffer !== "undefined" && d != null && d instanceof Buffer &&*/ Buffer.isBuffer(d)) return d.toString('utf8'); | ||||
| 	if(typeof d === 'string') return d; | ||||
| 	/* duktape */ | ||||
| 	if(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d))); | ||||
| 	throw new Error("Bad input format: expected Buffer or string"); | ||||
| } | ||||
| 
 | ||||
| /* TODO: Everything */ | ||||
| /* UOS uses CJK in tags */ | ||||
| var xlmlregex = /<(\/?)([^\s?><!\/:]*:|)([^\s?<>:\/]+)(?:[\s?:\/][^>]*)?>/mg; | ||||
| //var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
 | ||||
| function parse_xlml_xml(d, _opts)/*:Workbook*/ { | ||||
| 	var opts = _opts || {}; | ||||
| 	make_ssf(SSF); | ||||
| @ -20994,7 +20994,7 @@ var HTML_ = (function() { | ||||
| 		return ws; | ||||
| 	} | ||||
| 	function html_to_book(str/*:string*/, opts)/*:Workbook*/ { | ||||
| 		var mtch = str.match(/<table.*?>[\s\S]*?<\/table>/gi); | ||||
| 		var mtch = str.match(/<table[\s\S]*?>[\s\S]*?<\/table>/gi); | ||||
| 		if(!mtch || mtch.length == 0) throw new Error("Invalid HTML: could not find <table>"); | ||||
| 		if(mtch.length == 1) return sheet_to_workbook(html_to_sheet(mtch[0], opts), opts); | ||||
| 		var wb = utils.book_new(); | ||||
| @ -23711,7 +23711,7 @@ function sheet_to_json(sheet/*:Worksheet*/, opts/*:?Sheet2JSONOpts*/) { | ||||
| 				if(val == null) val = {w: "__EMPTY", t: "s"}; | ||||
| 				vv = v = format_cell(val, null, o); | ||||
| 				counter = 0; | ||||
| 				for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + "_" + (++counter); | ||||
| 				for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) { vv = v + "_" + (++counter); CC = -1; } | ||||
| 				hdr[C] = vv; | ||||
| 		} | ||||
| 	} | ||||
| @ -23760,12 +23760,13 @@ function sheet_to_csv(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/)/*:string*/ { | ||||
| 	var colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet["!cols"] || []; | ||||
| 	var rowinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet["!rows"] || []; | ||||
| 	for(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C); | ||||
| 	var w = 0; | ||||
| 	for(var R = r.s.r; R <= r.e.r; ++R) { | ||||
| 		if ((rowinfo[R]||{}).hidden) continue; | ||||
| 		row = make_csv_row(sheet, r, R, cols, fs, rs, FS, o); | ||||
| 		if(row == null) { continue; } | ||||
| 		if(o.strip) row = row.replace(endregex,""); | ||||
| 		out.push(row + RS); | ||||
| 		if(row || (o.blankrows !== false)) out.push((w++ ? RS : "") + row); | ||||
| 	} | ||||
| 	delete o.dense; | ||||
| 	return out.join(""); | ||||
| @ -24020,131 +24021,126 @@ utils.sheet_set_array_formula = function(ws/*:Worksheet*/, range, formula/*:stri | ||||
| return utils; | ||||
| })(utils); | ||||
| 
 | ||||
| if(has_buf && typeof require != 'undefined') (function() { | ||||
| 	var strmod = require('stream'); | ||||
| 	if(!strmod) return; | ||||
| 	var Readable = strmod.Readable; | ||||
| 	if(!Readable) return; | ||||
| var _Readable; | ||||
| function set_readable(R) { _Readable = R; } | ||||
| 
 | ||||
| 	var write_csv_stream = function(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) { | ||||
| 		var stream = Readable(); | ||||
| 		var o = opts == null ? {} : opts; | ||||
| 		if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; } | ||||
| 		var r = safe_decode_range(sheet["!ref"]); | ||||
| 		var FS = o.FS !== undefined ? o.FS : ",", fs = FS.charCodeAt(0); | ||||
| 		var RS = o.RS !== undefined ? o.RS : "\n", rs = RS.charCodeAt(0); | ||||
| 		var endregex = new RegExp((FS=="|" ? "\\|" : FS)+"+$"); | ||||
| 		var row/*:?string*/ = "", cols/*:Array<string>*/ = []; | ||||
| 		o.dense = Array.isArray(sheet); | ||||
| 		var colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet["!cols"] || []; | ||||
| 		var rowinfo/*:Array<RowInfo>*/ = o.skipHidden && sheet["!rows"] || []; | ||||
| 		for(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C); | ||||
| 		var R = r.s.r; | ||||
| 		var BOM = false; | ||||
| 		stream._read = function() { | ||||
| 			if(!BOM) { BOM = true; return stream.push("\uFEFF"); } | ||||
| 			while(R <= r.e.r) { | ||||
| 				++R; | ||||
| 				if ((rowinfo[R-1]||{}).hidden) continue; | ||||
| 				row = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o); | ||||
| 				if(row != null) { | ||||
| 					if(o.strip) row = row.replace(endregex,""); | ||||
| 					stream.push(row + RS); | ||||
| 					break; | ||||
| 				} | ||||
| 			} | ||||
| 			if(R > r.e.r) return stream.push(null); | ||||
| 		}; | ||||
| 		return stream; | ||||
| 	}; | ||||
| 
 | ||||
| 	var write_html_stream = function(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*/) { | ||||
| 		var stream = Readable(); | ||||
| 
 | ||||
| 		var o = opts || {}; | ||||
| 		var header = o.header != null ? o.header : HTML_.BEGIN; | ||||
| 		var footer = o.footer != null ? o.footer : HTML_.END; | ||||
| 		stream.push(header); | ||||
| 		var r = decode_range(ws['!ref']); | ||||
| 		o.dense = Array.isArray(ws); | ||||
| 		stream.push(HTML_._preamble(ws, r, o)); | ||||
| 		var R = r.s.r; | ||||
| 		var end = false; | ||||
| 		stream._read = function() { | ||||
| 			if(R > r.e.r) { | ||||
| 				if(!end) { end = true; stream.push("</table>" + footer); } | ||||
| 				return stream.push(null); | ||||
| 			} | ||||
| 			while(R <= r.e.r) { | ||||
| 				stream.push(HTML_._row(ws, r, R, o)); | ||||
| 				++R; | ||||
| 				break; | ||||
| 			} | ||||
| 		}; | ||||
| 		return stream; | ||||
| 	}; | ||||
| 
 | ||||
| 	var write_json_stream = function(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) { | ||||
| 		var stream = Readable({objectMode:true}); | ||||
| 
 | ||||
| 		if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; } | ||||
| 		var val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array<any>*/ = [], v=0, vv=""; | ||||
| 		var r = {s:{r:0,c:0},e:{r:0,c:0}}; | ||||
| 		var o = opts || {}; | ||||
| 		var range = o.range != null ? o.range : sheet["!ref"]; | ||||
| 		if(o.header === 1) header = 1; | ||||
| 		else if(o.header === "A") header = 2; | ||||
| 		else if(Array.isArray(o.header)) header = 3; | ||||
| 		switch(typeof range) { | ||||
| 			case 'string': r = safe_decode_range(range); break; | ||||
| 			case 'number': r = safe_decode_range(sheet["!ref"]); r.s.r = range; break; | ||||
| 			default: r = range; | ||||
| 		} | ||||
| 		if(header > 0) offset = 0; | ||||
| 		var rr = encode_row(r.s.r); | ||||
| 		var cols/*:Array<string>*/ = []; | ||||
| 		var counter = 0; | ||||
| 		var dense = Array.isArray(sheet); | ||||
| 		var R = r.s.r, C = 0, CC = 0; | ||||
| 		if(dense && !sheet[R]) sheet[R] = []; | ||||
| 		for(C = r.s.c; C <= r.e.c; ++C) { | ||||
| 			cols[C] = encode_col(C); | ||||
| 			val = dense ? sheet[R][C] : sheet[cols[C] + rr]; | ||||
| 			switch(header) { | ||||
| 				case 1: hdr[C] = C - r.s.c; break; | ||||
| 				case 2: hdr[C] = cols[C]; break; | ||||
| 				case 3: hdr[C] = o.header[C - r.s.c]; break; | ||||
| 				default: | ||||
| 					if(val == null) val = {w: "__EMPTY", t: "s"}; | ||||
| 					vv = v = format_cell(val, null, o); | ||||
| 					counter = 0; | ||||
| 					for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + "_" + (++counter); | ||||
| 					hdr[C] = vv; | ||||
| function write_csv_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) { | ||||
| 	var stream = _Readable(); | ||||
| 	var o = opts == null ? {} : opts; | ||||
| 	if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; } | ||||
| 	var r = safe_decode_range(sheet["!ref"]); | ||||
| 	var FS = o.FS !== undefined ? o.FS : ",", fs = FS.charCodeAt(0); | ||||
| 	var RS = o.RS !== undefined ? o.RS : "\n", rs = RS.charCodeAt(0); | ||||
| 	var endregex = new RegExp((FS=="|" ? "\\|" : FS)+"+$"); | ||||
| 	var row/*:?string*/ = "", cols/*:Array<string>*/ = []; | ||||
| 	o.dense = Array.isArray(sheet); | ||||
| 	var colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet["!cols"] || []; | ||||
| 	var rowinfo/*:Array<RowInfo>*/ = o.skipHidden && sheet["!rows"] || []; | ||||
| 	for(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C); | ||||
| 	var R = r.s.r; | ||||
| 	var BOM = false, w = 0; | ||||
| 	stream._read = function() { | ||||
| 		if(!BOM) { BOM = true; return stream.push("\uFEFF"); } | ||||
| 		while(R <= r.e.r) { | ||||
| 			++R; | ||||
| 			if ((rowinfo[R-1]||{}).hidden) continue; | ||||
| 			row = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o); | ||||
| 			if(row != null) { | ||||
| 				if(o.strip) row = row.replace(endregex,""); | ||||
| 				if(row || (o.blankrows !== false)) return stream.push((w++ ? RS : "") + row); | ||||
| 			} | ||||
| 		} | ||||
| 		R = r.s.r + offset; | ||||
| 		stream._read = function() { | ||||
| 			if(R > r.e.r) return stream.push(null); | ||||
| 			while(R <= r.e.r) { | ||||
| 				//if ((rowinfo[R-1]||{}).hidden) continue;
 | ||||
| 				var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o); | ||||
| 				++R; | ||||
| 				if((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) { | ||||
| 					stream.push(row.row); | ||||
| 					break; | ||||
| 				} | ||||
| 		return stream.push(null); | ||||
| 	}; | ||||
| 	return stream; | ||||
| } | ||||
| 
 | ||||
| function write_html_stream(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*/) { | ||||
| 	var stream = _Readable(); | ||||
| 
 | ||||
| 	var o = opts || {}; | ||||
| 	var header = o.header != null ? o.header : HTML_.BEGIN; | ||||
| 	var footer = o.footer != null ? o.footer : HTML_.END; | ||||
| 	stream.push(header); | ||||
| 	var r = decode_range(ws['!ref']); | ||||
| 	o.dense = Array.isArray(ws); | ||||
| 	stream.push(HTML_._preamble(ws, r, o)); | ||||
| 	var R = r.s.r; | ||||
| 	var end = false; | ||||
| 	stream._read = function() { | ||||
| 		if(R > r.e.r) { | ||||
| 			if(!end) { end = true; stream.push("</table>" + footer); } | ||||
| 			return stream.push(null); | ||||
| 		} | ||||
| 		while(R <= r.e.r) { | ||||
| 			stream.push(HTML_._row(ws, r, R, o)); | ||||
| 			++R; | ||||
| 			break; | ||||
| 		} | ||||
| 	}; | ||||
| 	return stream; | ||||
| } | ||||
| 
 | ||||
| function write_json_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) { | ||||
| 	var stream = _Readable({objectMode:true}); | ||||
| 
 | ||||
| 	if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; } | ||||
| 	var val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array<any>*/ = [], v=0, vv=""; | ||||
| 	var r = {s:{r:0,c:0},e:{r:0,c:0}}; | ||||
| 	var o = opts || {}; | ||||
| 	var range = o.range != null ? o.range : sheet["!ref"]; | ||||
| 	if(o.header === 1) header = 1; | ||||
| 	else if(o.header === "A") header = 2; | ||||
| 	else if(Array.isArray(o.header)) header = 3; | ||||
| 	switch(typeof range) { | ||||
| 		case 'string': r = safe_decode_range(range); break; | ||||
| 		case 'number': r = safe_decode_range(sheet["!ref"]); r.s.r = range; break; | ||||
| 		default: r = range; | ||||
| 	} | ||||
| 	if(header > 0) offset = 0; | ||||
| 	var rr = encode_row(r.s.r); | ||||
| 	var cols/*:Array<string>*/ = []; | ||||
| 	var counter = 0; | ||||
| 	var dense = Array.isArray(sheet); | ||||
| 	var R = r.s.r, C = 0, CC = 0; | ||||
| 	if(dense && !sheet[R]) sheet[R] = []; | ||||
| 	for(C = r.s.c; C <= r.e.c; ++C) { | ||||
| 		cols[C] = encode_col(C); | ||||
| 		val = dense ? sheet[R][C] : sheet[cols[C] + rr]; | ||||
| 		switch(header) { | ||||
| 			case 1: hdr[C] = C - r.s.c; break; | ||||
| 			case 2: hdr[C] = cols[C]; break; | ||||
| 			case 3: hdr[C] = o.header[C - r.s.c]; break; | ||||
| 			default: | ||||
| 				if(val == null) val = {w: "__EMPTY", t: "s"}; | ||||
| 				vv = v = format_cell(val, null, o); | ||||
| 				counter = 0; | ||||
| 				for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + "_" + (++counter); | ||||
| 				hdr[C] = vv; | ||||
| 		} | ||||
| 	} | ||||
| 	R = r.s.r + offset; | ||||
| 	stream._read = function() { | ||||
| 		while(R <= r.e.r) { | ||||
| 			//if ((rowinfo[R-1]||{}).hidden) continue;
 | ||||
| 			var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o); | ||||
| 			++R; | ||||
| 			if((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) { | ||||
| 				stream.push(row.row); | ||||
| 				return; | ||||
| 			} | ||||
| 		}; | ||||
| 		return stream; | ||||
| 		} | ||||
| 		return stream.push(null); | ||||
| 	}; | ||||
| 	return stream; | ||||
| }; | ||||
| 
 | ||||
| 	XLSX.stream = { | ||||
| 		to_json: write_json_stream, | ||||
| 		to_html: write_html_stream, | ||||
| 		to_csv: write_csv_stream | ||||
| 	}; | ||||
| })(); | ||||
| 
 | ||||
| var __stream = { | ||||
| 	to_json: write_json_stream, | ||||
| 	to_html: write_html_stream, | ||||
| 	to_csv: write_csv_stream, | ||||
|   set_readable: set_readable | ||||
| }; | ||||
| if(typeof parse_xlscfb !== "undefined") XLSX.parse_xlscfb = parse_xlscfb; | ||||
| XLSX.parse_zip = parse_zip; | ||||
| XLSX.read = readSync; //xlsread
 | ||||
| @ -24158,7 +24154,12 @@ XLSX.utils = utils; | ||||
| XLSX.writeXLSX = writeSyncXLSX; | ||||
| XLSX.writeFileXLSX = writeFileSyncXLSX; | ||||
| XLSX.SSF = SSF; | ||||
| if(typeof __stream !== "undefined") XLSX.stream = __stream; | ||||
| if(typeof CFB !== "undefined") XLSX.CFB = CFB; | ||||
| if(typeof require !== "undefined") { | ||||
|   var strmod = require('stream'); | ||||
|   if((strmod||{}).Readable) set_readable(strmod.Readable); | ||||
| } | ||||
| } | ||||
| /*global define */ | ||||
| /*:: declare var define:any; */ | ||||
|  | ||||
							
								
								
									
										267
									
								
								xlsx.js
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										267
									
								
								xlsx.js
									
									
									
										generated
									
									
									
								
							| @ -3674,6 +3674,17 @@ function write_vt(s, xlsx) { | ||||
| 	throw new Error("Unable to serialize " + s); | ||||
| } | ||||
| 
 | ||||
| function xlml_normalize(d) { | ||||
| 	if(has_buf && Buffer.isBuffer(d)) return d.toString('utf8'); | ||||
| 	if(typeof d === 'string') return d; | ||||
| 	/* duktape */ | ||||
| 	if(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d))); | ||||
| 	throw new Error("Bad input format: expected Buffer or string"); | ||||
| } | ||||
| /* UOS uses CJK in tags */ | ||||
| var xlmlregex = /<(\/?)([^\s?><!\/:]*:|)([^\s?<>:\/]+)(?:[\s?:\/][^>]*)?>/mg; | ||||
| //var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
 | ||||
| 
 | ||||
| var XMLNS = ({ | ||||
| 	'dc': 'http://purl.org/dc/elements/1.1/', | ||||
| 	'dcterms': 'http://purl.org/dc/terms/', | ||||
| @ -17040,18 +17051,7 @@ function xlml_clean_comment(comment) { | ||||
| 	comment.v = comment.w = comment.ixfe = undefined; | ||||
| } | ||||
| 
 | ||||
| function xlml_normalize(d) { | ||||
| 	if(has_buf && Buffer.isBuffer(d)) return d.toString('utf8'); | ||||
| 	if(typeof d === 'string') return d; | ||||
| 	/* duktape */ | ||||
| 	if(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d))); | ||||
| 	throw new Error("Bad input format: expected Buffer or string"); | ||||
| } | ||||
| 
 | ||||
| /* TODO: Everything */ | ||||
| /* UOS uses CJK in tags */ | ||||
| var xlmlregex = /<(\/?)([^\s?><!\/:]*:|)([^\s?<>:\/]+)(?:[\s?:\/][^>]*)?>/mg; | ||||
| //var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
 | ||||
| function parse_xlml_xml(d, _opts) { | ||||
| 	var opts = _opts || {}; | ||||
| 	make_ssf(SSF); | ||||
| @ -20877,7 +20877,7 @@ var HTML_ = (function() { | ||||
| 		return ws; | ||||
| 	} | ||||
| 	function html_to_book(str, opts) { | ||||
| 		var mtch = str.match(/<table.*?>[\s\S]*?<\/table>/gi); | ||||
| 		var mtch = str.match(/<table[\s\S]*?>[\s\S]*?<\/table>/gi); | ||||
| 		if(!mtch || mtch.length == 0) throw new Error("Invalid HTML: could not find <table>"); | ||||
| 		if(mtch.length == 1) return sheet_to_workbook(html_to_sheet(mtch[0], opts), opts); | ||||
| 		var wb = utils.book_new(); | ||||
| @ -23583,7 +23583,7 @@ function sheet_to_json(sheet, opts) { | ||||
| 				if(val == null) val = {w: "__EMPTY", t: "s"}; | ||||
| 				vv = v = format_cell(val, null, o); | ||||
| 				counter = 0; | ||||
| 				for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + "_" + (++counter); | ||||
| 				for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) { vv = v + "_" + (++counter); CC = -1; } | ||||
| 				hdr[C] = vv; | ||||
| 		} | ||||
| 	} | ||||
| @ -23632,12 +23632,13 @@ function sheet_to_csv(sheet, opts) { | ||||
| 	var colinfo = o.skipHidden && sheet["!cols"] || []; | ||||
| 	var rowinfo = o.skipHidden && sheet["!rows"] || []; | ||||
| 	for(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C); | ||||
| 	var w = 0; | ||||
| 	for(var R = r.s.r; R <= r.e.r; ++R) { | ||||
| 		if ((rowinfo[R]||{}).hidden) continue; | ||||
| 		row = make_csv_row(sheet, r, R, cols, fs, rs, FS, o); | ||||
| 		if(row == null) { continue; } | ||||
| 		if(o.strip) row = row.replace(endregex,""); | ||||
| 		out.push(row + RS); | ||||
| 		if(row || (o.blankrows !== false)) out.push((w++ ? RS : "") + row); | ||||
| 	} | ||||
| 	delete o.dense; | ||||
| 	return out.join(""); | ||||
| @ -23892,131 +23893,126 @@ utils.sheet_set_array_formula = function(ws, range, formula, dynamic) { | ||||
| return utils; | ||||
| })(utils); | ||||
| 
 | ||||
| if(has_buf && typeof require != 'undefined') (function() { | ||||
| 	var strmod = require('stream'); | ||||
| 	if(!strmod) return; | ||||
| 	var Readable = strmod.Readable; | ||||
| 	if(!Readable) return; | ||||
| var _Readable; | ||||
| function set_readable(R) { _Readable = R; } | ||||
| 
 | ||||
| 	var write_csv_stream = function(sheet, opts) { | ||||
| 		var stream = Readable(); | ||||
| 		var o = opts == null ? {} : opts; | ||||
| 		if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; } | ||||
| 		var r = safe_decode_range(sheet["!ref"]); | ||||
| 		var FS = o.FS !== undefined ? o.FS : ",", fs = FS.charCodeAt(0); | ||||
| 		var RS = o.RS !== undefined ? o.RS : "\n", rs = RS.charCodeAt(0); | ||||
| 		var endregex = new RegExp((FS=="|" ? "\\|" : FS)+"+$"); | ||||
| 		var row = "", cols = []; | ||||
| 		o.dense = Array.isArray(sheet); | ||||
| 		var colinfo = o.skipHidden && sheet["!cols"] || []; | ||||
| 		var rowinfo = o.skipHidden && sheet["!rows"] || []; | ||||
| 		for(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C); | ||||
| 		var R = r.s.r; | ||||
| 		var BOM = false; | ||||
| 		stream._read = function() { | ||||
| 			if(!BOM) { BOM = true; return stream.push("\uFEFF"); } | ||||
| 			while(R <= r.e.r) { | ||||
| 				++R; | ||||
| 				if ((rowinfo[R-1]||{}).hidden) continue; | ||||
| 				row = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o); | ||||
| 				if(row != null) { | ||||
| 					if(o.strip) row = row.replace(endregex,""); | ||||
| 					stream.push(row + RS); | ||||
| 					break; | ||||
| 				} | ||||
| 			} | ||||
| 			if(R > r.e.r) return stream.push(null); | ||||
| 		}; | ||||
| 		return stream; | ||||
| 	}; | ||||
| 
 | ||||
| 	var write_html_stream = function(ws, opts) { | ||||
| 		var stream = Readable(); | ||||
| 
 | ||||
| 		var o = opts || {}; | ||||
| 		var header = o.header != null ? o.header : HTML_.BEGIN; | ||||
| 		var footer = o.footer != null ? o.footer : HTML_.END; | ||||
| 		stream.push(header); | ||||
| 		var r = decode_range(ws['!ref']); | ||||
| 		o.dense = Array.isArray(ws); | ||||
| 		stream.push(HTML_._preamble(ws, r, o)); | ||||
| 		var R = r.s.r; | ||||
| 		var end = false; | ||||
| 		stream._read = function() { | ||||
| 			if(R > r.e.r) { | ||||
| 				if(!end) { end = true; stream.push("</table>" + footer); } | ||||
| 				return stream.push(null); | ||||
| 			} | ||||
| 			while(R <= r.e.r) { | ||||
| 				stream.push(HTML_._row(ws, r, R, o)); | ||||
| 				++R; | ||||
| 				break; | ||||
| 			} | ||||
| 		}; | ||||
| 		return stream; | ||||
| 	}; | ||||
| 
 | ||||
| 	var write_json_stream = function(sheet, opts) { | ||||
| 		var stream = Readable({objectMode:true}); | ||||
| 
 | ||||
| 		if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; } | ||||
| 		var val = {t:'n',v:0}, header = 0, offset = 1, hdr = [], v=0, vv=""; | ||||
| 		var r = {s:{r:0,c:0},e:{r:0,c:0}}; | ||||
| 		var o = opts || {}; | ||||
| 		var range = o.range != null ? o.range : sheet["!ref"]; | ||||
| 		if(o.header === 1) header = 1; | ||||
| 		else if(o.header === "A") header = 2; | ||||
| 		else if(Array.isArray(o.header)) header = 3; | ||||
| 		switch(typeof range) { | ||||
| 			case 'string': r = safe_decode_range(range); break; | ||||
| 			case 'number': r = safe_decode_range(sheet["!ref"]); r.s.r = range; break; | ||||
| 			default: r = range; | ||||
| 		} | ||||
| 		if(header > 0) offset = 0; | ||||
| 		var rr = encode_row(r.s.r); | ||||
| 		var cols = []; | ||||
| 		var counter = 0; | ||||
| 		var dense = Array.isArray(sheet); | ||||
| 		var R = r.s.r, C = 0, CC = 0; | ||||
| 		if(dense && !sheet[R]) sheet[R] = []; | ||||
| 		for(C = r.s.c; C <= r.e.c; ++C) { | ||||
| 			cols[C] = encode_col(C); | ||||
| 			val = dense ? sheet[R][C] : sheet[cols[C] + rr]; | ||||
| 			switch(header) { | ||||
| 				case 1: hdr[C] = C - r.s.c; break; | ||||
| 				case 2: hdr[C] = cols[C]; break; | ||||
| 				case 3: hdr[C] = o.header[C - r.s.c]; break; | ||||
| 				default: | ||||
| 					if(val == null) val = {w: "__EMPTY", t: "s"}; | ||||
| 					vv = v = format_cell(val, null, o); | ||||
| 					counter = 0; | ||||
| 					for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + "_" + (++counter); | ||||
| 					hdr[C] = vv; | ||||
| function write_csv_stream(sheet, opts) { | ||||
| 	var stream = _Readable(); | ||||
| 	var o = opts == null ? {} : opts; | ||||
| 	if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; } | ||||
| 	var r = safe_decode_range(sheet["!ref"]); | ||||
| 	var FS = o.FS !== undefined ? o.FS : ",", fs = FS.charCodeAt(0); | ||||
| 	var RS = o.RS !== undefined ? o.RS : "\n", rs = RS.charCodeAt(0); | ||||
| 	var endregex = new RegExp((FS=="|" ? "\\|" : FS)+"+$"); | ||||
| 	var row = "", cols = []; | ||||
| 	o.dense = Array.isArray(sheet); | ||||
| 	var colinfo = o.skipHidden && sheet["!cols"] || []; | ||||
| 	var rowinfo = o.skipHidden && sheet["!rows"] || []; | ||||
| 	for(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C); | ||||
| 	var R = r.s.r; | ||||
| 	var BOM = false, w = 0; | ||||
| 	stream._read = function() { | ||||
| 		if(!BOM) { BOM = true; return stream.push("\uFEFF"); } | ||||
| 		while(R <= r.e.r) { | ||||
| 			++R; | ||||
| 			if ((rowinfo[R-1]||{}).hidden) continue; | ||||
| 			row = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o); | ||||
| 			if(row != null) { | ||||
| 				if(o.strip) row = row.replace(endregex,""); | ||||
| 				if(row || (o.blankrows !== false)) return stream.push((w++ ? RS : "") + row); | ||||
| 			} | ||||
| 		} | ||||
| 		R = r.s.r + offset; | ||||
| 		stream._read = function() { | ||||
| 			if(R > r.e.r) return stream.push(null); | ||||
| 			while(R <= r.e.r) { | ||||
| 				//if ((rowinfo[R-1]||{}).hidden) continue;
 | ||||
| 				var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o); | ||||
| 				++R; | ||||
| 				if((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) { | ||||
| 					stream.push(row.row); | ||||
| 					break; | ||||
| 				} | ||||
| 		return stream.push(null); | ||||
| 	}; | ||||
| 	return stream; | ||||
| } | ||||
| 
 | ||||
| function write_html_stream(ws, opts) { | ||||
| 	var stream = _Readable(); | ||||
| 
 | ||||
| 	var o = opts || {}; | ||||
| 	var header = o.header != null ? o.header : HTML_.BEGIN; | ||||
| 	var footer = o.footer != null ? o.footer : HTML_.END; | ||||
| 	stream.push(header); | ||||
| 	var r = decode_range(ws['!ref']); | ||||
| 	o.dense = Array.isArray(ws); | ||||
| 	stream.push(HTML_._preamble(ws, r, o)); | ||||
| 	var R = r.s.r; | ||||
| 	var end = false; | ||||
| 	stream._read = function() { | ||||
| 		if(R > r.e.r) { | ||||
| 			if(!end) { end = true; stream.push("</table>" + footer); } | ||||
| 			return stream.push(null); | ||||
| 		} | ||||
| 		while(R <= r.e.r) { | ||||
| 			stream.push(HTML_._row(ws, r, R, o)); | ||||
| 			++R; | ||||
| 			break; | ||||
| 		} | ||||
| 	}; | ||||
| 	return stream; | ||||
| } | ||||
| 
 | ||||
| function write_json_stream(sheet, opts) { | ||||
| 	var stream = _Readable({objectMode:true}); | ||||
| 
 | ||||
| 	if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; } | ||||
| 	var val = {t:'n',v:0}, header = 0, offset = 1, hdr = [], v=0, vv=""; | ||||
| 	var r = {s:{r:0,c:0},e:{r:0,c:0}}; | ||||
| 	var o = opts || {}; | ||||
| 	var range = o.range != null ? o.range : sheet["!ref"]; | ||||
| 	if(o.header === 1) header = 1; | ||||
| 	else if(o.header === "A") header = 2; | ||||
| 	else if(Array.isArray(o.header)) header = 3; | ||||
| 	switch(typeof range) { | ||||
| 		case 'string': r = safe_decode_range(range); break; | ||||
| 		case 'number': r = safe_decode_range(sheet["!ref"]); r.s.r = range; break; | ||||
| 		default: r = range; | ||||
| 	} | ||||
| 	if(header > 0) offset = 0; | ||||
| 	var rr = encode_row(r.s.r); | ||||
| 	var cols = []; | ||||
| 	var counter = 0; | ||||
| 	var dense = Array.isArray(sheet); | ||||
| 	var R = r.s.r, C = 0, CC = 0; | ||||
| 	if(dense && !sheet[R]) sheet[R] = []; | ||||
| 	for(C = r.s.c; C <= r.e.c; ++C) { | ||||
| 		cols[C] = encode_col(C); | ||||
| 		val = dense ? sheet[R][C] : sheet[cols[C] + rr]; | ||||
| 		switch(header) { | ||||
| 			case 1: hdr[C] = C - r.s.c; break; | ||||
| 			case 2: hdr[C] = cols[C]; break; | ||||
| 			case 3: hdr[C] = o.header[C - r.s.c]; break; | ||||
| 			default: | ||||
| 				if(val == null) val = {w: "__EMPTY", t: "s"}; | ||||
| 				vv = v = format_cell(val, null, o); | ||||
| 				counter = 0; | ||||
| 				for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + "_" + (++counter); | ||||
| 				hdr[C] = vv; | ||||
| 		} | ||||
| 	} | ||||
| 	R = r.s.r + offset; | ||||
| 	stream._read = function() { | ||||
| 		while(R <= r.e.r) { | ||||
| 			//if ((rowinfo[R-1]||{}).hidden) continue;
 | ||||
| 			var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o); | ||||
| 			++R; | ||||
| 			if((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) { | ||||
| 				stream.push(row.row); | ||||
| 				return; | ||||
| 			} | ||||
| 		}; | ||||
| 		return stream; | ||||
| 		} | ||||
| 		return stream.push(null); | ||||
| 	}; | ||||
| 	return stream; | ||||
| }; | ||||
| 
 | ||||
| 	XLSX.stream = { | ||||
| 		to_json: write_json_stream, | ||||
| 		to_html: write_html_stream, | ||||
| 		to_csv: write_csv_stream | ||||
| 	}; | ||||
| })(); | ||||
| 
 | ||||
| var __stream = { | ||||
| 	to_json: write_json_stream, | ||||
| 	to_html: write_html_stream, | ||||
| 	to_csv: write_csv_stream, | ||||
|   set_readable: set_readable | ||||
| }; | ||||
| if(typeof parse_xlscfb !== "undefined") XLSX.parse_xlscfb = parse_xlscfb; | ||||
| XLSX.parse_zip = parse_zip; | ||||
| XLSX.read = readSync; //xlsread
 | ||||
| @ -24030,7 +24026,12 @@ XLSX.utils = utils; | ||||
| XLSX.writeXLSX = writeSyncXLSX; | ||||
| XLSX.writeFileXLSX = writeFileSyncXLSX; | ||||
| XLSX.SSF = SSF; | ||||
| if(typeof __stream !== "undefined") XLSX.stream = __stream; | ||||
| if(typeof CFB !== "undefined") XLSX.CFB = CFB; | ||||
| if(typeof require !== "undefined") { | ||||
|   var strmod = require('stream'); | ||||
|   if((strmod||{}).Readable) set_readable(strmod.Readable); | ||||
| } | ||||
| } | ||||
| /*global define */ | ||||
| if(typeof exports !== 'undefined') make_xlsx_lib(exports); | ||||
|  | ||||
| @ -3733,6 +3733,17 @@ function write_vt(s, xlsx/*:?boolean*/)/*:string*/ { | ||||
| 	throw new Error("Unable to serialize " + s); | ||||
| } | ||||
| 
 | ||||
| function xlml_normalize(d)/*:string*/ { | ||||
| 	if(has_buf &&/*::typeof Buffer !== "undefined" && d != null && d instanceof Buffer &&*/ Buffer.isBuffer(d)) return d.toString('utf8'); | ||||
| 	if(typeof d === 'string') return d; | ||||
| 	/* duktape */ | ||||
| 	if(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d))); | ||||
| 	throw new Error("Bad input format: expected Buffer or string"); | ||||
| } | ||||
| /* UOS uses CJK in tags */ | ||||
| var xlmlregex = /<(\/?)([^\s?><!\/:]*:|)([^\s?<>:\/]+)(?:[\s?:\/][^>]*)?>/mg; | ||||
| //var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
 | ||||
| 
 | ||||
| var XMLNS = ({ | ||||
| 	'dc': 'http://purl.org/dc/elements/1.1/', | ||||
| 	'dcterms': 'http://purl.org/dc/terms/', | ||||
| @ -9189,7 +9200,7 @@ var HTML_ = (function() { | ||||
| 		return ws; | ||||
| 	} | ||||
| 	function html_to_book(str/*:string*/, opts)/*:Workbook*/ { | ||||
| 		var mtch = str.match(/<table.*?>[\s\S]*?<\/table>/gi); | ||||
| 		var mtch = str.match(/<table[\s\S]*?>[\s\S]*?<\/table>/gi); | ||||
| 		if(!mtch || mtch.length == 0) throw new Error("Invalid HTML: could not find <table>"); | ||||
| 		if(mtch.length == 1) return sheet_to_workbook(html_to_sheet(mtch[0], opts), opts); | ||||
| 		var wb = utils.book_new(); | ||||
| @ -11239,7 +11250,7 @@ function sheet_to_json(sheet/*:Worksheet*/, opts/*:?Sheet2JSONOpts*/) { | ||||
| 				if(val == null) val = {w: "__EMPTY", t: "s"}; | ||||
| 				vv = v = format_cell(val, null, o); | ||||
| 				counter = 0; | ||||
| 				for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + "_" + (++counter); | ||||
| 				for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) { vv = v + "_" + (++counter); CC = -1; } | ||||
| 				hdr[C] = vv; | ||||
| 		} | ||||
| 	} | ||||
| @ -11288,12 +11299,13 @@ function sheet_to_csv(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/)/*:string*/ { | ||||
| 	var colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet["!cols"] || []; | ||||
| 	var rowinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet["!rows"] || []; | ||||
| 	for(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C); | ||||
| 	var w = 0; | ||||
| 	for(var R = r.s.r; R <= r.e.r; ++R) { | ||||
| 		if ((rowinfo[R]||{}).hidden) continue; | ||||
| 		row = make_csv_row(sheet, r, R, cols, fs, rs, FS, o); | ||||
| 		if(row == null) { continue; } | ||||
| 		if(o.strip) row = row.replace(endregex,""); | ||||
| 		out.push(row + RS); | ||||
| 		if(row || (o.blankrows !== false)) out.push((w++ ? RS : "") + row); | ||||
| 	} | ||||
| 	delete o.dense; | ||||
| 	return out.join(""); | ||||
| @ -11561,7 +11573,12 @@ XLSX.utils = utils; | ||||
| XLSX.writeXLSX = writeSyncXLSX; | ||||
| XLSX.writeFileXLSX = writeFileSyncXLSX; | ||||
| XLSX.SSF = SSF; | ||||
| if(typeof __stream !== "undefined") XLSX.stream = __stream; | ||||
| if(typeof CFB !== "undefined") XLSX.CFB = CFB; | ||||
| if(typeof require !== "undefined") { | ||||
|   var strmod = require('stream'); | ||||
|   if((strmod||{}).Readable) set_readable(strmod.Readable); | ||||
| } | ||||
| } | ||||
| /*global define */ | ||||
| /*:: declare var define:any; */ | ||||
|  | ||||
							
								
								
									
										23
									
								
								xlsx.mini.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										23
									
								
								xlsx.mini.js
									
									
									
									
									
								
							| @ -3653,6 +3653,17 @@ function write_vt(s, xlsx) { | ||||
| 	throw new Error("Unable to serialize " + s); | ||||
| } | ||||
| 
 | ||||
| function xlml_normalize(d) { | ||||
| 	if(has_buf && Buffer.isBuffer(d)) return d.toString('utf8'); | ||||
| 	if(typeof d === 'string') return d; | ||||
| 	/* duktape */ | ||||
| 	if(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d))); | ||||
| 	throw new Error("Bad input format: expected Buffer or string"); | ||||
| } | ||||
| /* UOS uses CJK in tags */ | ||||
| var xlmlregex = /<(\/?)([^\s?><!\/:]*:|)([^\s?<>:\/]+)(?:[\s?:\/][^>]*)?>/mg; | ||||
| //var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
 | ||||
| 
 | ||||
| var XMLNS = ({ | ||||
| 	'dc': 'http://purl.org/dc/elements/1.1/', | ||||
| 	'dcterms': 'http://purl.org/dc/terms/', | ||||
| @ -9095,7 +9106,7 @@ var HTML_ = (function() { | ||||
| 		return ws; | ||||
| 	} | ||||
| 	function html_to_book(str, opts) { | ||||
| 		var mtch = str.match(/<table.*?>[\s\S]*?<\/table>/gi); | ||||
| 		var mtch = str.match(/<table[\s\S]*?>[\s\S]*?<\/table>/gi); | ||||
| 		if(!mtch || mtch.length == 0) throw new Error("Invalid HTML: could not find <table>"); | ||||
| 		if(mtch.length == 1) return sheet_to_workbook(html_to_sheet(mtch[0], opts), opts); | ||||
| 		var wb = utils.book_new(); | ||||
| @ -11134,7 +11145,7 @@ function sheet_to_json(sheet, opts) { | ||||
| 				if(val == null) val = {w: "__EMPTY", t: "s"}; | ||||
| 				vv = v = format_cell(val, null, o); | ||||
| 				counter = 0; | ||||
| 				for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + "_" + (++counter); | ||||
| 				for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) { vv = v + "_" + (++counter); CC = -1; } | ||||
| 				hdr[C] = vv; | ||||
| 		} | ||||
| 	} | ||||
| @ -11183,12 +11194,13 @@ function sheet_to_csv(sheet, opts) { | ||||
| 	var colinfo = o.skipHidden && sheet["!cols"] || []; | ||||
| 	var rowinfo = o.skipHidden && sheet["!rows"] || []; | ||||
| 	for(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C); | ||||
| 	var w = 0; | ||||
| 	for(var R = r.s.r; R <= r.e.r; ++R) { | ||||
| 		if ((rowinfo[R]||{}).hidden) continue; | ||||
| 		row = make_csv_row(sheet, r, R, cols, fs, rs, FS, o); | ||||
| 		if(row == null) { continue; } | ||||
| 		if(o.strip) row = row.replace(endregex,""); | ||||
| 		out.push(row + RS); | ||||
| 		if(row || (o.blankrows !== false)) out.push((w++ ? RS : "") + row); | ||||
| 	} | ||||
| 	delete o.dense; | ||||
| 	return out.join(""); | ||||
| @ -11456,7 +11468,12 @@ XLSX.utils = utils; | ||||
| XLSX.writeXLSX = writeSyncXLSX; | ||||
| XLSX.writeFileXLSX = writeFileSyncXLSX; | ||||
| XLSX.SSF = SSF; | ||||
| if(typeof __stream !== "undefined") XLSX.stream = __stream; | ||||
| if(typeof CFB !== "undefined") XLSX.CFB = CFB; | ||||
| if(typeof require !== "undefined") { | ||||
|   var strmod = require('stream'); | ||||
|   if((strmod||{}).Readable) set_readable(strmod.Readable); | ||||
| } | ||||
| } | ||||
| /*global define */ | ||||
| if(typeof exports !== 'undefined') make_xlsx_lib(exports); | ||||
|  | ||||
							
								
								
									
										150
									
								
								xlsx.mjs
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										150
									
								
								xlsx.mjs
									
									
									
										generated
									
									
									
								
							| @ -3752,6 +3752,17 @@ function write_vt(s, xlsx/*:?boolean*/)/*:string*/ { | ||||
| 	throw new Error("Unable to serialize " + s); | ||||
| } | ||||
| 
 | ||||
| function xlml_normalize(d)/*:string*/ { | ||||
| 	if(has_buf &&/*::typeof Buffer !== "undefined" && d != null && d instanceof Buffer &&*/ Buffer.isBuffer(d)) return d.toString('utf8'); | ||||
| 	if(typeof d === 'string') return d; | ||||
| 	/* duktape */ | ||||
| 	if(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d))); | ||||
| 	throw new Error("Bad input format: expected Buffer or string"); | ||||
| } | ||||
| /* UOS uses CJK in tags */ | ||||
| var xlmlregex = /<(\/?)([^\s?><!\/:]*:|)([^\s?<>:\/]+)(?:[\s?:\/][^>]*)?>/mg; | ||||
| //var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
 | ||||
| 
 | ||||
| var XMLNS = ({ | ||||
| 	'dc': 'http://purl.org/dc/elements/1.1/', | ||||
| 	'dcterms': 'http://purl.org/dc/terms/', | ||||
| @ -17143,18 +17154,7 @@ function xlml_clean_comment(comment/*:any*/) { | ||||
| 	comment.v = comment.w = comment.ixfe = undefined; | ||||
| } | ||||
| 
 | ||||
| function xlml_normalize(d)/*:string*/ { | ||||
| 	if(has_buf &&/*::typeof Buffer !== "undefined" && d != null && d instanceof Buffer &&*/ Buffer.isBuffer(d)) return d.toString('utf8'); | ||||
| 	if(typeof d === 'string') return d; | ||||
| 	/* duktape */ | ||||
| 	if(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d))); | ||||
| 	throw new Error("Bad input format: expected Buffer or string"); | ||||
| } | ||||
| 
 | ||||
| /* TODO: Everything */ | ||||
| /* UOS uses CJK in tags */ | ||||
| var xlmlregex = /<(\/?)([^\s?><!\/:]*:|)([^\s?<>:\/]+)(?:[\s?:\/][^>]*)?>/mg; | ||||
| //var xlmlregex = /<(\/?)([a-z0-9]*:|)(\w+)[^>]*>/mg;
 | ||||
| function parse_xlml_xml(d, _opts)/*:Workbook*/ { | ||||
| 	var opts = _opts || {}; | ||||
| 	make_ssf(SSF); | ||||
| @ -20991,7 +20991,7 @@ var HTML_ = (function() { | ||||
| 		return ws; | ||||
| 	} | ||||
| 	function html_to_book(str/*:string*/, opts)/*:Workbook*/ { | ||||
| 		var mtch = str.match(/<table.*?>[\s\S]*?<\/table>/gi); | ||||
| 		var mtch = str.match(/<table[\s\S]*?>[\s\S]*?<\/table>/gi); | ||||
| 		if(!mtch || mtch.length == 0) throw new Error("Invalid HTML: could not find <table>"); | ||||
| 		if(mtch.length == 1) return sheet_to_workbook(html_to_sheet(mtch[0], opts), opts); | ||||
| 		var wb = utils.book_new(); | ||||
| @ -23708,7 +23708,7 @@ function sheet_to_json(sheet/*:Worksheet*/, opts/*:?Sheet2JSONOpts*/) { | ||||
| 				if(val == null) val = {w: "__EMPTY", t: "s"}; | ||||
| 				vv = v = format_cell(val, null, o); | ||||
| 				counter = 0; | ||||
| 				for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + "_" + (++counter); | ||||
| 				for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) { vv = v + "_" + (++counter); CC = -1; } | ||||
| 				hdr[C] = vv; | ||||
| 		} | ||||
| 	} | ||||
| @ -23757,12 +23757,13 @@ function sheet_to_csv(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/)/*:string*/ { | ||||
| 	var colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet["!cols"] || []; | ||||
| 	var rowinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet["!rows"] || []; | ||||
| 	for(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C); | ||||
| 	var w = 0; | ||||
| 	for(var R = r.s.r; R <= r.e.r; ++R) { | ||||
| 		if ((rowinfo[R]||{}).hidden) continue; | ||||
| 		row = make_csv_row(sheet, r, R, cols, fs, rs, FS, o); | ||||
| 		if(row == null) { continue; } | ||||
| 		if(o.strip) row = row.replace(endregex,""); | ||||
| 		out.push(row + RS); | ||||
| 		if(row || (o.blankrows !== false)) out.push((w++ ? RS : "") + row); | ||||
| 	} | ||||
| 	delete o.dense; | ||||
| 	return out.join(""); | ||||
| @ -24017,6 +24018,126 @@ utils.sheet_set_array_formula = function(ws/*:Worksheet*/, range, formula/*:stri | ||||
| return utils; | ||||
| })(utils); | ||||
| 
 | ||||
| var _Readable; | ||||
| function set_readable(R) { _Readable = R; } | ||||
| 
 | ||||
| function write_csv_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) { | ||||
| 	var stream = _Readable(); | ||||
| 	var o = opts == null ? {} : opts; | ||||
| 	if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; } | ||||
| 	var r = safe_decode_range(sheet["!ref"]); | ||||
| 	var FS = o.FS !== undefined ? o.FS : ",", fs = FS.charCodeAt(0); | ||||
| 	var RS = o.RS !== undefined ? o.RS : "\n", rs = RS.charCodeAt(0); | ||||
| 	var endregex = new RegExp((FS=="|" ? "\\|" : FS)+"+$"); | ||||
| 	var row/*:?string*/ = "", cols/*:Array<string>*/ = []; | ||||
| 	o.dense = Array.isArray(sheet); | ||||
| 	var colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet["!cols"] || []; | ||||
| 	var rowinfo/*:Array<RowInfo>*/ = o.skipHidden && sheet["!rows"] || []; | ||||
| 	for(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C); | ||||
| 	var R = r.s.r; | ||||
| 	var BOM = false, w = 0; | ||||
| 	stream._read = function() { | ||||
| 		if(!BOM) { BOM = true; return stream.push("\uFEFF"); } | ||||
| 		while(R <= r.e.r) { | ||||
| 			++R; | ||||
| 			if ((rowinfo[R-1]||{}).hidden) continue; | ||||
| 			row = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o); | ||||
| 			if(row != null) { | ||||
| 				if(o.strip) row = row.replace(endregex,""); | ||||
| 				if(row || (o.blankrows !== false)) return stream.push((w++ ? RS : "") + row); | ||||
| 			} | ||||
| 		} | ||||
| 		return stream.push(null); | ||||
| 	}; | ||||
| 	return stream; | ||||
| } | ||||
| 
 | ||||
| function write_html_stream(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*/) { | ||||
| 	var stream = _Readable(); | ||||
| 
 | ||||
| 	var o = opts || {}; | ||||
| 	var header = o.header != null ? o.header : HTML_.BEGIN; | ||||
| 	var footer = o.footer != null ? o.footer : HTML_.END; | ||||
| 	stream.push(header); | ||||
| 	var r = decode_range(ws['!ref']); | ||||
| 	o.dense = Array.isArray(ws); | ||||
| 	stream.push(HTML_._preamble(ws, r, o)); | ||||
| 	var R = r.s.r; | ||||
| 	var end = false; | ||||
| 	stream._read = function() { | ||||
| 		if(R > r.e.r) { | ||||
| 			if(!end) { end = true; stream.push("</table>" + footer); } | ||||
| 			return stream.push(null); | ||||
| 		} | ||||
| 		while(R <= r.e.r) { | ||||
| 			stream.push(HTML_._row(ws, r, R, o)); | ||||
| 			++R; | ||||
| 			break; | ||||
| 		} | ||||
| 	}; | ||||
| 	return stream; | ||||
| } | ||||
| 
 | ||||
| function write_json_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) { | ||||
| 	var stream = _Readable({objectMode:true}); | ||||
| 
 | ||||
| 	if(sheet == null || sheet["!ref"] == null) { stream.push(null); return stream; } | ||||
| 	var val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array<any>*/ = [], v=0, vv=""; | ||||
| 	var r = {s:{r:0,c:0},e:{r:0,c:0}}; | ||||
| 	var o = opts || {}; | ||||
| 	var range = o.range != null ? o.range : sheet["!ref"]; | ||||
| 	if(o.header === 1) header = 1; | ||||
| 	else if(o.header === "A") header = 2; | ||||
| 	else if(Array.isArray(o.header)) header = 3; | ||||
| 	switch(typeof range) { | ||||
| 		case 'string': r = safe_decode_range(range); break; | ||||
| 		case 'number': r = safe_decode_range(sheet["!ref"]); r.s.r = range; break; | ||||
| 		default: r = range; | ||||
| 	} | ||||
| 	if(header > 0) offset = 0; | ||||
| 	var rr = encode_row(r.s.r); | ||||
| 	var cols/*:Array<string>*/ = []; | ||||
| 	var counter = 0; | ||||
| 	var dense = Array.isArray(sheet); | ||||
| 	var R = r.s.r, C = 0, CC = 0; | ||||
| 	if(dense && !sheet[R]) sheet[R] = []; | ||||
| 	for(C = r.s.c; C <= r.e.c; ++C) { | ||||
| 		cols[C] = encode_col(C); | ||||
| 		val = dense ? sheet[R][C] : sheet[cols[C] + rr]; | ||||
| 		switch(header) { | ||||
| 			case 1: hdr[C] = C - r.s.c; break; | ||||
| 			case 2: hdr[C] = cols[C]; break; | ||||
| 			case 3: hdr[C] = o.header[C - r.s.c]; break; | ||||
| 			default: | ||||
| 				if(val == null) val = {w: "__EMPTY", t: "s"}; | ||||
| 				vv = v = format_cell(val, null, o); | ||||
| 				counter = 0; | ||||
| 				for(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + "_" + (++counter); | ||||
| 				hdr[C] = vv; | ||||
| 		} | ||||
| 	} | ||||
| 	R = r.s.r + offset; | ||||
| 	stream._read = function() { | ||||
| 		while(R <= r.e.r) { | ||||
| 			//if ((rowinfo[R-1]||{}).hidden) continue;
 | ||||
| 			var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o); | ||||
| 			++R; | ||||
| 			if((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) { | ||||
| 				stream.push(row.row); | ||||
| 				return; | ||||
| 			} | ||||
| 		} | ||||
| 		return stream.push(null); | ||||
| 	}; | ||||
| 	return stream; | ||||
| }; | ||||
| 
 | ||||
| var __stream = { | ||||
| 	to_json: write_json_stream, | ||||
| 	to_html: write_html_stream, | ||||
| 	to_csv: write_csv_stream, | ||||
|   set_readable: set_readable | ||||
| }; | ||||
| export const version = XLSX.version; | ||||
| export { | ||||
| 	parse_xlscfb, | ||||
| @ -24031,6 +24152,7 @@ export { | ||||
| 	writeSyncXLSX as writeXLSX, | ||||
| 	writeFileSyncXLSX as writeFileXLSX, | ||||
| 	utils, | ||||
| 	__stream as stream, | ||||
| 	SSF, | ||||
| 	CFB | ||||
| }; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user