forked from sheetjs/sheetjs
		
	skipHidden for sheet_to_json [ci skip]
				
					
				
			This commit is contained in:
		
							parent
							
								
									0044f3be82
								
							
						
					
					
						commit
						02707848ad
					
				| @ -42,6 +42,7 @@ tmp | ||||
| .spelling | ||||
| .eslintignore | ||||
| .eslintrc | ||||
| .eslintmjs | ||||
| .jshintrc | ||||
| xlsx.mini.js | ||||
| CONTRIBUTING.md | ||||
|  | ||||
| @ -67,7 +67,10 @@ function sheet_to_json(sheet/*:Worksheet*/, opts/*:?Sheet2JSONOpts*/) { | ||||
| 	var R = r.s.r, C = 0; | ||||
| 	var header_cnt = {}; | ||||
| 	if(dense && !sheet[R]) sheet[R] = []; | ||||
| 	var colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet["!cols"] || []; | ||||
| 	var rowinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet["!rows"] || []; | ||||
| 	for(C = r.s.c; C <= r.e.c; ++C) { | ||||
| 		if(((colinfo[C]||{}).hidden)) continue; | ||||
| 		cols[C] = encode_col(C); | ||||
| 		val = dense ? sheet[R][C] : sheet[cols[C] + rr]; | ||||
| 		switch(header) { | ||||
| @ -87,6 +90,7 @@ function sheet_to_json(sheet/*:Worksheet*/, opts/*:?Sheet2JSONOpts*/) { | ||||
| 		} | ||||
| 	} | ||||
| 	for (R = r.s.r + offset; R <= r.e.r; ++R) { | ||||
| 		if ((rowinfo[R]||{}).hidden) continue; | ||||
| 		var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o); | ||||
| 		if((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row; | ||||
| 	} | ||||
|  | ||||
| @ -82,7 +82,10 @@ function write_json_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) { | ||||
| 	var R = r.s.r, C = 0; | ||||
| 	var header_cnt = {}; | ||||
| 	if(dense && !sheet[R]) sheet[R] = []; | ||||
| 	var colinfo/*:Array<ColInfo>*/ = o.skipHidden && sheet["!cols"] || []; | ||||
| 	var rowinfo/*:Array<RowInfo>*/ = o.skipHidden && sheet["!rows"] || []; | ||||
| 	for(C = r.s.c; C <= r.e.c; ++C) { | ||||
| 		if(((colinfo[C]||{}).hidden)) continue; | ||||
| 		cols[C] = encode_col(C); | ||||
| 		val = dense ? sheet[R][C] : sheet[cols[C] + rr]; | ||||
| 		switch(header) { | ||||
| @ -104,7 +107,7 @@ function write_json_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) { | ||||
| 	R = r.s.r + offset; | ||||
| 	stream._read = function() { | ||||
| 		while(R <= r.e.r) { | ||||
| 			//if ((rowinfo[R-1]||{}).hidden) continue;
 | ||||
| 			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)) { | ||||
|  | ||||
							
								
								
									
										24
									
								
								test.js
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										24
									
								
								test.js
									
									
									
									
									
								
							| @ -1823,6 +1823,30 @@ describe('json output', function() { | ||||
| 		X.utils.sheet_to_json(ws, {raw:true}); | ||||
| 		X.utils.sheet_to_json(ws, {raw:true, defval: 'jimjin'}); | ||||
| 	}); | ||||
| 	it('should handle skipHidden for rows if requested', function() { | ||||
| 		var ws2 = X.utils.aoa_to_sheet(data), json = X.utils.sheet_to_json(ws2); | ||||
| 		assert.equal(json[0]["1"], true); | ||||
| 		assert.equal(json[2]["3"], "qux"); | ||||
| 		ws2["!rows"] = [null,{hidden:true},null,null]; json = X.utils.sheet_to_json(ws2, {skipHidden: 1}); | ||||
| 		assert.equal(json[0]["1"], "foo"); | ||||
| 		assert.equal(json[1]["3"], "qux"); | ||||
| 	}); | ||||
| 	it('should handle skipHidden for columns if requested', function() { | ||||
| 		var ws2 = X.utils.aoa_to_sheet(data), json = X.utils.sheet_to_json(ws2); | ||||
| 		assert.equal(json[1]["2"], "bar"); | ||||
| 		assert.equal(json[2]["3"], "qux"); | ||||
| 		ws2["!cols"] = [null,{hidden:true},null,null]; json = X.utils.sheet_to_json(ws2, {skipHidden: 1}); | ||||
| 		assert.equal(json[1]["2"], void 0); | ||||
| 		assert.equal(json[2]["3"], "qux"); | ||||
| 	}); | ||||
| 	it('should handle skipHidden when first row is hidden', function() { | ||||
| 		var ws2 = X.utils.aoa_to_sheet(data), json = X.utils.sheet_to_json(ws2); | ||||
| 		assert.equal(json[0]["1"], true); | ||||
| 		assert.equal(json[2]["3"], "qux"); | ||||
| 		ws2["!rows"] = [{hidden:true},null,null,null]; json = X.utils.sheet_to_json(ws2, {skipHidden: 1}); | ||||
| 		assert.equal(json[1]["1"], "foo"); | ||||
| 		assert.equal(json[2]["3"], "qux"); | ||||
| 	}); | ||||
| 	it('should disambiguate headers', function() { | ||||
| 		var _data = [["S","h","e","e","t","J","S"],[1,2,3,4,5,6,7],[2,3,4,5,6,7,8]]; | ||||
| 		var _ws = X.utils.aoa_to_sheet(_data); | ||||
|  | ||||
							
								
								
									
										24
									
								
								test.mjs
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										24
									
								
								test.mjs
									
									
									
										generated
									
									
									
								
							| @ -1809,6 +1809,30 @@ describe('json output', function() { | ||||
| 		X.utils.sheet_to_json(ws, {raw:true}); | ||||
| 		X.utils.sheet_to_json(ws, {raw:true, defval: 'jimjin'}); | ||||
| 	}); | ||||
| 	it('should handle skipHidden for rows if requested', function() { | ||||
| 		var ws2 = X.utils.aoa_to_sheet(data), json = X.utils.sheet_to_json(ws2); | ||||
| 		assert.equal(json[0]["1"], true); | ||||
| 		assert.equal(json[2]["3"], "qux"); | ||||
| 		ws2["!rows"] = []; ws2["!rows"][1] = {hidden:true}; json = X.utils.sheet_to_json(ws2, {skipHidden: true}); | ||||
| 		assert.equal(json[0]["1"], "foo"); | ||||
| 		assert.equal(json[1]["3"], "qux"); | ||||
| 	}); | ||||
| 	it('should handle skipHidden for columns if requested', function() { | ||||
| 		var ws2 = X.utils.aoa_to_sheet(data), json = X.utils.sheet_to_json(ws2); | ||||
| 		assert.equal(json[1]["2"], "bar"); | ||||
| 		assert.equal(json[2]["3"], "qux"); | ||||
| 		ws2["!cols"] = []; ws2["!cols"][1] = {hidden:true}; json = X.utils.sheet_to_json(ws2, {skipHidden: true}); | ||||
| 		assert.equal(json[1]["2"], void 0); | ||||
| 		assert.equal(json[2]["3"], "qux"); | ||||
| 	}); | ||||
| 	it('should handle skipHidden when first row is hidden', function() { | ||||
| 		var ws2 = X.utils.aoa_to_sheet(data), json = X.utils.sheet_to_json(ws2); | ||||
| 		assert.equal(json[0]["1"], true); | ||||
| 		assert.equal(json[2]["3"], "qux"); | ||||
| 		ws2["!rows"] = [{hidden:true}]; json = X.utils.sheet_to_json(ws2, {skipHidden: true}); | ||||
| 		assert.equal(json[1]["1"], "foo"); | ||||
| 		assert.equal(json[2]["3"], "qux"); | ||||
| 	}); | ||||
| 	it('should disambiguate headers', function() { | ||||
| 		var _data = [["S","h","e","e","t","J","S"],[1,2,3,4,5,6,7],[2,3,4,5,6,7,8]]; | ||||
| 		var _ws = X.utils.aoa_to_sheet(_data); | ||||
|  | ||||
							
								
								
									
										24
									
								
								test.ts
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										24
									
								
								test.ts
									
									
									
									
									
								
							| @ -1764,6 +1764,30 @@ Deno.test('json output', async function(t) { | ||||
| 		X.utils.sheet_to_json(ws, {raw:true}); | ||||
| 		X.utils.sheet_to_json(ws, {raw:true, defval: 'jimjin'}); | ||||
| 	}); | ||||
| 	await t.step('should handle skipHidden for rows if requested', async function(t) { | ||||
| 		var ws2 = X.utils.aoa_to_sheet(data), json: Array<any> = X.utils.sheet_to_json(ws2); | ||||
| 		assert.equal(json[0]["1"], true); | ||||
| 		assert.equal(json[2]["3"], "qux"); | ||||
| 		ws2["!rows"] = []; ws2["!rows"][1] = {hidden:true}; json = X.utils.sheet_to_json(ws2, {skipHidden: true}); | ||||
| 		assert.equal(json[0]["1"], "foo"); | ||||
| 		assert.equal(json[1]["3"], "qux"); | ||||
| 	}); | ||||
| 	await t.step('should handle skipHidden for columns if requested', async function(t) { | ||||
| 		var ws2 = X.utils.aoa_to_sheet(data), json: Array<any> = X.utils.sheet_to_json(ws2); | ||||
| 		assert.equal(json[1]["2"], "bar"); | ||||
| 		assert.equal(json[2]["3"], "qux"); | ||||
| 		ws2["!cols"] = []; ws2["!cols"][1] = {hidden:true}; json = X.utils.sheet_to_json(ws2, {skipHidden: true}); | ||||
| 		assert.equal(json[1]["2"], void 0); | ||||
| 		assert.equal(json[2]["3"], "qux"); | ||||
| 	}); | ||||
| 	await t.step('should handle skipHidden when first row is hidden', async function(t) { | ||||
| 		var ws2 = X.utils.aoa_to_sheet(data), json: Array<any> = X.utils.sheet_to_json(ws2); | ||||
| 		assert.equal(json[0]["1"], true); | ||||
| 		assert.equal(json[2]["3"], "qux"); | ||||
| 		ws2["!rows"] = [{hidden:true}]; json = X.utils.sheet_to_json(ws2, {skipHidden: true}); | ||||
| 		assert.equal(json[1]["1"], "foo"); | ||||
| 		assert.equal(json[2]["3"], "qux"); | ||||
| 	}); | ||||
| 	await t.step('should disambiguate headers', async function(t) { | ||||
| 		var _data = [["S","h","e","e","t","J","S"],[1,2,3,4,5,6,7],[2,3,4,5,6,7,8]]; | ||||
| 		var _ws = X.utils.aoa_to_sheet(_data); | ||||
|  | ||||
							
								
								
									
										38
									
								
								tests/core.js
									
									
									
										generated
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										38
									
								
								tests/core.js
									
									
									
										generated
									
									
									
								
							| @ -1823,6 +1823,30 @@ describe('json output', function() { | ||||
| 		X.utils.sheet_to_json(ws, {raw:true}); | ||||
| 		X.utils.sheet_to_json(ws, {raw:true, defval: 'jimjin'}); | ||||
| 	}); | ||||
| 	it('should handle skipHidden for rows if requested', function() { | ||||
| 		var ws2 = X.utils.aoa_to_sheet(data), json = X.utils.sheet_to_json(ws2); | ||||
| 		assert.equal(json[0]["1"], true); | ||||
| 		assert.equal(json[2]["3"], "qux"); | ||||
| 		ws2["!rows"] = [null,{hidden:true},null,null]; json = X.utils.sheet_to_json(ws2, {skipHidden: 1}); | ||||
| 		assert.equal(json[0]["1"], "foo"); | ||||
| 		assert.equal(json[1]["3"], "qux"); | ||||
| 	}); | ||||
| 	it('should handle skipHidden for columns if requested', function() { | ||||
| 		var ws2 = X.utils.aoa_to_sheet(data), json = X.utils.sheet_to_json(ws2); | ||||
| 		assert.equal(json[1]["2"], "bar"); | ||||
| 		assert.equal(json[2]["3"], "qux"); | ||||
| 		ws2["!cols"] = [null,{hidden:true},null,null]; json = X.utils.sheet_to_json(ws2, {skipHidden: 1}); | ||||
| 		assert.equal(json[1]["2"], void 0); | ||||
| 		assert.equal(json[2]["3"], "qux"); | ||||
| 	}); | ||||
| 	it('should handle skipHidden when first row is hidden', function() { | ||||
| 		var ws2 = X.utils.aoa_to_sheet(data), json = X.utils.sheet_to_json(ws2); | ||||
| 		assert.equal(json[0]["1"], true); | ||||
| 		assert.equal(json[2]["3"], "qux"); | ||||
| 		ws2["!rows"] = [{hidden:true},null,null,null]; json = X.utils.sheet_to_json(ws2, {skipHidden: 1}); | ||||
| 		assert.equal(json[1]["1"], "foo"); | ||||
| 		assert.equal(json[2]["3"], "qux"); | ||||
| 	}); | ||||
| 	it('should disambiguate headers', function() { | ||||
| 		var _data = [["S","h","e","e","t","J","S"],[1,2,3,4,5,6,7],[2,3,4,5,6,7,8]]; | ||||
| 		var _ws = X.utils.aoa_to_sheet(_data); | ||||
| @ -2286,6 +2310,20 @@ describe('HTML', function() { | ||||
| 			assert.equal(X.utils.sheet_to_csv(ws),  "A,B\n1,2\n3,4\n4,6"); | ||||
| 		}); | ||||
| 	}); | ||||
| 	describe('empty cell containing html element should increment cell index', function() { | ||||
| 		var html = "<table><tr><td>abc</td><td><b> </b></td><td>def</td></tr></table>"; | ||||
| 		var expectedCellCount = 3; | ||||
| 		it('HTML string', function() { | ||||
| 			var ws = X.read(html, {type:'string'}).Sheets.Sheet1; | ||||
| 			var range = X.utils.decode_range(ws['!ref']); | ||||
| 			assert.equal(range.e.c,expectedCellCount - 1); | ||||
| 		}); | ||||
| 		if(domtest) it('DOM', function() { | ||||
| 			var ws = X.utils.table_to_sheet(get_dom_element(html)); | ||||
| 			var range = X.utils.decode_range(ws['!ref']); | ||||
| 			assert.equal(range.e.c, expectedCellCount - 1); | ||||
| 		}); | ||||
| 	}); | ||||
| }); | ||||
| 
 | ||||
| describe('js -> file -> js', function() { | ||||
|  | ||||
							
								
								
									
										3
									
								
								types/index.d.ts
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										3
									
								
								types/index.d.ts
									
									
									
									
										vendored
									
									
								
							| @ -714,6 +714,9 @@ export interface Sheet2JSONOpts extends DateNFOption { | ||||
|     /** if true, return raw data; if false, return formatted text */ | ||||
|     raw?: boolean; | ||||
| 
 | ||||
|     /** if true, skip hidden rows and columns */ | ||||
|     skipHidden?: boolean; | ||||
| 
 | ||||
|     /** if true, return raw numbers; if false, return formatted numbers */ | ||||
|     rawNumbers?: boolean; | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user