21. Jan 2005
Lesedauer 2 Min.
Mit XSL-Vorlage Excel-Datei aus XML-Datei erzeugen
Excel
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>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();Das Ergebnis kann sofort in Excel geladen werden und die Daten werden richtig in die Zellen sortiert.
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();Das Ergebnis kann sofort in Excel geladen werden und die Daten werden richtig in die Zellen sortiert.