2.2.3 Tabellen

Auch in PowerPoint-Präsentationen werden häufig Folien durch Tabellen strukturiert. Zum Einfügen einer Tabelle wird bei PresentationML ein „Graphic Frame“ (dt.: Grafik-Rahmen) verwendet.

 

2.2.3.1 Graphic Frame-Container

Ein Graphic Frame wird mit dem Element <p:graphicFrame> erzeugt und ist eine andere Art des Shapes (vgl. 2.2 Shape). Daher kann ihm auch mit dem Element <p:xfrm> gleichfalls eine Position und eine Größe zugewiesen werden (vgl. 2.2.1.2 Positions- und Größenangaben). Ebenso werden in ihm in einem Element (<p:nvGraphicFramePr>) nicht sichtbare Eigenschaften zugewiesen, wie eine ID und ein Name. Sichtbare Eigenschaften, wie eine Flächenfüllung oder Rahmeneigenschaften, können ihm nicht zugeordnet werden. Ein Graphic Frame ist daher stets nicht sichtbar und hat nur funktionale Aufgaben. Für den Inhalt des Graphic Frames erhält er das Element <a:graphic> mit dem Kindelement <a:graphicData>. Diese Konstruktion stellt einen Container dar, der theoretisch alle Elemente enthalten kann. Das uri-Attribut des a:graphicData-Elements gibt mit einem URI genauere Angaben über das Inhaltsmodell des Containers an.

<p:graphicFrame>
   <p:nvGraphicFramePr>                       (1)
      <p:cNvPr id="3" name="Tabelle 2"/>
      <p:cNvGraphicFramePr/>
      <p:nvPr/>
   </p:nvGraphicFramePr>
   <p:xfrm>                                   (2)
      <a:off x="1524000" y="1397000"/>
      <a:ext cx="1524000" cy="370840"/>
   </p:xfrm>
   <a:graphic>                                (3)
      <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/table">(4)                         
            …                                 (5)
      </a:graphicData>
   </a:graphic>
</p:graphicFrame>
1 Enthält die nicht sichtbaren Eigenschaften des Graphic Frames.
2 Für die Positions- und Größenangaben.
3 Container-Modell für den Inhalt des Graphic Frames.
4 Das uri-Attribut gibt hier an, dass es sich bei dem Inhalt um eine Tabelle handelt. Denkbar andere Inhaltsmodelle wären Diagramme mit dem URI "http://schemas.openxmlformats.org/drawingml/2006/chart" oder SmartArt-Objekte mit dem URI "http://schemas.openxmlformats.org/drawingml/2006/diagram".
5 Hier wird der entsprechende Inhalt des Graphic Frames eingefügt.

Abbildung Graphic Frame

 

2.2.3.2 Die Tabellenstruktur von DrawingML

Eines der Inhaltsmodelle für den Container wird mit dem URI "http://schemas.openxmlformats.org/drawingml/2006/table" angegeben. Hierbei handelt es sich – wie schon aus dem URI zu erkennen – um das Tabellenmodell der Sprache DrawingML. Wie die meisten XML-Tabellenmodelle enthält das umschließende Element der Tabelle (<a:tbl>) für jede Zeile ein Element (<a:tr>) und für jede Zelle in einer Zeile enthält das entsprechende Zeilen-Element ein Zellen-Element (<a:tc>).

<a:tbl>  
   <a:tblGrid>                                (1)
      <a:gridCol w="1024000"/>  
        …                                     (2)
   </a:tblGrid>  
   <a:tr h="370840">                          (3)
      <a:tc>                                  (4)
        …                                     (5)
      </a:tc>  
        …                                     (6)
   </a:tr>  
   …                                          (7)
</a:tbl>  
1 Da es bei einem solchen Tabellenmodell keine Gruppierungselemente für alle Zellen einer Tabellenspalte gibt, wird hier im Element <a:tblGrid> für jede Spalte der Tabelle ein a:gridCol-Element erzeugt. In einem solchen Element wird mit dem w-Attribut die Breite in EMU bestimmt.
2 Hier wird für jede weitere Spalte ein a:gridCol-Element eingefügt. Die Reihenfolge der a:gridCol-Elemente ist dabei entscheidend für die Zuordnung der Spalten. Das erste Element ist dabei für die Spalte 1 zuständig, das zweite für die Spalte 2 usw.
3 Das a:tr-Element erzeugt eine Tabellenzeile. Mit dem h-Attribut wird in EMU die Höhe dieser Zeile angegeben.
4 Mit dem a:tc-Element wird eine Tabellenzelle erzeugt.
5 Hier werden der Inhalt der Tabellenzelle sowie die Formatierungseigenschaften der Zelle eingetragen.
6 Für jede weitere Zelle der Tabellenzeile wird hier ein a:tc-Element eingefügt. Dabei müssen genauso viele a:tc-Elemente vorhanden sein wie Tabellenspalten definiert wurden (2). Die Reihenfolge der Zellen-Elemente ist hier ebenfalls für die Zuordnung der Spalten entscheidend.
7 Für jede weitere Zeile der Tabelle wird hier ein a:tr-Element eingefügt. Auch hier ist die Reihenfolge wieder entscheidend für die Darstellung.

Abbildung Tabellenstruktur von DrawingML

 

Spalten und Zellen überspannende Zellen

Bisher ähnelt dieses Tabellenmodel stark dem uns aus HTML bekannten Modell. Auch bei Spalten und Zeilen überspannenden Zellen gibt es gewisse Ähnlichkeiten. Werden zwei Zellen, die in einer Zeile nebeneinander liegen, verbunden, erhält die erste Zelle das Attribut gridSpan mit dem Wert 2. Dieses Attribut ist vergleichbar mit dem HTML-Attribut colspan und gibt an, wie viele Zellen miteinander verbunden werden sollen. Der Inhalt der ersten Zelle wird als Inhalt der resultierenden (verbundenen) Zelle dargestellt. Entscheidender Unterschied zum HTML-Modell ist, dass die andere Zelle nicht entfernt wird. Diese überspannte Zelle muss weiterhin mit einem a:tc-Element definiert werden, obwohl sie nicht mehr dargestellt wird. Das Element kann leer sein – aber auch Inhalt enthalten, der aber ebenfalls nicht angezeigt wird. So ist sichergestellt, dass jede Tabellenzeile die gleiche Anzahl an Zellen enthält.

Bei Zeilen überspannenden Zellen wird ebenso verfahren. Dem Zellen-Element <a:tc> wird das Attribut rowSpan zugefügt mit der Anzahl der überspannten Zeilen als Wert und die überspannten Zellen werden definiert aber nicht dargestellt.

 

2.2.3.3 Tabellenzellen

Eine Tabellenzelle ist mit einem Textrahmen (siehe 2.2.2 Textrahmen) zu vergleichen. Auch das a:tc-Element kann einen Text-Bereich durch das Element <a:txBody> enthalten. Hier gilt das gleiche Prinzip wie bei dem Textbereich von Textrahmen. Über das Element <a:tcPr> werden die Eigenschaften der Tabellenzelle übergeben. Auch hier gibt es einige Ähnlichkeiten. Die Flächenfüllung kann auf die gleiche Weise bestimmt werden (vgl. 2.2.1.4 Flächenfüllung). Auch die Rahmeneigenschaften werden ähnlich bestimmt, nur gibt es hier statt nur ein a:ln-Element für jede Seite der Zelle ein Element – also für den rechten Rahmen <a:lnR>, für den linken <a:lnL>, für den oberen <a:lnT> und für den unteren <a:lnB>. Unterschiede gibt es logischerweise bei der geometrischen Form und bei den Größen- und Positionsangaben. Da eine Tabellenzelle immer rechteckig ist und die Größe durch die Spaltengröße und die Zellenhöhe bestimmt wird, können hier keine abweichenden Angaben gemacht werden.

<a:tc>
   <a:txBody>
      <a:bodyPr/>
      <a:p>
         <a:r>
            <a:t>Z1S1</a:t>
         </a:r>
      </a:p>
   </a:txBody>
   <a:tcPr>
      <a:solidFill>
         <a:srgbClr val="F38222"/>
      </a:solidFill>
   </a:tcPr>
</a:tc>
Tipp der data2type-Redaktion:
Zum Thema PresentationML bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: