import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Scanner; public class SheetJSNashorn { public static void main(String[] args) throws Exception { /* initialize */ ScriptEngine engine = (new ScriptEngineManager()).getEngineByName("javascript"); /* read script file */ engine.eval("var global = (function(){ return this; }).call(null);"); engine.eval(new Scanner(SheetJSNashorn.class.getResourceAsStream("/shim.min.js")).useDelimiter("\\Z").next()); engine.eval(new Scanner(SheetJSNashorn.class.getResourceAsStream("/xlsx.full.min.js")).useDelimiter("\\Z").next()); engine.eval("print('SheetJS Version ' + XLSX.version);"); /* read spreadsheet bytes */ engine.put("bytes", Files.readAllBytes(Paths.get(args[0]))); /* convert signed byte array to JS Uint8Array or unsigned byte array */ engine.eval("function b2a(b) {" + "var out = typeof Uint8Array == 'function' ? new Uint8Array(b.length) : new Array(b.length);" + "for(var i = 0; i < out.length; i++) out[i] = (b[i] + 256) & 0xFF;" + "return out;" + "}" + "var u8a = b2a(bytes)"); /* parse workbook */ engine.eval("var wb = XLSX.read(u8a, {type: 'array'})"); /* get first worksheet as CSV */ engine.eval("var ws = wb.Sheets[wb.SheetNames[0]];"); Object res = engine.eval("XLSX.utils.sheet_to_csv(ws)"); System.out.println(res); } }