convert spreadsheet-Formeln in java
Was sind Werkzeuge zur Konvertierung einer OpenOffice-oder Excel-Tabelle (mit allen Formeln) in ein Java-Objekt aufgerufen werden können, die zur Laufzeit?
Natürlich würde dies nur eine Berechnungs-engine und nur um zahlen und text, keine timing-oder API-Aufrufe.
Sogar mit benannten Zellbereichen verwendet wird, um (effektiv) name der Variablen der output-code würde vermutlich schwierig sein, zu verstehen. Es müssten die Umgestaltung zu bekommen, mehr wie normale Java-code. Aber ich denke, es wäre nützlich für das prototyping einige Daten, die Art der Verarbeitung von jobs. Oder für die Einbettung einige berechnungsmodule gepflegt durch eine fortgeschrittene Excel-Benutzer.
Bearbeiten : Ein triviales Beispiel:
AUSSEHEN
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
ZELLE NAMEN
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
FORMELN
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
übersetzen würde in Java so etwas wie:
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);
}
}
Ich würde davon ausgehen, fixed type für Zellen, die entweder eine java.math.BigDecimal oder ein String sein.
Benennung der Zellen ist ein standard-feature in Excel. Ich habe BigDecimal im Beispiel zu reduzieren, Probleme mit der Rundung (esp Währung calcs).
Offensichtlich ist die oben genannten code-Generierung Beispiel hat den grundsätzlichen Nachteil, dass es nicht darstellen, das Blatt mit einem 2D-array im Java-Klasse. Es würde tun müssen (und verstecken benannte Zelle hinter sich greifen Getter und setter) zur Unterstützung von Summen, Spiele, Suchvorgänge oder irgendetwas verweisen auf Zellbereiche.
InformationsquelleAutor martinr | 2010-01-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Apache-POI-Projekt stellt Java-code Lesen können (meist) Excel-Tabellen.
Einem anderen Projekt, Jakob, bietet eine Java-Schnittstelle für die COM-Automatisierung beliebiger Windows-Programme, einschließlich Excel. Sie sind im wesentlichen arbeiten die Excel API von außen, in Java.
InformationsquelleAutor Carl Smotricz
JExcelApi können Sie laden .xls-Datei, und Lesen/schreiben auf die Zellen.
http://www.andykhan.com/jexcelapi/
InformationsquelleAutor torbjoernwh
Hatten wir ein ähnliches Projekt mit SmartXLS für java.
Es hatte eine Laufzeit-Berechnung-engine und die Unterstützung von add-in Formeln.Der Quell-Arbeitsmappe konvertiert, um eine java-Klasse, die eingebettet werden können, in java Programm und ruft mit dem Parameter einfach wie die Eingabe in Excel.
InformationsquelleAutor liya
Eine weitere option ist Expr4J. Es implementiert eine Allzweck-Ausdruck-Sprache-parser, der ist kompatibel mit Excel und hat eine Abhängigkeit engine für die Berechnung der Ausdruck von Grafiken. Es implementiert auch die überwiegende majorit der in Excel integrierten Funktionen.
Aus der website, ein Beispiel ist:
(Ich arbeite an dem Projekt, so wäre natürlich daran interessiert, feedback)
InformationsquelleAutor Peter Smith