converter fórmulas de planilha para java

Quais ferramentas estão disponíveis para converter uma planilha do OpenOffice ou do Excel (com todas as suas fórmulas) em um objeto Java que pode ser chamado em tempo de execução?

Obviamente, isso só criaria um mecanismo de cálculo e seria apenas sobre números e texto, e não sobre tempo ou chamadas de API.

Mesmo com intervalos de célula nomeados sendo usados ​​para (efetivamente) nomear variáveis, o código de saída presumivelmente seria difícil de entender. Ele precisaria de refatoração para ficar mais parecido com o código Java normal. No entanto, acho que seria útil para prototipar alguns trabalhos do tipo processamento de dados. Ou para incorporar alguns mecanismos de cálculo mantidos por um usuário avançado do Excel.

Editar : Um exemplo trivial:

APARÊNCIA

        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

NOMES DE CÉLULA

        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

FORMULAS

        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

se traduziria em Java como algo como:

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);
    }
}

Eu presumo fixo tipo de células - um java.math.BigDecimal ou um String.

questionAnswers(4)

yourAnswerToTheQuestion