Es gibt auch die Möglichkeit Zahlen nicht nur vorab zu berechnen, sondern beim Export nach Excel als Excel-Formel zu übergeben.
Um diese Funktion zu aktivieren muss im JRXML die Property mit folgender Zeile eingefügt werden:
Oder über die Report Properties:
JasperReports-Handbuch excel export detect cell type1.png
Danach können in jedem Text Field in der Property expression:
JasperReports-Handbuch excel export detect cell type2.png
folgende Einträge ergänzt werden:
JasperReports-Handbuch excel export detect cell type3.png
Rechts neben net.sf.jasperreports.export.xls.formula wird die Formel für Excel eingetragen, allerdings ohne = am Anfang. Außerdem werden nicht alle Excel-Formeln unterstützt, insbesondere nicht deren deutsche Lokalisierung (z.B. oben SUMME(D119...). Details finden Sie in der POI-Dokumentation. Um zu erfahren wie die Felder lauten, welche berechnet werden sollen, am besten den Bericht einmal ausführen und in Excel anzeigen lassen. Achtung: Wenn der Bericht noch bearbeitet wird, können sich die Felder noch verändern.
Bei net.sf.jasperreports.export.xls.pattern können speziell für Excel Formatangaben gemacht werden. In dem obigen Beispiel "#,##0.00;-#,##0.00" gibt es 2 Nachkommastellen und ein Tausender-Trennzeichen. Wenn z.B. Tausende von Euro angezeigt werden sollen, nimmt man als Pattern #.
Fallstrick: in der von uns getesteten Version (4.1.3) wurde die Property net.sf.jasperreports.export.xls.formula nur dann ausgewertet, wenn das das jew. Textfeld eine korrekte "Text field expression" hat, sie darf also nicht leer sein. Ob das ein Bug ist oder nicht ist uns derzeit unklar.
Beispiel für eine komplexe Summenformel SUM(D7:D20,D28,D33,D40)
Man kann die Formel auch als Expression formulieren, z.b. um eine Division durch 0 zu verhindern. Setzen Sie dazu das Häkchen bei "Use an expression":
JasperReports-Handbuch excelformula expression.png
Das obige Beispiel führt die Formel "D91/D149" nur aus, wenn die Variable $V{Haush_Professoren_1} (die Quelle für die Zelle D149) einen Wert größer 0 hat. Wenn nicht, wird keine Formel reingeschrieben, sondern der Wert 0.
Diese Funktion bietet natürlich noch viel mehr Möglichkeiten, z.B. könnte man damit Excel-Zellennummern dynamisch berechnen etc. Beispiele dazu finden Sie in den JasperReport Demos in demo/samples/xlsformula/reports/XlsFormulaReport.jrxml.