代码之家  ›  专栏  ›  技术社区  ›  martinr

将电子表格公式转换为java

  •  4
  • martinr  · 技术社区  · 16 年前

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

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

    :一个微不足道的例子:

    外表

            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或字符串。

    4 回复  |  直到 16 年前
        1
  •  4
  •   Carl Smotricz    16 年前
    • ApachePOI项目提供了可以读取(大部分)Excel电子表格的Java代码。

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

        2
  •  2
  •   Peter Smith    16 年前

    还有一个选择是 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")));
        }
    }
    

    (我从事该项目,因此显然对任何反馈都感兴趣)


        3
  •  1
  •   torbjoernwh    16 年前

    JExcelApi允许加载.xls文件并对单元格进行读/写操作。

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

        4
  •  1
  •   liya    16 年前