forked from sheetjs/sheetjs
59 lines
1.8 KiB
Java
59 lines
1.8 KiB
Java
|
/* 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, "<cmd>", 1, null);
|
||
|
|
||
|
/* eval library */
|
||
|
s = new Scanner(SheetJS.class.getResourceAsStream("/dist/xlsx.full.min.js")).useDelimiter("\\Z").next();
|
||
|
//s = new Scanner(new File("xlsx.full.min.js")).useDelimiter("\\Z").next();
|
||
|
cx.evaluateString(scope, s, "<cmd>", 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'};", "<cmd>", 2, null);
|
||
|
|
||
|
/* set up function arguments */
|
||
|
Object functionArgs[] = {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, functionArgs);
|
||
|
|
||
|
return new SheetJSFile(wb, this);
|
||
|
}
|
||
|
|
||
|
public static void close() { JSHelper.close(); }
|
||
|
}
|
||
|
|