4

有哪些工具可用于将 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

手机名称

        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

4 回答 4

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

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

于 2010-01-11T17:41:54.353 回答
2

另一种选择是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")));
    }
}

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


于 2010-02-02T09:30:53.270 回答
1

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

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

于 2010-01-11T17:45:28.217 回答
1

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

于 2010-01-28T04:21:50.433 回答