unable to cast COM object of type 'microsoft.Office.Interop.Excel.ApplicationClass' zu 'microsoft.Office.Interop.Excel.Anwendung'"
Dies ist mein Erster Versuch zu erfassen einige Daten von excel aus in eine C# - Konsolenanwendung.
Bekomme ich die Fehlermeldung "unable to cast COM object of type 'microsoft.Office.Interop.Excel.ApplicationClass' zu 'microsoft.Office.Interop.Excel.Anwendung'".
Dieser code verwendet die "Microsoft Excel 12.0 Object Library", und ich gab den Verweis auf Microsoft.Office.Interop.Excel.
Trotzdem konnte ich nicht über diesen Fehler, die ich glaube, hat seine eigene schnelle Lösung.
Ich grub ein wenig dieser Website und stieß mit dieser Lösung:
Interop-Typ kann nicht eingebettet werden
Allerdings konnte ich nicht verstehen konnte also nicht das umzusetzen, was vorgeschlagen wurde, als eine Lösung.
Meine .Net-version 4.5.
Jede Hilfe wird sehr geschätzt.
Vielen Dank im Voraus.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using Excel = Microsoft.Office.Interop.Excel;
namespace deneme
{
class Program
{
static void Main(string[] args)
{
Excel.Application xlApp = new Excel.Application();
xlApp.Visible = true; //<-- excel application
xlApp.DisplayAlerts = false;
//Open the workbook.
Excel.Workbook wBook = xlApp.Workbooks.Open("C:\\FNN\\XLA\\fnnComTemplate.xlsx",
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
//get the sheet
Excel.Worksheet wSheet = wBook.Sheets[0];
//foreach (Excel.Worksheet sheet in wBook.Sheets) { if (sheet.Name == "templateSheet") { wSheet = sheet; } }
Excel.Range rng = wSheet.get_Range("A1");
aux = wSheet.Range["F6"].Value;
Console.WriteLine("interop result:" + aux);
Console.ReadLine();
}
}
}
InformationsquelleAutor der Frage Aykut Saribiyik | 2015-01-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn das nicht ein code-bezogene Fehler als entfernen Sie bitte die unten angegebenen Schlüssel aus der Registrierung.
Schritte:
Start--> Ausführen --> regedit --> HKEY_CLASSES_ROOT-->TypeLib-->{00020813-0000-0000-C000-000000000046} --> 1.8/1.7 (Löschen)
Lösung:
Dieses Problem kann gelöst werden, indem der löschen ungültige registry-Schlüssel übrig, von der höheren version von Office. Befolgen Sie die obigen Schritte.
Verursachen:
Dieses Problem wird verursacht, durch die Sie Links über registry-key, wenn Sie haben herabgestuft, die Ihrer version von Microsoft Office von Office 2010 auf Office 2007 oder Office 2013, Office 2010 oder 2007.
Lassen Sie mich wissen, wenn diese Lösung nicht geholfen, Sie
InformationsquelleAutor der Antwort Jayesh Goyani
Ich bin sicher, die Antworten auf diese Frage (und ähnliche Fragen) vorschlagen, Bearbeiten der Registrierung und entfernen von alten Verweise auf Office-Versionen nicht mehr auf der Maschine korrekt sind.
Bin ich nur hinzufügen, dass diese Antwort, denn momentan bin ich munter mich. Zwei Stunden damit verbracht, Jagd-Schlüssel in der registry und immer nirgends. Im letzten Wurf war zu versuchen, eine einfache Reparatur auf Microsoft Office und plötzlich, mein Fehler ist Weg.
... mir scheint es einen Versuch Wert, eine Reparatur, bevor man zu tief in die Registrierung manuell Bearbeiten.
InformationsquelleAutor der Antwort hawbsl
Microsoft Office 365
Ich war mit Microsoft Office 365 mit Windows 10 und versucht, die erwähnten Lösungen um den Registrierungsschlüssel zu entfernen, ohne Erfolg.
Ging ich in die Systemsteuerung in einem Versuch zum reparieren der Office-365-suite.
Wählte ich die schnelle Reparatur
Versucht mein Programm wieder und alles funktionierte!
InformationsquelleAutor der Antwort Alex
Einer Maschine hatte, wurde aktualisiert, um Office 2016 64-bit-und die COM-Schnittstelle wurde das auslösen von Ausnahmen bei der von der 32-bit-Anwendung. Es hatte keine alten TypeLib Einträge wie die in Jayesh Antwort.
Vergleich ProcessMonitor Spuren zu einer funktionierenden Maschine mit Office 2016 führte zu dem, was sehen aus wie dead end registry-Schlüssel in
Den arbeiten der Maschine zu überprüfen wäre für den nicht vorhandenen registry-Schlüssel und die Rückgabe
Die fehlerhafte Maschine hatte die registry-Schlüssel, aber dann würde eine exception werfen, kurz danach.
Immer wieder nach dem löschen der registry-Schlüssel, erneutes ausführen der Ablaufverfolgung löschen der nächsten Ermangelung der Schlüssel, den COM-interface-Funktionalität wurde wiederhergestellt.
InformationsquelleAutor der Antwort bds
Hatten jeweils 1,7 und 1,8 in der registry.
Gelöst durch das entfernen:
InformationsquelleAutor der Antwort Janis S.
Mit dem exakt gleichen code, den ich habe das gleiche problem bei einem laptop, wenn alles geklappt hat auf den anderen. Ich habe versucht, verschiedene Lösungen gefunden, die hier und da im internet, aber das, was schließlich arbeitete, war die explizite definition der Verwendung von nicht 32-bit-version der Bibliothek. Dazu in visual studio, ich hatte zu ticken und dann deaktivieren Sie das Kontrollkästchen "Lieber 32-bit" in der build-Abschnitt der Projekt-Konfiguration, die Hinzugefügt
<Prefer32Bit>false</Prefer32Bit>
im .csproj-Datei.InformationsquelleAutor der Antwort Stathis Agrapidis