Open XML Dateien aufbauen und verändern (Teil 4)

Formatierte Zellen in Excel:

Um Zellen in Excel formatieren zu können, muss auf ein Stylesheet zurückgegriffen werden. Im Zellenmarkup wird lediglich ein Verweis auf den (Style-) Index des sog. Master Cell Style Records gesetzt, einer Stelle im Stylesheet, an der alle Fäden zusammen laufen und das Format der Zelle definiert wird.

private Cell CreateCellWithNumber(string cellRef, string cellValue, uint styleIndex)
{
Cell c = new Cell();
c.DataType = CellValues.Number;
c.CellReference = cellRef;
c.StyleIndex = styleIndex;
c.CellValue = new CellValue(cellValue);
return c;
}

Das XML Markup der Zelle könnte danach so aussehen:

 <x:c r="B1" s="2" t="n">
  <x:v>42</x:v>
</x:c>

Dieser Master Cell Style Record holt seine Daten aus anderen Bestandteilen des Stylesheets, wie den Abschnitten für Zahlenformate, Rahmen, Zellfüllmuster, Zeichensätze und Formatvorlagen. Die Formatvorlagen verweisen wiederum auf einen Definitionsabschnitt und enthalten Informationen über (in Excel) eingebaute Formate, die nicht explizit definiert werden müssen.

Die Zusammenhänge sind im folgenden Diagramm zu erkennen:

Styles Dependencies full

Wichtig ist, dass einige Beziehungen durch den Index des entsprechenden Eintrags und andere durch dessen ID referenziert werden. Zahlenformate (ebeneso wie Formatvorlagen) sind schon vordefiniert und im Anhang H der Open XML Markup Definition erklärt. Ein Ausschnitt ist hier zu sehen:

40

#,##0.00;[Red](#,##0.00)

45

mm:ss

46

[h]:mm:ss

47

mmss.0

48

##0.0E+

49

@

Wenn man man eine befüllte Excel-Datei mit den Package Explorer (Open XML SDK 2.0 Productivity Tool), oder auch in Visual Studio öffnet, so sieht man diese Zusammenhänge:

Styles und Formats

Das ist nur rein Ausschnitt aus dem gesamten Bild. Mindestens müssen folgende Bestandteile implementiert werden:

  • Zahlenformatedefinitionen (<numFmts …>)
  • Zeichensatzdeinitionen (<fonts …>)
  • Definition der Zellfüllungen (<fills …>)
  • Definition der Umrandungen (yborders …>)
  • Die Zellenformate (<cellXfs…>)
  • Die Formatvorlagen (cellStyles …>) … mind. „Normal“
  • Die Definition der Formatvorlagen (<cellStyleXfs…>)

Wie das dann implementiert wird, erfahren Sie im nächsten Teil.

[Fortsetzung folgt]