Wie speicher ich Daten in eine Excel-Datei über C#

Moin moin zusammen,
ich habe folgendes Problem:
ich habe in einem C#-Programm 4 verschiedene Variablen. Diese will ich in einer Excel-Datei abspeichern (jede in eine Zelle).
Leider weis ich nicht, wie ich das angehen muss. Ich habe das Problem auch shcon mehrmals gegoogelt, bin allerdings nicht schlau draus geworden.

Würd mich freun wenn ihr mir wieterhelfen könnt.
Danke schonmal im vorraus.

Gruß
Krateos

Mir fallen 2 Varianten ein.

Entweder speicherst du die Daten als Kommaseparierte Datei CSV ab. Die kann einfach in Excel geöffnet werden. Die einfachste Variante.

Oder du steuerst Excel fern via Interop Interface. Dann hilft dir das Beispiel http://msdn.microsoft.com/en-us/library/ms173186(v=v… weiter. Allerdings muss dann Excel installiert sein.

Moin Krateos,

Wenn es lediglich darum geht, 4 Werte in eine Datei zu bekommen, die mit Excel zu bearbeiten sind, dann Würde ich folgendes vorschlagen:

 // Beispielwerte
 List werte\_fuer\_excel = new List();
 werte\_fuer\_excel.Add(4);
 werte\_fuer\_excel.Add(1055.32765);
 werte\_fuer\_excel.Add(-34.2);

 string filePath = @"...\neue\_Excel\_Datei.csv";

 // Prüfen, ob Datei schon existiert. Sonst neu erstellen.
 if (!File.Exists(filePath))
 File.Create(filePath).Close(); // Create gibt den FileStream zurück, der auch wieder geschlossen werden muss.

 // Werte in String umwandeln
 string werte\_string = String.Empty;
 foreach (double wert in werte\_fuer\_excel)
 werte\_string += wert.ToString() + ";";

 // Dateiinhalt schreiben. Achtung: alter Inhalt wird überschrieben.
 File.WriteAllText(filePath, werte\_string);

Diese CSV-Datei lässt sich mit Excel öffnen. Je nach Region müssen die Werte durch ein Komma statt einem Semikolon getrennt werden. Und es ist drauf zu achten, dass unter Umständen die Punkte zum trennen der Nachkommastellen der Werte durch Kommata ersetzt werden müssen.
(werte_string.Replace(".", „,“):wink:

Soll das ganze per Excel-Api erfolgen wird das ganze wesentlich komplizierter.

Ich hoffe, ich konnte helfen. (Falls nicht, einfach fragen :wink: )

MfG
Salbei

Hallo Krateos,

es gibt zwei Möglichkeiten unterschiedlicher Schwierigkeitsgrade:

  1. Möglichkeit: CSV-Datei

Excel kann CSV-Dateien öffnen. Wenn es dann deine Werte solltest du dann so abspeichern:

StreamWriter sw = new StreamWriter(File.OpenWrite(@„C:\Test\DeineDaten.csv“));

sw.WriteLine(Variable1 + „;“);
sw.WriteLine(Variable2 + „;“);
sw.WriteLine(Variable3 + „;“);
sw.WriteLine(Variable4 + „;“);

sw.Close();

Dann stehen deine Variablen in einer für Excel verarbeitbaren Datei.

  1. Möglichkeit: Zugriff auf Excel mittels Com

Das ist ein bißchen schwieriger. Du musst dir das Office-Interop-Assembly in dein Projekt binden und dann folgendes machen:

[…]
using Microsoft.Office.Interop.Excel;

im Quellcode instanziierst du dann ein Excel-Objekt:

Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWb;
Excel.Worksheet xlWs;

xlWb = xlApp.Workbooks.Open(args[0]);
xlWs = (Excel.Worksheet)xlWb.ActiveSheet;

Zugriff auf deine Zellen in der Exceldatei bekommst du dann glaube ich so (2. Zeile in Spalte G):

(Excel.Range)xlWs.Cells[2, „G“]).Value

am Ende musst du dann wieder aufräumen:

xlWb.Save();
xlWb.Close();
xlApp.Quit();

System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);

System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWb);

System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWs);

Ich hoffe, dir damit helfen zu können,

Grüße,

Franzi

Moin,
danke für die schnelle Hilfe Salbei, hast mir sehr weitergeholfen.
Habe mein Programm jetzt so hinbekommen, dass die Zahlen richtig gespeichert werden.
Kann ich in diesem Speicherprozess eigendlich auch mehrere Zeilen in der csv Datei ansprechen? Also das zum Beispiel noch eine Überschrift zu dem Wert gespeichert werden kann?

Gruß
Krateos

Hallo Krateos,

habe ich schon lange nicht gemacht.

Dus nusst eine Bibliothek einbinden, die dir die Excel Objekte zur Verfügung stellt. Mit diesen Objekten kannst du dann EXCEL Dateien öffnen und bearbeiten. Da die einzelnen Methoden recht sprechend sind einfach mal suchen. Eine Erläuterung dazu habe ich auch nicht.

biba

Dirk

Hallo Krateos

Zuerst musst du deinem Projekt die Verweise auf Excel und auf Office hinzufügen. Diese finden sich im COM-Tab und heissen „Microsoft Excel Vr.Nr Object Library“ und „Microsoft Office Vr.Nr Object Library“ wobei Vr.Nr die Versionsnummer deiner Office-Installation ist.

mit

using Office= Microsoft.Ofice.Core;
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;

kannst du nun die Bibliotheken nutzen.

zB:

//Excel öffnen:
Excel.Application exlApp = new Excel.ApplicationClass();
exlApp.Visible = true;

//Arbeitsmappe hinzufügen
object missing = System.Type.Missing;
Excel.Workbook wb = exlApp.Workbooks.Add(missing);
Excel.Sheets sheets = wb.Worksheets;

//Ein Arbeitsblatt auswählen:
Excel.Worksheets xBlatt = (Excel.Sheets)sheets.get_Item(1);

//Daten in Zellen einfüllen
xBlatt.Cells[1,1] = „Hallo“;
xBlatt.Cells[1,2] = „Welt“;

//Speichern
object FileName = @„C:\DeinPfad\DeineDatei.xls“;
wb.SaveAs(oFileName, missing, missing, missing, missing, missing, Excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing)

//Und zum Schluss Excel-Objecte wieder freigeben:
Marshal.ReleaseComObject(xBlatt);
wb.Close(false, missing, missing);
Marshal.ReleaseComObject(wb);
exlApp.Quit();
Marshal.ReleaseComObject(exlApp);

Was man sonst noch alles mit Excel anstellen kann, findest du, wennn du nach „c# excel automatisieren“ oder „c# office automatisieren“ suchst, zB:

http://support.microsoft.com/kb/302084/de

Da findet sich eine Menge im Netz :smile:

Grüsse
Marion

Moin Krateos,

danke für die schnelle Hilfe Salbei, hast mir sehr
weitergeholfen.

Freut mich :smile:

Kann ich in diesem Speicherprozess eigendlich auch mehrere
Zeilen in der csv Datei ansprechen?

Klar

Wichtig ist das Format, dass die Datei später hat (kannst Sie ja einfach mal nicht als csv, sondern txt abspeichern.)

Alles was zwischen 2 Semikolons steht, bildet quasi eine Zelle bei Excel.

sieht deine Datei also so aus:
Überschrift_1;Überschrift_2;Überschrift_3;
47;185;23;

Dann hast du alles was du brauchst. Solltest du eine leere Zelle benötigen, lässt du den Wert einfach raus.
Überschrift_1;;Überschrift_3;
47;185;23;

MfG
Salbei