Excel
21.01.2005, 00:00 Uhr
Mit XSL-Vorlage Excel-Datei aus XML-Datei erzeugen
XSL kann nicht nur HTML-Dateien aus XML erzeugen. Mit der richtigen XSL-Transformation können Sie auch Tabulator-separierte Tabellen erzeugen.
Für diese Umwandlung von XML-Daten in eine Excel-Datei bieten sich mehrere Möglichkeiten an. Die einfachste lautet sicher: Verwenden Sie Excel 2003, denn das öffnet XML-Dateien.
Wenn aber das Ziel eine frühere Version von Excel ist, muss die XML-Datei in eine für Excel lesbare Form gebracht werden. Das kann auch wiederum auf verschiedene Art und Weise passieren. Ein Weg wäre das Laden der XML-Datei in ein DataSet. Anschließend durchlaufen foreach-Schleifen die Zellen des DataSet und schreiben über eine ADO.NET-Verbindung die Daten in eine Excel-Datei.
Wesentlich weniger Programmiererei fällt an, wenn Sie die XML-Datei über eine XSL-Transformation in eine Komma-separierte Liste umwandeln.
Die Transformationsdatei sieht etwa so aus:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="no"
cdata-section-elements="beschreibung" />
<xsl:template match="eventList">
<xsl:apply-templates select="rubrik"/>
</xsl:template>
<xsl:template match="rubrik">
"<xsl:value-of select="@titel"/>"
<xsl:apply-templates select="event"/>
</xsl:template>
<xsl:template match="event">"<xsl:value-of select="startDatum" />"
"<xsl:value-of select="thema" />" "<xsl:value-of select="beschreibung"/>"
"<xsl:value-of select="preis" />" "<xsl:value-of select="url" />"
"<xsl:value-of select="ort" />"<xsl:text>
</xsl:text></xsl:template>
</xsl:stylesheet>
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="no"
cdata-section-elements="beschreibung" />
<xsl:template match="eventList">
<xsl:apply-templates select="rubrik"/>
</xsl:template>
<xsl:template match="rubrik">
"<xsl:value-of select="@titel"/>"
<xsl:apply-templates select="event"/>
</xsl:template>
<xsl:template match="event">"<xsl:value-of select="startDatum" />"
"<xsl:value-of select="thema" />" "<xsl:value-of select="beschreibung"/>"
"<xsl:value-of select="preis" />" "<xsl:value-of select="url" />"
"<xsl:value-of select="ort" />"<xsl:text>
</xsl:text></xsl:template>
</xsl:stylesheet>
Wichtig: Die Einträge <xsl:value-of select="startDatum" /> und <xsl:value-of select="thema" /> sind durch Tabs getrennt. Das eigentliche Programm zur Konvertierung ist winzig:
XslTransform xslt = new XslTransform();
xslt.Load(XSDFileLabel.Text);
XPathDocument doc = new XPathDocument(InFileLabel.Text);
XmlTextWriter writer =
new XmlTextWriter(OutFileLabel.Text, System.Text.Encoding.Unicode);
xslt.Transform(doc, null, writer, null);
writer.Close();
xslt.Load(XSDFileLabel.Text);
XPathDocument doc = new XPathDocument(InFileLabel.Text);
XmlTextWriter writer =
new XmlTextWriter(OutFileLabel.Text, System.Text.Encoding.Unicode);
xslt.Transform(doc, null, writer, null);
writer.Close();
Das Ergebnis kann sofort in Excel geladen werden und die Daten werden richtig in die Zellen sortiert.