Forum: PC-Programmierung C# --> Excel


von Wayne I. (mustang)


Lesenswert?

Hallo zusammen,

ich möchte von mit einer C# 2008 Anwendung Daten nach Excel bringen.
Hat jemand von euch schon mal sowas gemacht?

Ich hab mal den Google bemüht, nur leider komm ich da so gar nicht 
weiter. Ich muss wohl eine Bibliothek einbinden, und genau da gehts 
schon los, wenn ich den entsprechenden Befehl >>using ....<< hinzufüge, 
dann meckert mein Compiler schon. Wohl fehlt ihm die nötige .dll Datei. 
Aber wo muss ich die hinzufügen und woher bekomm ich die?

Wenn mir jemand weiterhelfen könnte, wäre ich sehr dankbar.

Gruß und Dank

: Verschoben durch Moderator
von Peter (Gast)


Lesenswert?

du kannst excel einfach als AktivX control nutzen, damit kannst du excel 
quasi Fernbedienen.

ja nach Entwickungsumgebung kann du so ein excel objekt einfach auf dein 
Formular ziehen.

von Ladde (Gast)


Lesenswert?

Wie wärs mit csv?

von G.a.s.t (Gast)


Lesenswert?

Wenn du mit Windows Forms arbeitest, schau dir mal das 
DataGrid-Steuerelement an.

http://msdn.microsoft.com/de-de/library/bb979532.aspx
http://msdn.microsoft.com/de-de/library/bb979313.aspx

von Wayne I. (mustang)


Lesenswert?

Peter schrieb:
> du kannst excel einfach als AktivX control nutzen, damit kannst du excel
> quasi Fernbedienen.

Möchte ich in dieser Form eigentlich nicht, denn es muss eine 
Möglichkeit geben das ganze von C# auf direktem Weg in Excel zu bekommen 
ohne Großartige Umwege.
Ich möchte lediglich daten die in einem Array stehen in eine Excel 
Tabelle bekommen.

Ladde schrieb:
> Wie wärs mit csv?

Das funktioniert bereits, jedoch habe ich dabei den Nachteil, dass ich 
zuerst mal eine .csv Datei erzeugen muss und diese dann in Excel 
einlesen muss.
Meine Vorstellung sieht eher so aus, dass sich auf Knopfdruck ein neues 
Excel Sheet öffnet und in dieses Sheet die Daten aus dem Array 
eingetragen werden.

So in etwa stelle ich mir das vor:

http://blog.stefan-macke.com/2006/06/28/c-projekt-zugriff-auf-excel-dateien/

Jedoch eben in die andere Richtung, aber unter Verwendung der 
Bibliothek. Und da ist eben schon mein erstes Problem, dass ich nicht 
weiß wie ich diese Bibliothek richtig einbinden muss.

Gruß und Dank

von E Wiebe (Gast)


Lesenswert?

Ich nutze erfolgreich:
http://www.codeproject.com/KB/office/Excel_DataReader.aspx

Damit kann man aus Excel (2000-2003 glaub ich) dateien lesen

von E Wiebe (Gast)


Lesenswert?


von Thomas B. (escamoteur)


Lesenswert?

Hast Du als COM-Komponente überhaupt schon als Referenz hinzugefügt?

Sonst geht Dein using nicht

Gruß
Tom

von Wayne I. (mustang)


Lesenswert?

Thomas Burkhart schrieb:
> Hast Du als COM-Komponente überhaupt schon als Referenz hinzugefügt?
> Sonst geht Dein using nicht

Wie mach ich das? Ich blick es nicht ganz wie das gehen soll.
Könntest du mir bitte etwas auf die Sprünge helfen?
Sorry hab mit C# noch nicht sehr viel Erfahrung, auser den Standard 
Dingen die man ich in der Schule gelernt habe.

von Thomas B. (escamoteur)


Lesenswert?

Solution Explorer->rechte maustaste->add reference->COM 
Objects->Microsoft Excel xx Objectlibrary

Wie Du Excel konkret ansteuerst kann ich Dir nicht sagen, aber es geht 
auf alle Fälle.

Such mal nach "Excel Automation c#"

Gruß
Tom

von Sascha H. (legroeder2k)


Angehängte Dateien:

Lesenswert?

Dirk K. schrieb:

> Wie mach ich das? Ich blick es nicht ganz wie das gehen soll.
> Könntest du mir bitte etwas auf die Sprünge helfen?
> Sorry hab mit C# noch nicht sehr viel Erfahrung, auser den Standard
> Dingen die man ich in der Schule gelernt habe.

Hallo einfach im Solution Explorer mit der rechten Maustaste auf 
References klicken und auf "Add Reference" -> Tab "COM" auswählen und 
"Microsoft Office Excel xx.x Object Library" auswählen, dann sollte das 
ganze in etwa so aussehen wie im letzten Screenshot (vc04.png).
Dann kannst du das ganze wie in Deinem Link nutzen.

Gruß,

Sascha

von Arc N. (arc)


Lesenswert?

Dirk K. schrieb:
> Hallo zusammen,
>
> ich möchte von mit einer C# 2008 Anwendung Daten nach Excel bringen.
> Hat jemand von euch schon mal sowas gemacht?
>
> Ich hab mal den Google bemüht, nur leider komm ich da so gar nicht
> weiter. Ich muss wohl eine Bibliothek einbinden, und genau da gehts
> schon los, wenn ich den entsprechenden Befehl >>using ....<< hinzufüge,
> dann meckert mein Compiler schon. Wohl fehlt ihm die nötige .dll Datei.
> Aber wo muss ich die hinzufügen und woher bekomm ich die?
>
> Wenn mir jemand weiterhelfen könnte, wäre ich sehr dankbar.
>
> Gruß und Dank

Für den Weg, der in dem Blog-Artikel und auf der MS-Seite 
(http://support.microsoft.com/kb/302084/) beschrieben ist, muss Office 
auf dem Rechner installiert sein.
Ohne installiertes Office bieten sich auch die SDKs zum OpenXML-Format 
an:
http://www.microsoft.com/downloads/details.aspx?FamilyId=AD0B72FB-4A1D-4C52-BDB5-7DD7E816D046&displaylang=en

http://www.microsoft.com/downloads/details.aspx?FamilyId=C6E744E5-36E9-45F5-8D8C-331DF206E0D0&displaylang=en

http://openxmldeveloper.org/forums/thread/1816.aspx

von Wayne I. (mustang)


Lesenswert?

Danke für die Prima erklärung!

Die Bibliothek hab ich jetzt eingebunden bekommen.
Kann mittlerweile schon Excel öffnen und eine bereits beschriebene Datei 
auslesen.
Jedoch klemmt es noch dabei ein neues Tabellenblatt anzulegen und dies 
zu beschreiben.

hat da noch jemand eine Lösung parat?

Gruß und Dank

von Thomas B. (escamoteur)


Lesenswert?

Das müsste in der Art   Application.ActiveWorkbook.WorkSheets.Add 
funktionieren, wenn ich mich da an meine VBA.Kenntnisse erinnere.

Gruß
Tom

von Sascha H. (legroeder2k)


Lesenswert?

Hallo Dirk,

wie folgt schaut der Code bei mir in etwa aus:
1
// Hier die Standard usings etc...
2
using System.Reflection;
3
using Microsoft.Office.Interop.Excel;
4
using Microsoft.Office.Core;
5
6
// Helper für COM Automation
7
private object oFalse = false;
8
private object oTrue = true;
9
private object oMissing = System.Reflection.Missing.Value
10
11
private void createExcelSheet()
12
{
13
  // Excel starten
14
  Application oXL = new ApplicationClass();
15
16
  // Neues Workbook Erzeugen
17
  Workbook oBook = oXL.Workbooks.Add( oMissing );
18
19
  // Neues Worksheet erzeugen
20
  Worksheet oSheet = ( Worksheet ) oBook.Worksheets.Add( oMissing, oMissing, oMissing, XlSheetType.xlWorksheet );
21
22
  oSheet.Name = "Test"
23
24
  // Am Ende wieder alles aufräumen
25
  oXL.Quit();
26
  System.Runtime.InteropServices.Marshal.ReleaseComObject( oSheet );
27
  System.Runtime.InteropServices.Marshal.ReleaseComObject( oBook );
28
  System.Runtime.InteropServices.Marshal.ReleaseComObject( oXL );
29
}

Kann sein, dass dort noch zusätzliche Referenzen drinne stecken wegen 
System.Reflection bzw. System.Runtime.InteropServices, kann das grad 
nicht nachschauen weil ich die Windows VM nicht laufen habe. Ansonsten 
ist das hier das erzeugen eines neuen Tabellenblattes und das drumherum.

Einen Bug musste ich bisher beobachten in meinen Applikationen:
Wenn man größere Datenmengen so nach Excel pumpt ist es durchaus schön, 
Excel während man die Tabellen füllt via oXL.Visible = false; 
auszublenden und wenn alles Fertig ist dann wieder einzublenden; so geht 
zum einen das Einfügen schneller weil er nicht dauernd die Tabelle 
rendern muss und zum anderen sieht es für den User schöner aus. 
Allerdings taucht Excel dann in einigen Fällen nicht mehr auf, der 
Prozess ist im Hintergrund zwar vorhanden jedoch passiert beim Sichtbar 
machen nichts mehr. Beendet man den Prozess und lässt Excel das 
Tabellenblatt speichern kommt man allerdings an die Daten ran.

Gruß,

Sascha

von Wayne I. (mustang)


Lesenswert?

@ Sascha H.

Vielen Dank, ich habe das ganze mit einigen änderungen übernommen und 
das funktioniert soweit!

Jetzt bin ich gerade dabei, wie ich einzelne Zellen beschreibe bzw. wie 
ich vorher einzelne Tabellenblätter auswählen kann.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.