C# et Excel 2007

Résolu
Ikki2504 Messages postés 13 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 26 décembre 2010 - 18 janv. 2009 à 18:28
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre 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

8 réponses

billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
19 janv. 2009 à 13:59
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
---------------------
3
Ikki2504 Messages postés 13 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 26 décembre 2010
19 janv. 2009 à 23:05
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 ;-)
3
Ikki2504 Messages postés 13 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 26 décembre 2010
19 janv. 2009 à 09:49
Personne ne sait ?
0
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
19 janv. 2009 à 10:08
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
---------------------
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ikki2504 Messages postés 13 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 26 décembre 2010
19 janv. 2009 à 13:53
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 :-)
0
Ikki2504 Messages postés 13 Date d'inscription lundi 15 octobre 2007 Statut Membre Dernière intervention 26 décembre 2010
19 janv. 2009 à 22:03
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
0
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
20 janv. 2009 à 09:29
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
---------------------
0
cudenetf Messages postés 448 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 26 juillet 2012 2
10 juin 2010 à 15:06
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)
0
Rejoignez-nous