forked from sheetjs/docs.sheetjs.com
		
	
		
			
	
	
		
			33 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
		
		
			
		
	
	
			33 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| 
								 | 
							
								# usage: perl SheetJSDuk.pl path/to/file
							 | 
						||
| 
								 | 
							
								use JavaScript::Duktape::XS;
							 | 
						||
| 
								 | 
							
								use File::Slurp;
							 | 
						||
| 
								 | 
							
								use MIME::Base64 qw( encode_base64 decode_base64 );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Initialize
							 | 
						||
| 
								 | 
							
								my $js = JavaScript::Duktape::XS->new({ max_memory_bytes => 256 * 1024 * 1024 });
							 | 
						||
| 
								 | 
							
								$js->eval("var global = (function(){ return this; }).call(null);");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Load the ExtendScript build
							 | 
						||
| 
								 | 
							
								my $src = read_file('xlsx.extendscript.js', { binmode => ':raw' });
							 | 
						||
| 
								 | 
							
								$src =~ s/^\xEF\xBB\xBF//;
							 | 
						||
| 
								 | 
							
								my $XLSX = $js->eval($src);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Print version number
							 | 
						||
| 
								 | 
							
								$js->set('log' => sub { print $_[0], "\n"; });
							 | 
						||
| 
								 | 
							
								$js->eval("log('SheetJS library version ' + XLSX.version);");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Parse File
							 | 
						||
| 
								 | 
							
								my $raw_data = encode_base64(read_file($ARGV[0], { binmode => ':raw' }), "");
							 | 
						||
| 
								 | 
							
								$js->set("b64", $raw_data);
							 | 
						||
| 
								 | 
							
								$js->eval(qq{
							 | 
						||
| 
								 | 
							
								  global.wb = XLSX.read(b64, {type: "base64", WTF:1});
							 | 
						||
| 
								 | 
							
								  global.ws = wb.Sheets[wb.SheetNames[0]];
							 | 
						||
| 
								 | 
							
								  void 0;
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Print first worksheet CSV
							 | 
						||
| 
								 | 
							
								$js->eval('log(XLSX.utils.sheet_to_csv(global.ws))');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Write XLSB file
							 | 
						||
| 
								 | 
							
								my $xlsb = $js->eval("XLSX.write(global.wb, {type:'base64', bookType:'xlsb'})");
							 | 
						||
| 
								 | 
							
								write_file("SheetJSDuk.xlsb", decode_base64($xlsb));
							 |