12.07.2009, 17:02 Uhr

Einführung in Open XML - ExcelML im Überblick

Genau wie für Word gibt es auch für Excel und PowerPoint eine eigene Auszeichnungssprache. In dieser Folge der Open XML-Einführung nimmt der Autor ExcelML unter die Lupe.
von Jens HäupelEin Excel-Dokument besitzt im Unterschied zu einem Word-Dokument eine zusätzliche Dimension, da eine Arbeitsmappe mehrere Tabellenblätter enthalten kann. Diese Beziehung wird gemäß der Open XML-Struktur mit Hilfe einer eigenen Datei (Workbook.xml), welche die Inhalte einer Arbeitsmappe beschreibt, ausgedrückt. Diese Datei enthält neben Informationen über Views (z.B. die Adresse der letzten aktiven Zelle) und Themes auch eine Liste der enthaltenen Tabellenblätter: Diese Zeile macht erneut die Verknüpfung über RelationshipIDs (xxx.xml.rels aus dem Ordner xl\_rels) deutlich, die den Weg in den Worksheets-Ordner weisen, in dem die SpreadsheetML-Dateien zu finden sind. Darin wird der Inhalt des Tabellenblattes definiert, der vereinfacht den folgenden Aufbau besitzt: Diese Struktur besitzt keine Überraschungen. Die Daten eines Tabellenblattes bestehen aus Row-Elementen (Zeilen). Der Zellinhalt wird in einem Cell-Elelement () definiert. Das kann von einfachen Zahlen über Zeichenketten bis hin zu Formeln alles sein, was eine Tabellenkalkulation fassen kann.Die Zahl 42 in Zelle B3 wird in SpreadsheetML so ausgedrückt: 42Dabei bedeuten r = Zellreferenz, s = Zahlenformat (Referenz zur styles.xml) und v = Wert. Eine direkte Formatierung gibt es in Excel nicht, s bezieht sich daher immer auf eine Formatbeschreibung in der Datei styles.xml. Ist kein besonders Zahlenformat erwünscht, können die Style-Informationen bei Zahlen auch weggelassen werden. Das würde dem Zahlenformat Standard in Excel entsprechen. Zeichenketten-RecyclingZeichenketten werden recycelt und in einer SharedString Tabelle gehalten (sharedStrings.xml). Damit wird Platz gespart, wenn es mindestens eine zweite Zelle gibt, die denselben Inhalt besitzt. Die Strings werden über ihren nullbasierten Index in der SharedStrings-Tabelle (angegeben im Value-Element) referenziert´0Dabei bedeuten r=Zellreferenz, t=Typ (s=Shared String), v=Index des Strings in der Shared Strings-Tabelle Neben Shared Strings kennt Excel auch Inline Strings. Diese werden direkt innerhalb der Zelle angegeben. Sample Text Formeln als ZellinhalteAuch Formeln können auf diese Weise relativ einfach dargestellt werden. Neben den bekannten Informationen zu Zellreferenz und Zahlenformat wird die Formel in der Tabellenschreibweise in ein Formula-Element () eingebettet. Zusätzlich schreibt Excel immer das Ergebnis in ein Value-Element ().SUM(B3:E3)/COUNTA(B3:E3) 38.5Der folgende Hinweis ist für den Fall wichtig, dass Arbeitsmappen auf dem Server oder innerhalb eines Workflows ausgewertet werden müssen, wo kein Excel-Client und somit auch keine Excel-Calculation Engine zur Verfügung steht. Soll ein Tabellenblatt per Programm erstellt werden, dass in einem "Excel-Client" weiterverarbeitet werden soll, muss das Ergebnis berechnet werden da beim Öffnen der Arbeitsmappe in der Regel alle Formeln neu berechnet werden. Formeln werden immer in der englischen Schreibweise angegeben. Eingebettete Bilder - ein kompliziertes ThemaEnthält ein Tabellenblatt eingebettete Bilder wird es etwas komplizierter. Aber erst auf den zweiten Blick. Auf den ersten Blick enthält das schließende SheetData-Element lediglich einen Verweis auf ein Drawing-Objekt:Das lässt vermuten, dass der RelationshipID gefolgt werden soll. Richtig, die zur entsprechenden Tabelle gehörende Beziehungsdatei (z.B. sheet1.xml.rels) enthält einen Verweis auf den Drawings-Ordner, in dem das Drawings-Objekt (der Container für das Bild) spezifiziert wird:Id="rId2"Type="http://schemas...ships/drawing" Target="../drawings/drawing1.xml"/>Das Drawings-Objekt enthält neben dem Verweis auf den Speicherort (Target) auch eventuell angewandte Formatierungen für das eingebettete Bild.Id="rId1"Type="http://schemas...ships/image" Target="../media/image1.jpeg"/> Jetzt ist man endlich am Ziel und wundert sich vielleicht, warum die eingebettete Datei einen anderen Namen trägt als die ursprüngliche Datei. Excel (bei Word und Powerpoint sieht es genauso aus) hat die Bilddatei umbenannt, um Namenskonflikte zu vermeiden und wohl auch, um unbedarften Entwicklern den "Zahn" des Direktzugriffs (feste Pfade, feste Namen) zu ziehen.Fazit Open XML erlaubt das Abbilden sehr komplexer Zusammenhänge. Allerdings sind die Minimalanforderungen relativ leicht beherrschbar und die Komplexität kann mit der eigenen Anwendung mitwachsen. Was optional ist und was nicht bzw. was die Office Client-Anwendungen ergänzen und was nicht, ist nicht immer gekennzeichnet und muss ggf. experimentell herausgefunden werden. Das kann aber in der späteren Entwicklung viel Zeit sparen. Sämtliche Inhalte sollten immer über ihre Beziehungen im Zugriff stehen. Das ist Inhalt der Open Packaging Conventions (OPC). Damit können Open XML-Dateien auch für andere Zwecke gebraucht werden, als für Office-Anwendungen. Was hält Sie davon ab, im Rahmen des OPC Open XML-Dokumentdaten so zu modifizieren (eigene Content Types, eigene Strukturen), dass die entstandene Datei Reportdaten Ihrer eigenen Report-Engine aufnimmt. Damit ist sie zwar nicht mehr für Word oder Excel lesbar und sollte deshalb auch einen anderen Suffix tragen, aber der Zugriff auf die Inhalte erfolgt immer noch über die bekannten APIs (z.B. des Open XML SDKs).Beispiel: Entfernen aller Kommentare aus einer Excel-Arbeitsmappe mit den Klassen des Open XML SDKusingDocumentFormat.OpenXml.Packaging;usingDocumentFormat.OpenXml.Spreadsheet;private void RemoveCommentsFromWorkbook(string FileName){ using (SpreadsheetDocument sd = SpreadsheetDocument.Open(FileName, true)) { WorkbookPartpartWB = sd.WorkbookPart; foreach (WorksheetPart sheet in partWB.WorksheetParts) { varCommentParts = sheet.GetPartsOfType(); sheet.DeleteParts(CommentParts); } }}Links[1] http://www.ecma-international.org/publications/standards/Ecma-376.htm [2] http://www.microsoft.com/downloads/details.aspx?familyid=C6E744E5-36E9-45F5-8D8C-331DF206E0D0Über den AutorJens Häupel ist als Plattform Strategy Manager bei der Microsoft Deutschland GmbH tätig und beschäftigte sich von Anfang an mit Open XML. Sie erreichen über http://blogs.msdn.com/jensha. Nach Ablauf seiner Elternzeit wiill er sich sich wieder verstärkt um seinen beliebten Blog kümmern.Peter Monadiemi


Das könnte Sie auch interessieren