2008-11-03 8 views
0

Un exemple sur lequel je travaille appelle CoCreateInstance pour la feuille de calcul Excel Microsoft_Office. Il échoue avec HRESULT de 0x80040514 ("Classe non enregistrée"). D'autres classes Excel (Excel.Application) sont enregistrées sur le système, mais pas pour la feuille de travail ... Est-il possible d'enregistrer cette classe?CoCreateInstance échoue pour la feuille de calcul Excel Microsoft_Office. 0x80040514 "Classe non enregistrée"

Mise à jour: J'utilise le projet exemple DSOFramer de Microsoft. Il essaie d'abord de lier en utilisant une classe IMoniker. Si cela échoue, il appelle CoCreateInstance pour le clsid. Cela peut fonctionner pour d'autres objets MS Office, mais lorsqu'il s'agit d'Excel, la classe est pour la feuille de calcul. J'ai modifié l'exemple à CoCreateInstance _Application, puis obtenu les classeurs, puis appelé Workbooks :: Open pour le fichier cible, qui renvoie un objet Worksheet. J'ai ensuite renvoyé ce pointeur et fusionné avec l'exemple de chemin de code d'origine. Tout fonctionne maintenant.

Répondre

1

Je crois que vous pouvez avoir une installation bâclée. J'ai trouvé que lorsque mes progIds sont corrompus comme ça si je répare l'installation, elle enregistrera cette classe.

Bien que je vous pose la question suivante, pourquoi essayez-vous de créer un objet feuille? On dirait que vous pouvez en obtenir un à partir d'un objet Workbook. En fait, je pense que c'est probablement ce que vous aurez à faire de toute façon.

+0

C'est en fait ce que j'ai fini par faire hier soir. Le projet exemple DSOFramer de Microsoft appelle CoCreateInstance pour le clsid lorsque la liaison IMoniker échoue. J'ai modifié l'exemple à CoCreateInstance _Application, puis navigué les objets pour obtenir la feuille de calcul, puis fusionné avec le code d'origine. Merci! – Steve

Questions connexes