Post by Ewald B.ich möchte mit Excel unter c# arbeiten. Dabei sollte ich einen Verweis auf
die Excel-Bilbiliothek hinzufügen (bei mir Mircosoft Excel 10.0 Object
Libary). Anschliessend sollte ich folgende Zeile in mein Programm eingeben.
using Microsoft.Office.Core;
using Microsoft.Office.Interop.Excel;
Die erste Zeile wird akeptiert, bei der zweiten gibt es jedoch folgende
Der Type oder Namespacename 'Interop' ist in der Klasse oder dem Namespace
'Microsoft.Office' nicht vorhanden (fehlt ein Assemblyverweis?)
Wie kann ich dieses Problem beheben?
Hallo Ewald,
ich vermute, Dein Problem entsteht, während Du versuchst, das
Programmbeispiel umzusetzen, daß ich Dir gestern gepostet habe.
(In Zukunft Anschlussfragen in dem Thread stellen, in dem auch schon die
Antwort gegeben wurde, dort wird es leichter gefunden und der Kontext
ist gleich klar.)
Deine Aussagen, welche Excel-Version Du verwendest, ist widersprüchlich:
Microsoft Excel 10.0 Object Library ist Excel XP (2002), Excel 2000 wäre
9.0. Für die Fernsteuerung von C# aus ist die Versionsnummer wichtig:
Für Excel XP bekommst Du sogenannte Primary Interop Assemblies, für
Excel 2000 AFAIK nicht. Was heisst das alles?
Damit Du eine COM-Klassenbibliothek wie eben die "Microsoft Excel 10.0
Object Library" nutzen kannst, musst Du einen Verweis auf die Bibliothek
einrichten (im Projektmappenexplorer oder im Menu Projekt|Verweise. Die
Excel-Klassenbibliothek findet Du unter "COM" --> Microsoft Excel x.0
Object Library. Nach der Auswahl der Bibliothek erstellt die
Entwicklungsumgebung eine sogenannte Wrapper-Bibliothek, die die
Schnittstelle zwischen COM und .NET bildet. Mit dem Objektbrowser kannst
Du die Klassen dann anschauen.
Das alles wäre an sich kein Problem, wenn diese Wrapper-Bibliothek denn
wenigstens vollständig wäre. Meine eigenen Versuche mit der Excel
2000-Bibliothek ergaben, dass ein Großteil der Klassen fehlt, was die
weitere Programmierung auf diesem Weg unmöglich macht. Man sollte mit
Late-Binding weiterarbeiten.
MS hat das Problem erkannt und stellt seit geraumer Zeit sogenannte
"Primary Interop Assemblies (PIAs)" zur Verfügung, das sind nichts
anderes als vorgefertigte Wrapper-Bibliotheken, und im Gegensatz zu den
von VS.NET generierten auch vollständig. Diese PIAs gibt es aber AFAIK
nur für Office 2003 und XP. Wenn Du also Excel XP benutzen solltest,
bekommst Du die PIAs hier:
http://www.microsoft.com/downloads/details.aspx?FamilyId=C41BD61E-3060-4F71-A6B4-01FEBA508E52&displaylang=en
Wenn Du die PIAs installiert hast und dann einen Verweis auf die
Microsoft Excel 10.0 Object Library setzt, wird die Excel-PIA
automatisch benutzt und der von mir gepostete Code wird so, wie er ist,
funktionieren. Wenn Du Excel 2000 benutzt, bekommst Du keine PIAs, musst
Du also mit dem arbeiten, was VS.NET generiert. Möglicherweise muss
dann auch die using-Anweisung anders heissen, vielleicht nur
Interop.Excel, bin mir aber nicht sicher, habe im Moment nur Zugriff auf
Office 2003.
Ansonsten eben Late-Binding verwenden, ein guter Ausgangspunkt, wie man
so etwas macht, ist hier:
http://support.microsoft.com/?kbid=302902
Gruß
Arne Janning