konwertuj formuły arkusza kalkulacyjnego na java
Jakie narzędzia są dostępne do konwersji arkusza kalkulacyjnego OpenOffice lub Excel (ze wszystkimi jego formułami) na obiekt Java, który można wywołać w czasie wykonywania?
Oczywiście będzie to tylko silnik obliczeniowy i będzie dotyczył tylko liczb i tekstu, a nie wywołań czasowych i API.
Nawet przy nazwanych zakresach komórek używanych do (efektywnego) nazywania zmiennych kod wyjściowy byłby prawdopodobnie trudny do zrozumienia. Wymagałoby to refaktoryzacji, aby uzyskać bardziej normalny kod Java. Myślę jednak, że byłoby to przydatne do prototypowania niektórych zadań przetwarzania danych. Lub do osadzania niektórych silników obliczeniowych obsługiwanych przez zaawansowanego użytkownika Excel.
Edytować : Trywialny przykład:
WYGLĄD
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
NAZWY KOMÓREK
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
FORMUŁY
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
przetłumaczyłoby na Javę jako coś w stylu:
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);
}
}
Zakładam stały typ dla komórek - albo java.math.BigDecimal lub String.