C# et Excel 2007

Résolu
Signaler
Messages postés
13
Date d'inscription
lundi 15 octobre 2007
Statut
Membre
Dernière intervention
26 décembre 2010
-
Messages postés
448
Date d'inscription
mardi 20 septembre 2005
Statut
Membre
Dernière intervention
26 juillet 2012
-
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

Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
28
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
---------------------
Messages postés
13
Date d'inscription
lundi 15 octobre 2007
Statut
Membre
Dernière intervention
26 décembre 2010

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 ;-)
Messages postés
13
Date d'inscription
lundi 15 octobre 2007
Statut
Membre
Dernière intervention
26 décembre 2010

Personne ne sait ?
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
28
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
---------------------
Messages postés
13
Date d'inscription
lundi 15 octobre 2007
Statut
Membre
Dernière intervention
26 décembre 2010

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 :-)
Messages postés
13
Date d'inscription
lundi 15 octobre 2007
Statut
Membre
Dernière intervention
26 décembre 2010

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
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
28
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
---------------------
Messages postés
448
Date d'inscription
mardi 20 septembre 2005
Statut
Membre
Dernière intervention
26 juillet 2012
1
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)