将电子表格公式转换为java

时间:2010-01-11 17:36:06

标签: java excel spreadsheet

有哪些工具可以将OpenOffice或Excel电子表格(及其所有公式)转换为可在运行时调用的Java对象?

显然,这只是一个计算引擎,只是数字和文本,而不是时间或API调用。

即使命名单元格范围被用于(有效地)命名变量,输出代码也可能难以理解。它需要重构才能获得更像普通的Java代码。但是我认为这对于原型化一些数据处理类型的作业很有用。或嵌入由高级Excel用户维护的一些计算引擎。

修改:一个简单的例子:

外观

        A               B               C               D
1       Mortgage Value  100,000.00
2       Interest rate   4.5%
3       Type            Interest-only
4       Years           3
5       Regular payment 4,500.00
6       Total interest  13,500.00

CELL NAMES

        A               B               C               D
1       Mortgage Value  VALUE
2       Interest rate   INTEREST
3       Type            TYPE
4       Years           YEARS
5       Regular payment REGPYMT
6       Total interest  TOTALPYMT

公式

        A               B               C               D
1       Mortgage Value  100,000.00
2       Interest rate   4.5%
3       Type            Interest-only
4       Years           3
5       Regular payment =VALUE*INTEREST
6       Total interest  =YEARS*REGPYMT

将转换为Java,如:

package example.calcengine;
import java.math.*;
public class MyCalcEngine {

    // unnamed cells
    public String A1 = "Mortgage Value";
    public String A2 = "Interest rate";
    public String A3 = "Type";
    public String A4 = "Years";
    public String A5 = "Regular payment";
    public String A6 = "Total interest";

    // named cells
    public BigDecimal VALUE = new BigDecimal(100000.00);
    public BigDecimal INTEREST = new BigDecimal(0.045);
    public String TYPE = "Interest-only";
    public BigDecimal YEARS = new BigDecimal(3);
    public BigDecimal REGPYMT = new BigDecimal(0);
    public BigDecimal TOTALPYMT = new BigDecimal(0);

    // formulas
    public void calculate() {
      REGPYMT = VALUE.multiply(INTEREST);
      TOTALPYMT = REGPYMT.multiply(YEARS);
    }
}

我假设单元格的固定类型 - java.math.BigDecimal或String。

4 个答案:

答案 0 :(得分:4)

  • Apache POI项目提供的Java代码可以读取(主要是)Excel电子表格。

  • 另一个项目Jacob为任意Windows程序的COM自动化提供了Java接口,当然包括Excel。您实际上是从外部使用Excel中的Excel API。

答案 1 :(得分:1)

JExcelApi允许您加载.xls文件并读取/写入单元格。

http://www.andykhan.com/jexcelapi/

答案 2 :(得分:1)

我们与SmartXLS for java做了类似的项目。 它有一个运行时计算引擎和支持加载项公式。源工作簿转换为java类,可以嵌入到java程序中,并使用参数调用,就像在Excel中输入一样。

答案 3 :(得分:1)

另一个选项是Expr4J。它实现了一个与Excel兼容的通用表达式语言解析器,并具有用于计算表达式图的依赖引擎。它还实现了Excel内置函数的巨大优势。

从网站上可以看出一个例子:

public class DependencyExample
{
    public static void main(String[] args) throws Exception {
        DependencyEngine e = new DependencyEngine(new BasicEngineProvider());
        e.set("B1", "=A1*2");
        e.set("A1", "=12*2");
        e.set("C1", "=B1*A1");
        System.out.println(e.getValue(Range.valueOf("B1")));
        System.out.println(e.getValue(Range.valueOf("C1")));
        e.set("A1", "2");
        System.out.println(e.getValue(Range.valueOf("B1")));
        System.out.println(e.getValue(Range.valueOf("C1")));
    }
}

(我在项目上工作,显然对任何反馈感兴趣)