Autor |
Beitrag |
Ivy
      
Beiträge: 228
|
Verfasst: Mo 11.07.11 10:09
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:
csharp.net-informati...arp-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
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mo 11.07.11 10:26
Hallo Ivy,
es kommt einfach darauf an, welche Excel-Version du bei dir installiert hast, s.a. de.wikipedia.org/wik...rsions.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, 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-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: www.codeproject.com/...lxmlspreadsheet.aspx
Zuletzt bearbeitet von Th69 am Mo 11.07.11 10:38, insgesamt 1-mal bearbeitet
|
|
Ivy 
      
Beiträge: 228
|
Verfasst: 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
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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 
      
Beiträge: 228
|
Verfasst: 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
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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 
      
Beiträge: 228
|
Verfasst: 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
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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: support.microsoft.com/kb/302084
(und dies verwendet auch noch 'new Excel.Application()').
|
|
Ivy 
      
Beiträge: 228
|
Verfasst: Mo 11.07.11 11:54
also der fehler kommt immernoch...
was sind vernünftige werte?? wo find ich die "Dynamic View"
|
|
Th69
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mo 11.07.11 12:23
Hallo Ivy,
das einzige, was ich im Internet zu deinem Fehler finden konnte, ist: www.office-loesung.d...ic252465_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 
      
Beiträge: 228
|
Verfasst: 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
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
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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 
      
Beiträge: 228
|
Verfasst: 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...
|
|
Th69
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mo 11.07.11 14:32
Öffne die "cmd.exe" (unter "Programme/Zubehör" die "Eingabeaufforderung").
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 bzw. Reparieren )
Edit: Ich habe noch mal ein wenig im Internet recherchiert.
Anscheinend verwendet Office 2002 XP direkt die "Excel.exe" (anstatt "Excel10.OLB") für die Registrierung.
Und dann habe ich diese Links gefunden  :
Offixe XP PIAs
Programmieren von Microsoft Word 2002 und Excel 2002 mit Microsoft Visual C#
Du mußt also für Office 2002 XP noch die entsprechenden PIAs (primary interop assemblies) herunterladen und in deinem Projekt referenzieren!
Dann sollte es aber auch bei dir funktionieren...
Zuletzt bearbeitet von Th69 am Mo 11.07.11 15:07, insgesamt 2-mal bearbeitet
|
|
Ivy 
      
Beiträge: 228
|
Verfasst: Mo 11.07.11 14:40
|
|
Th69
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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 
      
Beiträge: 228
|
Verfasst: 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
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
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mo 11.07.11 16:18
Liegt die Assembly denn im bin-Ordner?
_________________ >λ=
|
|
Ivy 
      
Beiträge: 228
|
Verfasst: Mo 11.07.11 16:25
jetzt klappts, super danke, mit den PIA's hats hingehaun 
|
|