web-dev-qa-db-fra.com

impossible de convertir l'objet COM de type 'Microsoft.Office.Interop.Excel.ApplicationClass' en 'Microsoft.Office.Interop.Excel.Application' "

C’est la première fois que je tente de capturer des données d’Excel à partir d’une application console C #.

Je reçois le message d'erreur "Impossible de convertir l'objet COM de type 'Microsoft.Office.Interop.Excel.ApplicationClass' en 'Microsoft.Office.Interop.Excel.Application'".

Ce code utilisait la «bibliothèque d'objets Microsoft Excel 12.0», et j'ai fait référence à Microsoft.Office.Interop.Excel.

Pourtant, je ne pouvais pas surmonter cette erreur - qui, à mon avis, a sa propre solution rapide.

J'ai un peu creusé ce site et suis tombé sur cette solution: Le type Interop ne peut pas être intégré

Cependant, je ne pouvais pas comprendre, donc je ne pouvais pas mettre en œuvre ce qui était suggéré comme solution.

Ma version .Net est la 4.5.

Toute aide est fortement appréciée.

Merci d'avance.

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();

    }

}
}
15
Aykut Saribiyik

S'il ne s'agit pas d'une erreur liée au code, veuillez supprimer la clé ci-dessous de la base de registre.

Pas:

Démarrer -> Exécuter -> regedit -> HKEY_CLASSES_ROOT -> TypeLib -> {00020813-0000-0000-C000-000000000046} -> 1.8/1.7 (Supprimer ceci)

Solution: Ce problème peut être résolu en supprimant une clé de registre non valide laissée de la version la plus récente d’Office. Suivez les étapes ci-dessus.

Cause: Ce problème est dû à une clé de registre restante si vous avez rétrogradé votre version de Microsoft Office d’Office 2010 à Office 2007 ou d’Office 2013 à Office 2010 ou 2007. 

Faites-moi savoir si cette solution ne vous est pas utile

22
Jayesh Goyani

Microsoft Office 365

J'utilisais Microsoft Office 365 avec Windows 10 et j'ai essayé les solutions mentionnées pour supprimer la clé de registre sans succès.

Je suis allé au panneau de configuration pour tenter de réparer la suite Office 365 .  enter image description here

J'ai choisi la réparation rapide  enter image description here

J'ai encore essayé mon programme et tout a fonctionné!

10
Alex

Je suis sûr que les réponses à cette question (et à des questions similaires) proposant de modifier le registre et de supprimer les anciennes références aux versions d'Office ne sont plus présentes sur la machine sont correctes.

Je ne fais qu'ajouter cette réponse parce que je me suis actuellement donné un coup de pied. Deux heures passées à chercher des clés dans le registre et à ne rien faire. Le dernier coup de dés était d'essayer un simple réparation sur Microsoft Office et soudain, mon erreur est partie. 

... me semble utile d'essayer une réparation avant de trop m'efforcer de modifier manuellement le registre.

5
hawbsl

Les registres 1.7 et 1.8 étaient-ils inscrits dans le registre

HKEY_CLASSES_ROOT\TypeLib\{00020813-0000-0000-C000-000000000046}\1.8
0
Janis S.

Une machine a été mise à jour vers Office 2016 64 bits et l'interface COM génère des exceptions lorsqu'elle est appelée à partir d'une application 32 bits. Il ne contenait pas d'anciennes entrées TypeLib comme celles de la réponse de Jayesh.

La comparaison des traces de ProcessMonitor sur une machine en fonctionnement avec Office 2016 a abouti à ce qui ressemble à des clés de registre sans issue dans 

HKEY_CLASSES_ROOT\Wow6432Node\TypeLib\{00024 ..

La machine en fonctionnement vérifie la clé de registre inexistante et renvoie

NOM NON TROUVÉ

La machine défaillante disposait de la clé de registre, mais levait une exception peu de temps après.

Après avoir supprimé à plusieurs reprises la clé de registre, réexécuté la trace et supprimé la clé suivante, la fonctionnalité de l'interface COM a été restaurée.

0
bds