essayer d'obtenir une référence aux feuilles de calcul (à l'aide d'Excel Interop): L'erreur est qu'elle ne peut pas la jeter: p> Impossible de lancer un objet COM de type 'System .__ ComObject' to Interface Type 'Microsoft.Office.interop.excel.worksheets'. Cette opération a échoué car l'appel à QueryInterface sur le composant COM de l'interface avec IID '{000208B1-0000-0000-C000-00000000000046}' a échoué en raison de l'erreur suivante: Aucune interface de ce type supporté (exception à partir de HRESULT: 0x80004002 (e_nointerface)) . p>
blockQuote> est ma coulée incorrecte? p> p>
6 Réponses :
Si vous traitez avec Excel 2007+, je vous suggère d'utiliser System.IO.Packaging + System.XML.LINQ (LINQ à XML) pour manipuler des feuilles Excel. C'est beaucoup plus propre et de ne pas nécessiter Excel d'être installé sur la machine que vous utilisez votre application. P>
Vous rencontrerez également moins de collisions COM (telles que ci-dessus dans votre message). P>
Si vous essayez d'éditer Excel 2003 ou plus tôt, alors malheureusement, je suis incapable de vous aider. P>
Cette question est étiquetée .NET-2.0 code>, ce qui signifie qu'il ne peut pas utiliser LINQ vers XML ou l'une des classes d'emballage. Même s'il le pouvait, cela ne répondrait toujours pas à la question.
Odd One. Selon Cette page , il est censé être de type feuilles code> pas
Feuilles de calcul code>. N'a pas testé - donnez-lui un tourbillon? P>
Selon MSDN , Vous le feriez comme ça: ou en supposant workbook.worksheets code> renvoie
microsoft.office.interop.excel.sheets code>.
Excel code> Maps sur
microsoft.office.interop.excel code> (comme apparaît de votre question) p >
Excel.Sheets sheets = (Excel.Sheets)xlWorkBook.Worksheets
Oui, votre moulage est faux. P>
D'autre part, le feuilles de calcul interface ne vous donne que des feuilles de calcul - pas des graphiques. P>
Les interfaces ne sont pas assignables les unes aux autres; Par conséquent, vous obtenez l'erreur COM. C'est déroutant - je ne suis même pas sûr s'il est possible d'obtenir une instance de la feuille de calcul code> code> interface via la PIA - mais c'est Office Interop pour ya. P>
Tant que vous utilisez la propriété _workbook.sheets code> vous donne un feuilles instance. Cette interface vous donne tous les types de feuilles, pas seulement des feuilles de calcul; Principalement, il comprend des graphiques, des feuilles de macro, etc. p>
_workbook.worksheets code> au lieu de la propriété
_workbook.sheets code>, vous devez obtenir une instance de
feuilles code> que ne renvoie que la feuille de travail code> code> malgré le fait que l'interface est capable em> de fournir d'autres types de feuilles. P>
@Zach & @joel a raison aussi, mais vous étiez le premier à la porte de départ, le chèque vert.
Même si cela est assez bien documenté, cela pourrait être l'une des questions / réponses qui rendent si utile.
Merci pour ça. "Gotcha" pour moi était que excel.workbook.worksheets code> renvoie un
Excel.heets code> objet - pas un
Excel.worksheets code> objet.
Si cela fonctionne sur un environnement mais pas un autre, vérifiez les clés de racine de la racine de classes HK / Typelib. P>
Il est possible que vous essayiez de courir pour Hkcr \ typelib {00020813-0000-0000-C000-000000000046} \ 1.6 Mais quelque chose que l'utilisateur installé a ajouté la clé: HKCR \ TYPELIB {00020813-0000-0000-C000-00000000000046} \ 1.7 provoquant l'appel interopté pour lancer une exception. P>
ou si ce n'est pas cela, cela pourrait être quelque chose dans le GAC en raison de versions différentes. p>
J'ai eu ce problème où il a fonctionné sur nos machines de développeur exécutant Windows 7 et a provoqué cette erreur sur la machine d'un utilisateur exécutant XP. P>
Cela pourrait être arrivé après et mettez à niveau vers la dernière version Office. Essayez d'aller aux programmes et aux fonctionnalités, à trouver l'installation et à la réparer ». Apparemment, il a mis à jour et / ou réinscrit la DLL interoption utilisée pour créer ces objets. P>
Cela peut avoir besoin d'être effectué en combinaison avec le correctif de registre décrit par @codesforcoffee. P>