forked from sheetjs/docs.sheetjs.com
		
	
		
			
	
	
		
			37 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			37 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								from sys import stderr, argv;
							 | 
						||
| 
								 | 
							
								from base64 import b64encode, b64decode;
							 | 
						||
| 
								 | 
							
								from STPyV8 import JSContext, JSClass;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Create context with methods for file i/o
							 | 
						||
| 
								 | 
							
								class Base64Context(JSClass):
							 | 
						||
| 
								 | 
							
								  def read_file(self, path):
							 | 
						||
| 
								 | 
							
								    with open(path, "rb") as f:
							 | 
						||
| 
								 | 
							
								      data = f.read();
							 | 
						||
| 
								 | 
							
								    return b64encode(data).decode("ascii");
							 | 
						||
| 
								 | 
							
								  def write_file(self, data, path):
							 | 
						||
| 
								 | 
							
								    with open(path, "wb") as f:
							 | 
						||
| 
								 | 
							
								      f.write(b64decode(data));
							 | 
						||
| 
								 | 
							
								globals = Base64Context();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Read xlsx.full.min.js
							 | 
						||
| 
								 | 
							
								with open("xlsx.full.min.js", "r") as f:
							 | 
						||
| 
								 | 
							
								  sheetjs = f.read();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# The JSContext starts and cleans up the V8 engine
							 | 
						||
| 
								 | 
							
								with JSContext(globals) as ctxt:
							 | 
						||
| 
								 | 
							
								  # Load SheetJS library and display version number
							 | 
						||
| 
								 | 
							
								  ctxt.eval(sheetjs);
							 | 
						||
| 
								 | 
							
								  version = ctxt.eval("XLSX.version");
							 | 
						||
| 
								 | 
							
								  print(f"SheetJS Version: {version}", file=stderr);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  # Parse workbook
							 | 
						||
| 
								 | 
							
								  ctxt.eval(f"globalThis.wb = XLSX.read(read_file('{argv[1]}'), {{type:'base64'}}); void 0;");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  # Print CSV from first worksheet
							 | 
						||
| 
								 | 
							
								  csv = ctxt.eval("XLSX.utils.sheet_to_csv(wb.Sheets[wb.SheetNames[0]]);");
							 | 
						||
| 
								 | 
							
								  print(csv);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  # Generate XLSB
							 | 
						||
| 
								 | 
							
								  xlsb = ctxt.eval("XLSX.write(wb, {type: 'base64', bookType: 'xlsb'})");
							 | 
						||
| 
								 | 
							
								  globals.write_file(xlsb,"SheetJSSTPyV8.xlsb");
							 |