Entwickler-Ecke
IO, XML und Registry - Excel Datei mit C# erstellen
Ivy - Mo 11.07.11 10:09
Titel: Excel Datei mit C# erstellen
Hallo,
ich hoffe ich hab jetzt in die richtige kategorie gepostet. Ich möchte gerne eine excel datei mit c# automatisch erzeugen. Mit diesem Tutorial hab ichs jetzt mal versucht:
http://csharp.net-informations.com/excel/csharp-create-excel.htm
jedoch habe ich die Microsoft Excel 12.0 Object Library nicht sondern die 10.0. Also funktioniert das ganze natürlich nicht. Weiß jemand wo ich die 12.0 herbekomme oder wie ich es mit meiner 10.0 hinbekomme??
danke
lg ivy
Th69 - Mo 11.07.11 10:26
Hallo Ivy,
es kommt einfach darauf an, welche Excel-Version du bei dir installiert hast, s.a.
http://de.wikipedia.org/wiki/Microsoft_Excel#Versions.C3.BCbersicht
(du hast also mit Version 10.0 Excel 2002 (MS Office XP))
Du kannst also einfach die bei dir installierte Object Library benutzen. Bedenke aber, daß du dann nur dein Programm auf Systemen laufen lassen kannst, wo genau diese Excel-Version installiert ist.
Und je nach Version unterscheiden sich dann natürlich auch die speziellen Funktionalitäten (wobei die grundlegenden Funktionen sicherlich gleich sind, d.h. wenn du ein älteres Tutorial benutzt, so sollte dies auch mit einer neueren Excel-Version funktionieren).
(Für versionsunabhängigen Zugriff auf Office-Produkte gibt es z.B.
NetOffice [
http://netoffice.codeplex.com/], jedoch wird das wohl eher im professionellen Bereich benötigt. Ein anderes Stichwort wäre "Late Binding".)
P.S. Ich selber habe immer das
XML Spreadsheet [
http://msdn.microsoft.com/en-us/library/aa140066%28v=office.10%29.aspx]-Format benutzt (auf deutsch heißt das "Kalkulationstabellenformat"). Dann ist man relativ versionsunabhängig (m.E. funktioniert das ab Excel 2002). Ein Beispiel für C# gibt es bei CodeProject:
http://www.codeproject.com/KB/office/excelxmlspreadsheet.aspx
Ivy - Mo 11.07.11 10:29
hmm mein debugger sagt mir aber:
Zitat: |
Dieser Vorgang konnte nicht durchgeführt werden, da der QueryInterface-Aufruf an die COM-Komponente für die Schnittstelle mit der IID "{000208D5-0000-0000-C000-000000000046}" aufgrund des folgenden Fehlers nicht durchgeführt werden konnte: Bibliothek nicht registriert. |
woran könnte das liegen?
Th69 - Mo 11.07.11 10:42
Hallo Ivy,
hast du denn Excel 2002 bei dir installiert?
Ansonsten schau dir mal mein "P.S." im vorigen Beitrag an (ich hatte wohl zeitgleich mit dir meinen Beitrag editiert).
Ivy - Mo 11.07.11 10:49
ja ich benutze excel 2002...
mit deinem beispiel, kann ich aber doch keine neue excel datei erstellen oder?
Th69 - Mo 11.07.11 10:58
Hallo Ivy,
wann genau kommt denn die Fehlermeldung (also schon beim "Verweis hinzufügen" der COM-Komponente oder erst zur Laufzeit, d.h. bei welcher Methode)?
Das Spreadsheet-Format erzeugt eben eine XML-Datei anstatt einer XLS, kann aber von jeder Excel-Version ab 2002 eingelesen werden (und dann kann man natürlich von Excel aus dieses auch als XLS abspeichern).
Was genau möchtest du denn erreichen, d.h. welche User sollen nachher dieses Excel-Datei benutzen können?
Ivy - Mo 11.07.11 11:04
C#-Quelltext
1:
| xlWorkBook = xlApp.Workbooks.Add(misValue); |
das ist die zeile...
ich möchte, dass der benutzer über einen filechooser einen pfad auswählt, dann seinen dateinamen eingibt und dann die excel datei erstellt und gespeichert wird...
Th69 - Mo 11.07.11 11:37
Hallo Ivy,
ich habe es gerade bei mir auch mal mit dem Tutorial ausprobiert.
Da ich hier nur Excel 2000 (Object Library 9.0) habe, mußte ich ein paar Änderungen am Code vornehmen - hauptsächlich
C#-Quelltext
1:
| xlApp = new Excel.Application(); |
Und dann wurde bei mir ohne Fehler die XLS-Datei erstellt.
Probiere mal auch diese Änderung bei dir aus (evtl. klappt ja ApplicationClass erst ab 12.0).
Und du kannst mal im Debugger nachschauen, ob das Application-Objekt 'xlApp' erstellt wurde (unter "Dynamic View"), d.h. ob es vernünftige Werte bei den einzelnen Eigenschaften liefert.
Und bei MS habe ich auch ein Tutorial gefunden:
http://support.microsoft.com/kb/302084
(und dies verwendet auch noch 'new Excel.Application()').
Ivy - Mo 11.07.11 11:54
also der fehler kommt immernoch...
was sind vernünftige werte?? wo find ich die "Dynamic View"
Th69 - Mo 11.07.11 12:23
Hallo Ivy,
das einzige, was ich im Internet zu deinem Fehler finden konnte, ist:
http://www.office-loesung.de/ftopic252465_0_0_asc.php
Evtl. solltest du aber noch mal Excel neu bei dir installieren.
Wenn du einen "Breakpoint" auf die Zeile "xlWorkBook = ..." setzt, dann kannst du dir doch den Inhalt der Variablen 'xlApp' anschauen (per Tooltip oder aber im Autos/Locals/Watch-Fenster) und da gibt es dann (zumindestens bei mir unter VS 2010) für COM-Variablen den Unterpunkt "Dynamic View").
Ivy - Mo 11.07.11 13:28
hmmm neu installieren wäre blöd...
habe jetzt noch ein beispiel gefunden, da kommt genau der gleiche fehler
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37:
| Excel.Application myExcelApplication; Excel.Workbook myExcelWorkbook; Excel.Worksheet myExcelWorkSheet; myExcelApplication = null;
try { myExcelApplication = new Excel.Application(); myExcelApplication.Visible = true; myExcelApplication.ScreenUpdating = true;
var myCount = myExcelApplication.Workbooks.Count; myExcelWorkbook = (Excel.Workbook)(myExcelApplication.Workbooks.Add(System.Reflection.Missing.Value)); myExcelWorkSheet = (Excel.Worksheet)myExcelWorkbook.ActiveSheet;
myExcelWorkbook.Close(true, "C:\\kunden.xls", System.Reflection.Missing.Value); }
catch (Exception ex) { String myErrorString = ex.Message; MessageBox.Show(myErrorString); } finally { if (myExcelApplication != null) { myExcelApplication.Quit(); }
} |
Th69 - Mo 11.07.11 14:16
Hallo nochmal,
hast du mal den Befehl "regtlib.exe" aus meinem Link ausprobiert?
Du müßtest bei dir nur lokal mal nach der entsprechenden "Excel.olb"-Datei suchen und diesen dann in der Eingabeaufforderung eingeben.
Bei dir müßte es dann
Quelltext
1:
| C:\Windows\System32\URTTemp\Regtlib.exe "C:\Programme\Microsoft Office\Office10\Excel10.OLB" |
sein (die Anführungsstriche sind wichtig, wenn der Dateiname Leerzeichen enthält).
Ivy - Mo 11.07.11 14:24
hm okay, aber in meinem MS office ordner finde ich kein excel10.olb??nur andere datein mit dieser endung...
Ivy - Mo 11.07.11 14:40
Th69 hat folgendes geschrieben : |
Und wie ich schon geschrieben habe, such mal nach "*.OLB" in deinem Office-Ordner.
(bei mir heißt die Datei "Excel9.OLB"). Und wenn sie nicht vorhanden ist, dann kannst du ja auch nicht auf Excel zugreifen - ergo: Excel neu installieren ;-)) |
hm ja hab ichg gemacht, findet sich nicht auf... *mist*e, dann muss ich wohl doch neuinstallieren :-/ du bist dir sicher dass es an dieser datei liegt?
Th69 - Mo 11.07.11 15:05
Hallo Ivy,
habe gerade meinen oberen Beitrag editiert (also Excel neu installieren brauchst du wohl nicht), sondern die PIAs herunterladen und verwenden.
Evtl. ist es dann doch für dich einfacher, XML-Dateien zu erstellen ;-)
Ivy - Mo 11.07.11 15:45
zu spät ich installiere gerade neu... mal schauen obs dann geht
EDIT: Ok datei ist immernoch nicht vorhanden -.- ich dreh echt noch durch :D
hab die PIA's heruntergeladen und wo genau muss ich die jetzt reinkopieren? habs jetzt über "verweis hinzufügen" die dll Microsoft.Office.Interopt.Excel in mein projekt eingebunden. jedoch kommt jetzt mein programmstart wieder ein fehler:
Zitat: |
Die Datei oder Assembly "Microsoft.Office.Interop.Excel, Version=10.0.4504.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden. |
registiert habe ich es bereits....
Kha - Mo 11.07.11 16:18
Liegt die Assembly denn im bin-Ordner?
Ivy - Mo 11.07.11 16:25
jetzt klappts, super danke, mit den PIA's hats hingehaun ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!