/* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */ /* vim: set ts=2: */ package com.sheetjs; import java.lang.Integer; import java.util.Scanner; import java.io.IOException; import java.io.File; import org.mozilla.javascript.Context; import org.mozilla.javascript.Function; import org.mozilla.javascript.NativeObject; import org.mozilla.javascript.Scriptable; public class SheetJS { public Scriptable scope; public Context cx; public NativeObject nXLSX; public SheetJS() throws Exception { this.cx = Context.enter(); this.scope = this.cx.initStandardObjects(); /* boilerplate */ cx.setOptimizationLevel(-1); String s = "var global = (function(){ return this; }).call(null);"; cx.evaluateString(scope, s, "", 1, null); /* eval library */ s = new Scanner(SheetJS.class.getResourceAsStream("/xlsx.full.min.js")).useDelimiter("\\Z").next(); //s = new Scanner(new File("xlsx.full.min.js")).useDelimiter("\\Z").next(); cx.evaluateString(scope, s, "", 1, null); /* grab XLSX variable */ Object XLSX = scope.get("XLSX", scope); if(XLSX == Scriptable.NOT_FOUND) throw new Exception("XLSX not found"); this.nXLSX = (NativeObject)XLSX; } public SheetJSFile read_file(String filename) throws IOException, ObjectNotFoundException { /* open file */ String d = JSHelper.read_file(filename); /* options argument */ NativeObject q = (NativeObject)this.cx.evaluateString(this.scope, "q = {'type':'binary', 'WTF':1};", "", 2, null); /* set up function arguments */ Object args[] = {d, q}; /* call read -> wb workbook */ Function readfunc = (Function)JSHelper.get_object("XLSX.read",this.scope); NativeObject wb = (NativeObject)readfunc.call(this.cx, this.scope, this.nXLSX, args); return new SheetJSFile(wb, this); } public static void close() { JSHelper.close(); } }