C# et Excel 2007 [Résolu]

Messages postés
13
Date d'inscription
lundi 15 octobre 2007
Dernière intervention
26 décembre 2010
- - Dernière réponse : cudenetf
Messages postés
449
Date d'inscription
mardi 20 septembre 2005
Dernière intervention
26 juillet 2012
- 10 juin 2010 à 15:06
Bonjour à tous,

Bien que ce problème ait déjà été abordé sur ce forum, je n'ai pas trouvé la soluce à mon problème et je me permets donc de créer ce topic.

Je suis entrain de développer un module pour une appli C# qui exporte des données vers un fichier Excel. Rien de bien méchant me direz-vous, sauf que dès que je clique sur le bouton me servant à ouvrir mon fichier excel, j'ai ce joli message d'erreur : Exception de HRESULT : 0x800A03EC
Après de (longues) recherches sur le Net, je ne comprends pas la raison de cette erreur.

Le code qui provoque l'erreur :
private void butComptable_Click(object sender, EventArgs e)
        {
            Microsoft.Office.Interop.Excel.Application _xlApp = new Microsoft.Office.Interop.Excel.Application();
            object M = null;
            _xlApp.Workbooks.Open("Sortie_Comptable.xls", M, false, M, M, M, M, M, M, M, M, M, M, M, M);
       }
J'ai bien entendu rajouté : using Microsoft.Office.Interop.Excel; après ajouté la référence Microsoft Excel 12.0 Object Library au projet. Rien à faire

Pour info, je suis sous Win XP SP3, je bosse avec Visual C# 2008 Express Edition et Excel 2007 (l'extension de ce dernier peut être .xls ou .xlsx, peu m'importe, du moment que quelqu'un peut m'expliquer comment résoudre le problème).

Merci énormément
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
3
Merci
Re,

Concernant la version de ta librarie Microsoft.Office.Interop.Excel, tu peux effectivement prendre la version 12.0.

Pour l'histoire du "Missing.Value", j'ai oublié de te signaler qu'il faut ajouter pour cela le namespace: using System.Reflection;

A re-tester ^^

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de billou_13
Messages postés
13
Date d'inscription
lundi 15 octobre 2007
Dernière intervention
26 décembre 2010
3
Merci
Ok c'est bon j'ai trouvé la soluce

Premièrement, dans les propriétés de la référence Microsoft.Office.Interop.Excel, j'ai mis à true la propriété "Copie Locale". En effet, la dll n'apparaissait même pas dans mes sources.
Je ne sais pas si ça a eu beaucoup d'effet ; ce qui est sur, c'est que ça : http://support.microsoft.com/kb/306683 ça a marché... Enfin, jusqu'a la ligne RunMacro, qui n'est pas reconnue par mon appli.
Ouf, une épine dans le pied enlevée.

Bon la macro en VBA, c'est juste "pour faire beau", ça devrait être fait rapidement. Me reste plus qu'a envoyer mes données générées par l'appli C# dans le fichier Excel. J'ai pas encore vraiment cherché, mais à première vue, je sais pas trop comment je vais m'y prendre...

En tout cas, merci de ton aide billou_13, et si jamais tu sais envoyer les données vers le fichier .xls, je suis preneur ;-)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de Ikki2504
Messages postés
13
Date d'inscription
lundi 15 octobre 2007
Dernière intervention
26 décembre 2010
0
Merci
Personne ne sait ?
Commenter la réponse de Ikki2504
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
0
Merci
Bonjour,

Je soupçonne le object M= null de jouer un rôle dans ton erreur. Essaies plutôt ceci:

_app = new Microsoft.Office.Interop.Excel.Application();
_app.Visible = false;//A toi de voir
_app.DisplayAlerts = false;//A toi de voir
_book = _app.Workbooks.Open(path, Missing.Value, Missing.Value,
                     Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                     Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                     Missing.Value, Missing.Value, Missing.Value, Missing.Value);

Avec _app et _book en tant que membres de ta classe.
private Microsoft.Office.Interop.Excel.Application _app;
private Workbook _book;

Et le using:
using Microsoft.Office.Interop.Excel;//En ayant ajouter la référence à Microsoft.Office.Interop.Excel version 11.0.0.0 (Add references\onglet NET)

Bonne journée,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Commenter la réponse de billou_13
Messages postés
13
Date d'inscription
lundi 15 octobre 2007
Dernière intervention
26 décembre 2010
0
Merci
Bonjour et merci de t'être intéressé à mon problème.
Malheureusement, ça ne marche pas, mais d'autres problèmes pourraient en être la cause :
Premièrement, la référence que tu me donnes n'existe pas sur mon poste, je ne dispose que de Microsoft.Office.Interop.Excel version 12.0 Object Library (qui se trouve dans l'onglet COM.) Aucune des références de l'onglet NET n'a "Excel" dans son nom (je suis sous Office 2007)
Deuxièmement, suite au refus du compilateur de compiler ton code, je l'ai modifié en ceci :

Microsoft.Office.Interop.Excel.Workbook _book =
     new Microsoft.Office.Interop.Excel.Workbook();
Microsoft.Office.Interop.Excel.Application _app =
     new Microsoft.Office.Interop.Excel.Application();
_book = _app.Workbooks.Open("Sortie_Comptable.xls", null, false, null, null, null, null, null, null, null, null, null, null, null, null);
           
Sachant que Missing.Value n'est pas reconnu et provoque une erreur à la compil' :
Ce code provoque l'erreur suivante : La récupération de la fabrique de classe COM pour le composant avec le CLSID {00020819-0000-0000-C000-000000000046}a échoué en raison de l'erreur suivante : 80040154.

Serait-ce à cause d'un problème de référence ? Comment le résoudre ?
Merci d'avance :-)
Commenter la réponse de Ikki2504
Messages postés
13
Date d'inscription
lundi 15 octobre 2007
Dernière intervention
26 décembre 2010
0
Merci
Effectivement, avec ce namespace, Missing.Value est bien reconnue :)

En revanche, le code :
Microsoft.Office.Interop.Excel.Workbook _book = new Microsoft.Office.Interop.Excel.Workbook();
Microsoft.Office.Interop.Excel.Application _app = new Microsoft.Office.Interop.Excel.Application();
_app.Visible = true;
_book = _app.Workbooks.Open("Sortie_Comptable", Missing.Value, false, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

provoque toujours l'erreur citée à mon message précédent sur la dernière ligne de code. Il semble que ça vienne de Open() mais je vois toujours pas où est le problème. Ce code est similaire à d'autres trouvés sur le Net, qui eux, fonctionnent
Commenter la réponse de Ikki2504
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
0
Merci
Bonjour,

Bizarre, bizarre cette histoire de "Copie Locale", je n'ai pas eu à le faire.
Concernant l'envoie de données, je ne me souviens pas trop comment ça se passe mais tu devrais trouver pas mal de sources sur le net.
Personnellement, je n'ai eu que l'appel de macros à faire de mon côté.

Bon courage et bonne journée,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Commenter la réponse de billou_13
Messages postés
449
Date d'inscription
mardi 20 septembre 2005
Dernière intervention
26 juillet 2012
0
Merci
J'ai une question qui est peut etre bete mais ma commande bloque a la 1ere ligne :
Microsoft.Office.Interop.Excel.Application _app = new Microsoft.Office.Interop.Excel.Application();

j'ai l"erreur System.Runtime.InteropServices.COMException: La récupération de la fabrique de classe COM pour le composant avec le CLSID {00024500-0000-0000-C000-000000000046} a échoué en raison de l'erreur suivante : 80040154.

j'ai pas excel sur mon ordinateur... est ce bloquant , ne puis -je pas manipuler les fichiers excel si je ne l'ai pas ? ...
je veux modifier (remplir les cases d'un fichier excel dans lequel quelqu'un a fait un tableau, automatiquement a partir d'un programme et les visualiser a partir de open office)
Commenter la réponse de cudenetf

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.