C# --> Excel

#1540140
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
#1540677
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
#1540882
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.
#1540894
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
Angehängte Dateien:
#1540903
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
#1541306
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
#1541938
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren