Benannte Tabellenblätter in Excel - Wie geht das?

In einem meiner letzten Artikel habe ich gezeigt, wie wir einen Bericht mit einer Dokumentenstruktur versehen können und diese dann auch im Excel zur Navigation verwenden können. Doch für Excel Exporte sollte man noch eine zweite Einstellung vornehmen um benannte Tabellenblätter zu erhalten.

Ausgangslage

Auch wenn die Excel-Mappe (aus dem anderen Artikel), über die Dokumentenstruktur schön übersichtlich gestaltet ist, hat sie doch einige Tabellenblätter mit nichtssagenden Namen erhalten.

Unser Ziel ist es aber, dass die Namen der Tabellenblätter ungefähr die Dokumentenstrukur widerspiegeln, die wir bereits implementiert haben.

Das erste Tabellenblatt wird automatisch mit einem für uns sinnvollen Namen benannt ("Dokumentenstruktur"), die anderen Blätter hingegen, werden einfach durchnummeriert. Das wollen wir jetzt mal ändern

Welche Möglichkeiten haben wir?

Es gibt diverse Stellen, wo man tätig werden kann, hier zeige ich ein paar davon. Die erste Möglichkeit ist sicherlich nicht das Optimum, aber bietet schon mal einen guten Einstieg um zu verstehen, wie es funktioniert.

InitialPageName

Verschiedene Teile eines Reports haben in ihren Eigenschaften (Properties) im Bereich "Allgemein" die Möglichkeit eine PageName zu hinterlegen. Auf Basis des gesamten Berichtes ist diese Eigenschaft aber unter "Sonstige" zu finden und es ist hier sogar ein InitialPageName.

Wenn wir den Bericht bereitstellen und als Excel exportieren erhalten wir zumindest schon mal eine etwas schönere Benennung der Tabellenblätter.

PageName

Wir machen jetzt auf der zweiten Seite des Berichts weiter. Dort gibt es ein Rechteck mit einem Textfeld darin. Wir setzen die Eigenschaft des Rechtecks.

Das Ergebnis ist dann wie erwartet. Es gibt einen Seitenumbruch beim Rechteck und ab da haben die Tabellenblätter den Namen "Rechteck". Die Folgeblätter bekommen zusätzlich eine entsprechende Nummerierung. Es ist nicht so, dass ab dem nächsten Seitenumbruch der InitialPageName wieder greift, sondern der zuletzt gesetzte PageName bleibt aktiv. Insofern ist die Bedeutung des InitialPageName wirklich nur sehr begrenzt und auch die Einsatzmöglichkeit nicht gerade berauschend. In der Regel verwende ich diese Eigenschaft auf Ebene des gesamten Reports also nicht.

Man sollte beachten, dass der PageName und InitialPageName natürlich auch die Verwendung von Ausdrücken zulassen, so dass man sehr flexible Namen generieren kann und z. B. Parameter oder das Tagesdatum mit aufnehmen kann.
Auf die gleiche Art und Weise setzen wir jetzt noch den PageName bei der Balkengrafik. Der zwischen dem Rechteck und der Grafik liegende Unterbericht hat allerdings keine Eigenschaft PageName. Also was tun wir hier?

Elemente ohne die Property PageName

Wir haben bei Unterberichten natürlich auch die Möglichkeit im Unterbericht selber bei den entsprechenden Elementen einen Eintrag vorzunehmen. Dazu später mehr.
Aber wir haben noch auf der ersten Seite ein Element, welches keine Eigenschaft für den PageName hat. Dort steht ein Textfeld für die erste Überschrift. Wenn man hier nicht über den Umweg des InitialPageName gehen möchte, bzw. auch diesen Umweg nicht gehen kann weil das Element erst viel später im Bericht auftaucht, muss man sich anders behelfen. Den Trick dazu habe ich bereits oben angerissen. Wenn man ein Rechteck verwendet und in dieses hinein das Textfeld schiebt, so bleibt das Rechteck an sich unsichtbar, bringt dafür aber die gesuchte Eigenschaft PageName mit sich. Diesen Weg könnte man auch gehen, wenn man einen Unterbericht verwendet und dort keinen PageName setzen will. Also auch hier könnte man ein Rechteck in den Bericht ziehen, den Unterbericht in das Rechteck ziehen und dann die gewünschte Konfiguration vornehmen.

PageName für Gruppen

Etwas versteckter findet sich die Möglichkeit in Tabellen den PageName für einzelne Gruppen der Daten zu setzen.

Wir sind jetzt also in dem Unterbericht, der auf der zweiten Seite des Reports verwendet wird. Natürlich können wir dort ganz einfach die Eigenschaft für die gesamte Tabelle setzen, aber es gibt ja auch Fälle, wo wir bei jedem Wechsel in einer Gruppe einen Seitenumbruch haben und diese Seiten dann später im Excel auch jeweils separate Namen erhalten sollen. Wenn wir die Felder in der Tabelle anklicken, finden wir keine Möglichkeit den Namen für das Tabellenblatt zu setzen. Auch bei der Zeilengruppe ist diese Möglichkeit nicht direkt ersichtlich. Aber wir wollen ja die Eigenschaft für diese Gruppe setzen und wenn wir in den Properties diesen Zweig erweitern, sehen wir die gewünschte Einstellung.

In diesem Fall habe ich mal einen Ausdruck verwendet. Allerdings verfügt dieser Beispiel Bericht nicht über Seitenumbrüche innerhalb der Tabelle. Schauen wir mal, was dann passiert!

Wir haben jetzt also zuerst das Tabellenblatt "Dokumentenstruktur" weil wir DocumentMapLabel verwendet haben. Danach kommt der InitialPageName "InsideSQL.org" weil wir den beim Bericht angegeben und auf der ersten Seite keinen eigenen Namen vergeben haben. Dann kommt der Name "Rechteck", den wir ganz normal als PageName vergeben konnten und danach kommt jetzt der Unterbericht. Auch wenn die Definition des PageNames erst in der Tabelle erfolgt ist, und vorher bereits eine Überschrift stand, wird doch dieser Eintrag für die gesamte Seite verwendet. Der Name wird wie gewünscht aus dem Ausdruck berechnet. Wenn wir einen Seitenumbruch gehabt hätten, würden die Folgeblätter auch alle ihren eigenen Namen erhalten. Ganz am Ende steht noch der Name der "Balkengrafik", den wir wieder recht einfach in den Eigenschaften eintragen konnten.

Jetzt noch einmal die Ansicht mit Verwendung von Seitenumbrüchen zwischen den einzelnen Gruppen:

Hier noch einmal zum Vergleich der Stand am Anfang. Mit wenigen Einträgen haben wir daraus eine aussagekräftige Benennung der Tabellenblätter erreicht!