Neulich wurde ich mit dem Problem konfrontiert, mehrere vorhandene RTF-Templates, die als Excel-Dateien ausgegeben werden, in einer einzigen Excel-Datei zur Verfügung zu stellen. Jeder zu Beginn einzelne Bericht sollte letztendlich auf einem eigenen Blatt eingefügt werden.  Die Abbildung zeigt dies beispielhaft.

Mit einem Excel-Template ist dies kein Problem, allerdings müssten alle vorhandenen RTF-Templates übertragen werden. Weiterhin kann es nur als XLS, CSV oder XML ausgegeben werden. Andere Ausgabeformate wie PDF oder HTML wären nicht verfügbar, sind aber früher oder später ebenfalls gewünscht. 

Erste Überlegungen gingen dahin, die einzelnen Berichte mit einem Makro zusammenzuführen. Aber das muss doch auch einfacher gehen…  

Ein Kollege verwies mich dann auf den BI Publisher Guide, der einen viel einfacheren Weg beschreibt: Der BI Publisher erzeugt mit jedem Seitenoder Abschnittsumbruch bei Ausgabe einer Excel-Datei ein neues Arbeitsblatt. Eine Anpassung der bestehenden Templates ist in zwei Schritten erreichbar. 

 Schritt 1: Anpassung des Datenmodells 

Der Bericht soll nur ein Template verwenden, daher müssen alle Daten in einer XML-Datei zur Verfügung stehen. Sollten die Berichtselemente ihre Daten aus dem gleichen Datenmodell beziehen, ist dieser erste Schritt nicht nötig. Falls mehrere Datenmodelle verwendet wurden, kann das Datenmodell so aufgebaut werden, dass die Daten der einzelnen Berichte in Gruppen zusammengefasst werden. Wenn einzelne Felder in mehreren Berichten verwendet werden, können durch ein komplexeres Datenmodell doppelte Daten im XML vermieden werden 

Ein einfaches Datenmodell könnte zum Beispiel die untenstehende XML-Datei erzeugen: 

<DATA_DS> 
    <G_1> … Daten Abfrage 1 … </G1> 
    <G_2> … Daten Abfrage 2 … </G2> 
    <G_3> … Daten Abfrage 3 … </G3> 
</DATA_DS> 

Schritt 2: Anpassung des Template 

Mit der XML-Datei des neuen Datenmodells kann der Bericht wie gewohnt im BI Publisher Desktop Template Builder generiert werden. Die Inhalte der schon vorhanden Templates, können untereinander in das neue Dokument kopiert werden. Wenn das Datenmodell geändert wurde, müssen nach dem Zusammenfügen der einzelnen Templates noch Gruppen- und Feldnamen angepasst werden.  

Nach jeder Tabelle wird ein Seiten- oder Abschnittsumbruch eingefügt. Das Ribbon zum Einfügen eines Seiten- oder Abschnittsumbruchs findet sich unter Layout → Umbrüche (Abbildung 2).

Optional kann ein Seitenumbruch im Ribbon Einfügen → Seitenumbruch (Abbildung 3) oder über Strg + Return erstellt werden. 

Ob ein Seitenumbruch oder ein Abschnittsumbruch eingefügt wird, spielt für die Ausgabe als Excel-Datei keine Rolle. Wenn der Bericht auch in anderen Formaten, z.B. RTF oder PDF, bereitgestellt wird, muss folgendes beachtet werden:  

  • Wird ein Seitenumbruch eingefügt, wird nach dem Umbruch eine neue Seite eingefügt und nachfolgende Daten auf dieser dargestellt. 
  • Wird ein Abschnittsumbruch eingefügt, werden nachfolgende Daten auf der gleichen Seite in einem neuen Abschnitt dargestellt 

Das Einfügen von Seiten- oder Abschnittsumbrüchen kann Auswirkungen das Verhalten von Seitenzahlen und Kopf- / Fußzeilen haben. Da es in diesem Beitrag aber schwerpunktmäßig um Excel geht, werde ich das nicht vertiefen.  

Es muss beachtet werden, dass ein Verschieben der Tabellen auf einzelne Seiten des Dokumentes mit Zeilenumbruch nicht funktioniert. Dadurch ist es möglich ein Layout für einen Bericht über mehrere Seiten im Word-Dokument zu generieren. Erst wenn im Dokument ein Seiten– oder Abschnittsumbruch eingefügt wird, erzeugt dieser in der Excel-Ausgabe ein neues Arbeitsblatt.  

Damit die Arbeitsblätter im Excel einen sprechenden Namen erhalten, kann vor dem Umbruch noch der Tag <?spreadsheet-sheet-name: xpath-expression?> eingefügt werden.

Mit dem Tag <?spreadsheet-sheet-name: xpath-expression?> kann für jedes Arbeitsblatt ein Titel erstellt werden. Ob er am Anfang oder Ende einer Seite oder eines Abschnitts steht ist nicht relevant.  Wenn der Bericht in einem anderen Format ausgegeben wird, wird dieser Tag nicht ausgewertet und erzeugt keinen unerwünschten Text. 

Abbildung 4 zeigt wie das Template am Ende aussehen könnte. 

Fazit

Nach diesen 2 Schritten kann nun das Template im BI Publisher hochgeladen werden. Die Ausgabe im Excel sieht dann so aus: 

Eine PDF-Ausgabe würde so aussehen: 

Bei der Template-Gestaltung konnte ich keine Einschränkungen feststellen. Allerdings kann es zu Problemen während der Berichterstellung im BI Publisher kommen, wenn sehr umfangreiche Abfragen in einem Datenmodell zusammengefasst werden. Die XML-Datei kann dann das Größenlimit überschreiten. Es kommt zu einer „XMLSizeLimitException“. Näheres dazu wird hier beschrieben.