Autor Beitrag
Webo
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 577
Erhaltene Danke: 14

Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
BeitragVerfasst: Fr 05.12.14 11:23 
Hallo zusammen,

ich sitze an einem Excel-Interop-Problem. Diverse Tools (C# und VB) greifen mithilfe der Excel-Interop Schnittstelle auf Excel-Dateien zu. Dieses funktioniert in der Regel auch einwandfrei (Standardmäßig wird Office 2007 verwendet, also Object Library 12.0). Auf einigen Rechnern kommt es zu folgender Exception:

Zitat:
Das COM-Objekt des Typs "Microsoft.Office.Interop.Excel.ApplicationClass" kann nicht in den Schnittstellentyp "Microsoft.Office.Interop.Excel._Application" umgewandelt werden. 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. (Ausnahme von HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED)).


Der Fehler tritt an folgender Stelle auf (beim Öffnen des Workbooks):
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
Excel.Workbook workbook = null;
Excel.Worksheet worksheet = null;
Excel.Application excelApp = null;
Excel.Range range = null;

try
{
    excelApp = new Excel.Application();
    workbook = excelApp.Workbooks.Open(
                                       file, // filename
                                       0// update links
                                       false// read only
                                       System.DBNull.Value,
                                       System.DBNull.Value,
                                       System.DBNull.Value,
                                       System.DBNull.Value,
                                       System.DBNull.Value,
                                       System.DBNull.Value,
                                       System.DBNull.Value,
                                       System.DBNull.Value,
                                       System.DBNull.Value,
                                       System.DBNull.Value);


Der Zugriff auf das excelApp-Objekt funkioniert im Debugger, was mich ein wenig verwundert. Anscheinend findet er die Bibliothek (denn das Objekt kann er ja erzeugen), damit arbeiten funktioniert aber nicht so richtig.

Ich habe bereits den GAC überprüft, hier scheint alles in Ordnung zu sein. Auch kann man die Software auf den entsprechenden Rechnern im VS übersetzen, sodass die Bibliothek generell gefunden wird. So richtig weiter weiß ich da nicht.

Einige Rechner lässt sich ist in dem Fall auch genau spezifizieren: Auf diesen Rechnern sind neben dem Office 2007 Paket auch noch ein Project Professional 2013 installiert - prinzipiell liegt also als Begriff "überschriebene Einstellungen/Pfade" in der Luft :?

Kennt jemand dieses Problem oder hat eine Idee woran es liegen könnte?

Viele Grüße,
Webo

_________________
Man kann nur das aus dem Ärmel schütteln, was man auch vorher reingesteckt hat.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 05.12.14 12:13 
blogs.msdn.com/b/dau...cel-application.aspx

Wobei ich von dem dortigen Vorschlag den Key zu löschen eher abraten würde. Vorraussichtlich werden dann andere Produkte (z.B Project) Probleme beim Excel Interop haben.
Ich würde die Verwendung der Interop Assemblies die Visual Studio mitliefert überdenken. Die sind unnötigerweise abhängig von der konkreten Office Version. Du must dich entscheiden ob 2007, 2010, 2013 obwohl die eigentlich (Ausnahmen,Bugs ignorieren wir gerade mal) kompatibel sind.
Entweder selber machen oder irgendein Third Party Produkt für den Interop Teil benutzen.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 05.12.14 12:26 
Hallo Webo,

ich habe es selber noch nicht benutzt, aber vllt. hilft dir NetOffice - Ein versionsunabhängiger Wrapper für MS-Office. Auf der direkten Homepage NetOffice - MS Office in .NET steht auch, daß Office 2013 unterstützt wird.
So bräuchte nicht zwingend auf allen Systemen eine einheitliche Office-Version installiert sein.
Webo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 577
Erhaltene Danke: 14

Win 7, Debian
C# (Visual Studio 2013), PHP, C, C++ (Eclipse, KDevelop)
BeitragVerfasst: Mi 08.04.15 11:32 
Hallo,

irgendwie ist mir nach meinen weiteren Versuchen völlig entgangen hier auch über das Ergebnis zu berichten :oops:

Das rumhantieren in der Registry war nur teilweise erfolgreich, da es aber nach jedem Office-Update wieder auf den defekten Ursprungszustand gesetzt wurde, ist das so oder so keine praktikable Lösung.

Mit NetOffice hingegen ist das Problem gelöst, der Wrapper sucht sich ganz offensichtlich den korrekten Pfad zu den Bibliotheken raus - auch sonst sehr angenehm, kann ich nur weiterempfehlen das Projekt :D

Viele Grüße,
Webo

_________________
Man kann nur das aus dem Ärmel schütteln, was man auch vorher reingesteckt hat.