forked from sheetjs/sheetjs
		
	Export NaN/Infinity to error cells (fixes #2897)
This commit is contained in:
		
							parent
							
								
									333e4e40f9
								
							
						
					
					
						commit
						b68eaed726
					
				| @ -264,7 +264,10 @@ function write_ws_xml_cell(cell/*:Cell*/, ref, ws, opts/*::, idx, wb*/)/*:string | ||||
| 	var oldt = cell.t, oldv = cell.v; | ||||
| 	if(cell.t !== "z") switch(cell.t) { | ||||
| 		case 'b': vv = cell.v ? "1" : "0"; break; | ||||
| 		case 'n': vv = ''+cell.v; break; | ||||
| 		case 'n': | ||||
| 			if(isNaN(cell.v)) { cell.t = "e"; vv = BErr[cell.v = 0x24]; } // #NUM!
 | ||||
| 			else if(!isFinite(cell.v)) { cell.t = "e"; vv = BErr[cell.v = 0x07]; } // #DIV/0!
 | ||||
| 			else vv = ''+cell.v; break; | ||||
| 		case 'e': vv = BErr[cell.v]; break; | ||||
| 		case 'd': | ||||
| 			if(opts && opts.cellDates) vv = parseDate(cell.v, -1).toISOString(); | ||||
|  | ||||
| @ -842,6 +842,12 @@ function write_ws_bin_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:num | ||||
| 			if(cell.v == (cell.v | 0) && cell.v > -1000 && cell.v < 1000) { | ||||
| 				if(last_seen) write_record(ba, 0x000D /* BrtShortRk */, write_BrtShortRk(cell, o)); | ||||
| 				else write_record(ba, 0x0002 /* BrtCellRk */, write_BrtCellRk(cell, o)); | ||||
| 			} else if(isNaN(cell.v)) { | ||||
| 				if(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError({t:"e", v: 0x24}, o)); // #NUM!
 | ||||
| 				else write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError({t:"e", v: 0x24}, o)); // #NUM!
 | ||||
| 			} else if(!isFinite(cell.v)) { | ||||
| 				if(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError({t:"e", v: 0x07}, o)); // #DIV/0!
 | ||||
| 				else write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError({t:"e", v: 0x07}, o)); // #DIV/0!
 | ||||
| 			} else { | ||||
| 				if(last_seen) write_record(ba, 0x0010 /* BrtShortReal */, write_BrtShortReal(cell, o)); | ||||
| 				else write_record(ba, 0x0005 /* BrtCellReal */, write_BrtCellReal(cell, o)); | ||||
|  | ||||
| @ -62,6 +62,10 @@ function write_ws_biff2_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:n | ||||
| 			var v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v; | ||||
| 			if((v == (v|0)) && (v >= 0) && (v < 65536)) | ||||
| 				write_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v)); | ||||
| 			else if(isNaN(v)) | ||||
| 				write_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, 0x24, "e")); // #NUM!
 | ||||
| 			else if(!isFinite(v)) | ||||
| 				write_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, 0x07, "e")); // #DIV/0!
 | ||||
| 			else | ||||
| 				write_biff_rec(ba, 0x0003, write_BIFF2NUM(R,C, v)); | ||||
| 			return; | ||||
| @ -182,8 +186,10 @@ function write_ws_biff8_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:n | ||||
| 	else switch(cell.t) { | ||||
| 		case 'd': case 'n': | ||||
| 			var v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v; | ||||
| 			if(isNaN(v)) write_biff_rec(ba, 0x0205 /* BoolErr */, write_BoolErr(R, C, 0x24, os, opts, "e")); // #NUM!
 | ||||
| 			else if(!isFinite(v)) write_biff_rec(ba, 0x0205 /* BoolErr */, write_BoolErr(R, C, 0x07, os, opts, "e")); // #DIV/0!
 | ||||
| 			/* TODO: emit RK as appropriate */ | ||||
| 			write_biff_rec(ba, 0x0203 /* Number */, write_Number(R, C, v, os, opts)); | ||||
| 			else write_biff_rec(ba, 0x0203 /* Number */, write_Number(R, C, v, os, opts)); | ||||
| 			break; | ||||
| 		case 'b': case 'e': | ||||
| 			write_biff_rec(ba, 0x0205 /* BoolErr */, write_BoolErr(R, C, cell.v, os, opts, cell.t)); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user