mikrocontroller.net

Forum: PC-Programmierung C# --> Excel


Autor: Wayne Interessierts (mustang)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ladde (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wärs mit csv?

Autor: G.a.s.t (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wayne Interessierts (mustang)
Datum:

Bewertung
0 lesenswert
nicht 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-...

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

Autor: E Wiebe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nutze erfolgreich:
http://www.codeproject.com/KB/office/Excel_DataReader.aspx

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

Autor: E Wiebe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Thomas Burkhart (escamoteur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du als COM-Komponente überhaupt schon als Referenz hinzugefügt?

Sonst geht Dein using nicht

Gruß
Tom

Autor: Wayne Interessierts (mustang)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas Burkhart (escamoteur)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sascha H. (legroeder2k)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht 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?Fa...

http://www.microsoft.com/downloads/details.aspx?Fa...

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

Autor: Wayne Interessierts (mustang)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas Burkhart (escamoteur)
Datum:

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

Gruß
Tom

Autor: Sascha H. (legroeder2k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dirk,

wie folgt schaut der Code bei mir in etwa aus:
// Hier die Standard usings etc...
using System.Reflection;
using Microsoft.Office.Interop.Excel;
using Microsoft.Office.Core;

// Helper für COM Automation
private object oFalse = false;
private object oTrue = true;
private object oMissing = System.Reflection.Missing.Value

private void createExcelSheet()
{
  // Excel starten
  Application oXL = new ApplicationClass();

  // Neues Workbook Erzeugen
  Workbook oBook = oXL.Workbooks.Add( oMissing );

  // Neues Worksheet erzeugen
  Worksheet oSheet = ( Worksheet ) oBook.Worksheets.Add( oMissing, oMissing, oMissing, XlSheetType.xlWorksheet );

  oSheet.Name = "Test"

  // Am Ende wieder alles aufräumen
  oXL.Quit();
  System.Runtime.InteropServices.Marshal.ReleaseComObject( oSheet );
  System.Runtime.InteropServices.Marshal.ReleaseComObject( oBook );
  System.Runtime.InteropServices.Marshal.ReleaseComObject( oXL );
}

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

Autor: Wayne Interessierts (mustang)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.