[FOSSGIS-Talk] Fwd: Expertise bei Erstellung von JasperReport-Template für Export in Excel gesucht

Daniel Cebulla daniel.cebulla at jena.de
Mo Sep 7 14:11:15 CEST 2026


Hallo Thomas, hallo Liste (vielleicht profitiert noch jemand anderes davon),

vielen Dank noch einmal für die ausführlichen Tipps! Nach dem ich das 
Ganze längere Zeit habe liegen lassen, habe ich es nun schlussendlich 
(etwas anders) hinbekommen.
Ich habe mich dann dazu entschieden, den Subreport nicht in ein eigenes 
Tabellenblatt auszugeben, sondern die Spalten des Subreports rechts an 
die Spalten des Subreports im gleichen Tabellenblatt anzufügen.
Hintergrund der Trennung ist der, dass auf dem Subreport eine 
Autorisierung greift, womit dann dessen Daten nur bei bestimmter 
Berechtigung ausgegeben werden.

Für die bessere Formatierung der Excel habe ich zum einen folgende 
Properties-Parameter gesetzt:

<property name="net.sf.jasperreports.print.keep.full.text" value="true"/>
<property 
name="net.sf.jasperreports.export.xls.remove.empty.space.between.rows" 
value="true"/>
<property 
name="net.sf.jasperreports.export.xls.remove.empty.space.between.columns" 
value="true"/>
<property name="net.sf.jasperreports.export.xls.white.page.background" 
value="false"/>
<property name="net.sf.jasperreports.export.xls.detect.cell.type" 
value="true"/>
<property name="net.sf.jasperreports.export.xls.freeze.row" value="2"/>
<property name="net.sf.jasperreports.export.xls.wrap.text" value="false"/>
<property name="net.sf.jasperreports.export.xls.collapse.row.span" 
value="true"/>
<property name="net.sf.jasperreports.export.xls.sheet.names.1" 
value="Mein Bericht"/>

Der Bericht folgt nun folgendem Aufbau:

Column Header | Static Text Elemente mit Labels der Spalten des 
Hauptreports             | Subreport mit übergebenem Parameter FID = 
"HEADER", gleiche Breite wie Breite des Subreport-Templates
Detail Band   | Text Field Elemente mit $F{} Verweisen auf die Felder 
des SQL-Statements | Subreport mit übergebenem Parameter FID = $F{fid}, 
gleiche Breite wie Breite des Subreport-Templates

Der Subreport ist also zwei mal eingebunden, einmal im Column Header und 
ein mal im Detail Band.

Der Subreport hat dann analog zum Hautreport eine eigene Konfiguration, 
hier sind die Spalten-Köpfe dann aber im "Title" Band, nicht "Column 
Header", die Attribut-Felder im Detail Band.

Das SQL-Statement des Subreports sieht dann aus:
SELECT fid, feld1, feld2, feld3
FROM reports.my_subreport
WHERE fid = $P{FID}
AND $P{FID} != 'HEADER'
UNION ALL
SELECT NULL, NULL, NULL, NULL
FROM reports.my_subreport
WHERE $P{FID} = 'HEADER'

Außerdem hat das Detail Band im Subreport eine "Print When Expression":
!$P{FLSNR}.equals("HEADER")

Damit habe ich es letztendlich hinbekommen, die Daten Daten von Main- 
und Subreport zusammen in eine Tabelle zu schreiben.
Hat der Nutzer keine Berechtigung auf den Subreport, bekommt er nur die 
Spalten des Mainreports ausgespielt.

Liebe Grüße
Daniel

-- 
im Auftrag
Daniel Cebulla
Anwendungsbetreuer GIS

Telefon: 03641 49-5190      E-Mail:daniel.cebulla at jena.de

Kommunale Informationstechnik und Telekommunikation Jena (KITT)

Optimierter Regiebetrieb    Regiebetriebsleiter: Dr. Arndt Döhler
der Stadt Jena              Steinweg 10, 07743 Jena

kitt at jena.de                USt.-ID DE150546569
rechnungen-kitt at jena.de


Am 23.04.26 um 11:46 schrieb Thomas Wölk:
> ---------- Forwarded message ---------
> From: *Thomas Wölk* <thomas.woelk at gmail.com>
> Date: Wed, Apr 22, 2026 at 1:07 PM
> Subject: Re: [FOSSGIS-Talk] Expertise bei Erstellung von 
> JasperReport-Template für Export in Excel gesucht
> To: Fossgis-talk-liste <FOSSGIS-Talk-Liste at fossgis.de>
>
>
> Die Standardtipps aus den Foren scheitern meistens daran, dass der 
> klassische |JRXlsExporter |pixelbasiert arbeitet und Subreport-Inhalte 
> unabhängig von der Band-Struktur in Zellen presst.
>
>  1. Welche JasperReports-Version setzt du ein? (Ab 6.x gibt es den
>     |JRXlsxMetadataExporter|, der für tabellarische Exports deutlich
>     besser geeignet ist als der normale XLSX-Exporter.)
>  2. Exportierst du über |JRXlsExporter|, |JRXlsxExporter| oder den
>     Metadata-Exporter? Das macht bei Sheet-Breaks einen echten
>     Unterschied.
>  3. In welchem Band liegt dein Subreport aktuell – Detail, Summary
>     oder eigenes Group-Band?
>
> Der Ansatz, der bei mir am zuverlässigsten war, sieht grob so aus:
>
> *Exporter:* |JRXlsxMetadataExporter| statt des normalen 
> XLSX-Exporters. Der schreibt keine Pixel-Raster, sondern echte 
> Tabellen mit einer Zeile pro Datensatz und einer Spalte pro Feld. 
> Genau das, was du für Excel willst.
>
> *Sheet-Break zwischen Main- und Subreport:* Nicht über 
> |one.page.per.sheet| lösen (das führt bei mehrseitigen Main-Reports 
> sofort zu zerbrochenen Sheets), sondern gezielt per Element-Property 
> auf dem Subreport-Element:
>
> |<property name="net.sf.jasperreports.export.xls.break.before.row" 
> value="true"/> |
>
> Und den Sheet-Namen ebenfalls per Property steuern, z.B. in der 
> Report-Properties-Section oder direkt auf dem Subreport-Element:
>
> |<property name="net.sf.jasperreports.export.xls.sheet.names.all" 
> value="Hauptdaten/Details"/> |
>
> Der Slash trennt die Sheet-Namen in der Reihenfolge ihres Auftretens.
>
> *Tabellenkopf:* Im Column Header oder - für den Metadata-Exporter 
> meist sauberer – über Column Names per Property pro Feld:
>
> |<property 
> name="net.sf.jasperreports.export.xlsx.column.name.Kundennummer" 
> value="Kundennummer"/> |
>
> *Datenfluss:* Main- und Subreport bekommen über Parameter 
> (|SUBREPORT_PARAMETERS_MAP| oder einzelne Parameter) dieselben 
> Filter-Werte, führen aber eigenständige SQL-Queries aus. Das ist 
> unproblematisch, solange der Subreport als |.jasper| kompiliert und 
> korrekt referenziert wird.
>
> *Typische Fallstricke, an denen die Foren-Lösungen oft scheitern:*
>
>   * Elemente im Main-Report überlappen pixelmäßig mit dem
>     Subreport-Bereich – dann mergt Jasper Zellen kreuz und quer. Fix:
>     alle Elemente in exakt gleicher X-Position und Breite,
>     |isRemoveLineWhenBlank| setzen.
>   * |one.page.per.sheet=true| in Kombination mit mehrseitigem
>     Main-Report bricht den Main-Report auf viele Sheets auf.
>     Stattdessen |remove.empty.space.between.rows=true| und gezielte
>     Break-Properties.
>   * |JRXlsxMetadataExporter| ignoriert Band-Layouts – was hier
>     Feature, nicht Bug ist, aber überrascht, wenn man gestalterische
>     Elemente erwartet.
>
> Wenn du mir sagst, mit welcher Version und welchem Exporter du 
> arbeitest und wie deine bisherige |.jrxml|-Struktur ungefähr aussieht 
> (Band-Zuordnung von Main-Tabelle und Subreport), baue ich dir ein 
> minimales lauffähiges Template-Gerüst, das beide Sheets sauber erzeugt 
> - ohne Gewähr.
>
> -- 
> Mit freundlichen Grüßen
> Thomas Wölk
>
>
> Am 22.04.2026, 11:31:09 schrieb Daniel Cebulla via FOSSGIS-Talk-Liste 
> <fossgis-talk-liste at fossgis.de>:
>> Hallo liebe FOSSGIS-Community,
>>
>> gibt es jemanden in der Runde, der sich gut mit der Erstellung von
>> JasperReport-Templates auskennt?
>>
>> Ich möchte ein Template erstellen, welches für den Export in Excel
>> gedacht ist. Das Template soll einen Subreport enthalten, dessen Inhalt
>> in der Excel-Datei in ein eigenes Tabellenblatt geschrieben werden soll.
>> Beide Tabellen sollen jeweils einen Tabellenkopf und entsprechende
>> Zeilen für die Daten bekommen (wie halt eine Tabelle aufgebaut ist).
>> Die Daten kommen aus einer Postgresql-Datenbank. Haupt- und Subreport
>> bekommen die gleichen Features als Input, haben jedoch eigene SELECTs
>> auf die Datenbank.
>>
>> In diversen Foren und Beiträgen finden sich verschiedene Lösungen (one
>> page per sheet, extra Elemente mit sheet break points, ...), jedoch
>> waren keine davon bisher bei mir zielführend ...
>>
>> Evtl. hatte das schon mal jemand als Use Case und kann mir weiterhelfen,
>> dann gerne melden, vielen Dank!
>>
>> Liebe Grüße
>> Daniel
>>
>> -- 
>> im Auftrag
>> Daniel Cebulla
>> Anwendungsbetreuer GIS
>>
>> Telefon: 03641 49-5190      E-Mail: daniel.cebulla at jena.de
>>
>> Kommunale Informationstechnik und Telekommunikation Jena (KITT)
>>
>> Optimierter Regiebetrieb    Regiebetriebsleiter: Dr. Arndt Döhler
>> der Stadt Jena              Paradiesstr. 6, 07743 Jena
>>
>> kitt at jena.de                USt.-ID DE150546569
>> rechnungen-kitt at jena.de
>>
>> -- 
>> ....................................................................
>> FOSSGIS-Konferenz 2027 mit OpenStreetMap-Event in Heidelberg!
>> 09.-13. März 2027 https://www.fossgis-konferenz.de/
>>
>> FOSSGIS Vereinstermine:
>> https://fossgis.de/aktivit%C3%A4ten/termine/
>>
>> FOSSGIS e.V, der Verein zur Förderung von Freier Software aus dem
>> GIS-Bereich und Freier Geodaten!
>> https://www.fossgis.de/ https://mastodon.online/@FOSSGISeV
>> ____________________________________________________________________
>> FOSSGIS-Talk-Liste mailing list
>> FOSSGIS-Talk-Liste at fossgis.de
>> https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste


Mehr Informationen über die Mailingliste FOSSGIS-Talk-Liste