forked from sheetjs/sheetjs
		
	
		
			
	
	
		
			33 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			33 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								import {utils, stream, set_cptable} from '../../xlsx.mjs';
							 | 
						||
| 
								 | 
							
								import * as cpexcel from '../../dist/cpexcel.full.mjs';
							 | 
						||
| 
								 | 
							
								set_cptable(cpexcel);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function NodeReadableCB(cb:(d:any)=>void) {
							 | 
						||
| 
								 | 
							
									var rd = {
							 | 
						||
| 
								 | 
							
										__done: false,
							 | 
						||
| 
								 | 
							
										_read: function() {},
							 | 
						||
| 
								 | 
							
										push: function(d: any) { if(!this.__done) cb(d); if(d == null) this.__done = true; },
							 | 
						||
| 
								 | 
							
										resume: function pump() {for(var i = 0; i < 10000 && !this.__done; ++i) rd._read(); if(!rd.__done) setTimeout(pump, 0); }
							 | 
						||
| 
								 | 
							
									};
							 | 
						||
| 
								 | 
							
									return rd;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function NodeReadable(rd: any) { return function() { return rd; }; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const L = 1_000_000;
							 | 
						||
| 
								 | 
							
								const W = 30;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								console.time("prep");
							 | 
						||
| 
								 | 
							
								const ws = utils.aoa_to_sheet([Array.from({length: W}, (_, C) => utils.encode_col(C))], {dense: true});
							 | 
						||
| 
								 | 
							
								for(let l = 1; l < L; ++l) utils.sheet_add_aoa(ws, [Array.from({length: W}, (_,j) => j == 0 ? String(l) : l+j)], {origin: -1});
							 | 
						||
| 
								 | 
							
								console.timeEnd("prep");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								console.time("stream");
							 | 
						||
| 
								 | 
							
								var cnt = 0;
							 | 
						||
| 
								 | 
							
								const rt = NodeReadableCB((d: any) => {
							 | 
						||
| 
								 | 
							
									++cnt; if((cnt%10000) == 0) console.log(cnt); if(d == null) console.timeEnd("stream");
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								stream.set_readable(NodeReadable(rt));
							 | 
						||
| 
								 | 
							
								const rd = stream.to_csv(ws);
							 | 
						||
| 
								 | 
							
								rd.resume();
							 |