Entwickler-Ecke

IO, XML und Registry - C# Daten in Excel


Skiller-1988 - Mi 21.01.09 10:42
Titel: C# Daten in Excel
Hi,
ich habe folgende Frage und zwar möchte ich gerne Wissen welche „Technologie“ ich verwenden soll wenn ich Werte aus einer DataTable in Excel (2007) hineinschreiben möchte. Zurzeit habe ich das Problem mittels Interoperabilität gelöst und es funktioniert auch soweit, doch nun möchte ich wissen ob es noch eine bessere bzw. schnellere variante gibt. Ich denke da an OLEDB Dataprovider bzw. XML. Also meine Frage was haltet ihr am geeignetsten um ein Excel Dokument anzulegen und es mit Werten aus einer C# DataTable zufüllen? Gibt es da grundlegende Performance Unterschiede?


Th69 - Mi 21.01.09 12:20

Sofern es nur um die Erzeugung von reinen Datentabellen geht (ohne Formatierungen) würde ich immer XML bzw. sogar CSV-Dateien erzeugen (da hierfür noch nicht einmal Excel auf dem System installiert sein muß). Und von der Performance her sicherlich um einiges schneller als Daten per OLEDB zu verschicken.


JüTho - Mi 21.01.09 12:51

Hallo Th69,

ich glaube, Du hast das Ziel nicht genau gesehen: Er will eine Excel-Tabelle mit Inhalt aus einer DataTable füllen. Es geht nicht darum, die DataTable "irgendwie" zu exportieren.

Gruß Jürgen


Th69 - Mi 21.01.09 13:01

Doch das habe ich wohl gesehen -)
Darum habe ich ja "(ohne Formatierungen)" geschrieben, denn mit Excel kann man ja auch XML und CSV-Dateien lesen und bearbeiten.
Es gibt sogar ein spezielles Excel-XML-Format (nennt sich "XML Kalkulationstabelle 2003").

Wenn jedoch in ein gerade geöffnetes Excel-Dokument die Daten geschickt werden sollen, dann bleibt wirklich nur der Weg über OLE.


Skiller-1988 - Mi 21.01.09 14:13

naja die Formatierung wäre nicht ganz so wichtig es geht mir nur darum die werte aus einer DataTable und jetzt auch aus einen 2 dimensionalen - Array in Excel zu bekommen. Das XML die beste Lösung ist habe ich mir fast gedacht doch wie sieht es da mit dem Programmieraufwand aus? Hat eventuell einer einen Link zur Problematik?


Th69 - Mi 21.01.09 14:27

Um einfach eine XML-Datei zu erzeugen, könntest du DataTable.WriteXml() verwenden. Jedoch weiß ich nicht, ob diese von Excel sinnvoll gelesen werden kann.
Im Anhang habe ich mal eine Klasse (ExcelXML) beigefügt, welche die DataTable als ein für Excel verständliches XML rausschreibt und wiedereinliest (WriteToFile and ReadFromFile). Der Parameter 'nWidth' gibt die Breite der Spalten an (oder -1 als Default).


Skiller-1988 - Mi 21.01.09 14:41

Danke dir erstmal werde das mal testen.