IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Problème de récupération d'une valeur Excel avec C#


Sujet :

C#

  1. #1
    Membre habitué Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Points : 164
    Points
    164
    Par défaut Problème de récupération d'une valeur Excel avec C#
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    private void button1_Click(object sender, EventArgs e)
            {            
                Open.ShowDialog();
                if (Open.FileName!=null)
                {
                    _Application Excel = new ApplicationClass();
                    _Workbook Classeur = Excel.Workbooks.Open(Open.FileName, Type.Missing, Type.Missing, Type.Missing,
                                                                    Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                                                                    Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                                                                    Type.Missing, Type.Missing, Type.Missing);
                    Excel.Visible = true;
                    _Worksheet Feuille = (_Worksheet)Classeur.Sheets.Item[1];
     
                    textBox1.Text = Convert.ToString(Feuille.Range["C", 3].Value);
                    //MessageBox.Show(Convert.ToString(Feuille.Range["C", 3].Value), "Erreur", MessageBoxButtons.OK);
                    Excel.Quit();
                }
    Je tente de récupérer une valeur a partir d'une cellule excel en utilisant le code ci-dessus et je rencontre le problème suivant :

    System.Runtime.InteropServices.COMException*: 'Exception de HRESULT : 0x800A03EC'

    C'est la première fois que sa m'arrive je ne sais pas quoi faire.

    Merci.

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Issus de la documentation de Microsoft :
    This is a primary interface in a COM coclass that is required by managed code for interoperability with the corresponding COM object. Use this primary interface only when the method you want to use shares the same name as an event of the COM object; in this case, cast to this interface to call the method, and cast to the latest events interface to connect to the event. Otherwise, use the .NET interface that is derived from the COM coclass to access methods, properties, and events of the COM object. For more information about the COM object, see Application
    En d'autres termes, tu n'utilise pas les bons objets dans ton contexte.
    Il faut utiliser les objets sans underscore.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Application excelApp= new Application();
    try
    {
     
            Workbook doc = excelApp.Workbooks.Open(filename, missing, missing, missing,
                                                            missing, missing, missing, missing, missing, missing,
                                                            missing, missing, missing, missing, missing);
     
           // Do something
     
     
            doc.Close(saveChanges, missing, missing);
     
            Log("Fermeture d'Excel");
            excelApp.Quit();
    }
    finally
    {
        Marshal.ReleaseComObject(excelApp);
        GC.Collect();
        GC.WaitForPendingFinalizers();
    }

  3. #3
    Membre habitué Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Points : 164
    Points
    164
    Par défaut
    Bonsoir,

    le programme plante uniquement a la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    textBox1.Text = Convert.ToString(Feuille.Range["C", 3].Value);
    le reste fonctionne parfaitement bien.

    Merci

  4. #4
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    Je ne sais pas si tu as absolument besoin de l'application Excel (par exemple si tu fais un add-in Office), mais s'il s'agit juste de manipuler des fichiers tu peux passer par la bibliothèque EPPlus qui sera plus simple d'utilisation.

  5. #5
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Citation Envoyé par Hamza Voir le message
    Bonsoir,

    le programme plante uniquement a la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    textBox1.Text = Convert.ToString(Feuille.Range["C", 3].Value);
    le reste fonctionne parfaitement bien.

    Merci
    Prends au moins le temps de lire la doc !
    Range sélectionne une plage de cellules et s'utilise en fournissant les coordonnées de début et de fin (Sheet.Range["A1", "C3"])
    Si veux sélectionner une seule cellule il faut fournir deux fois la coordonnée de ta cellule : Sheet.Range["C3", "C3"]
    Ou alors utiliser Cells : Sheet.Cells[3, "C"] ou Sheet.Cells[3,3]

    Citation Envoyé par Noxen Voir le message
    Je ne sais pas si tu as absolument besoin de l'application Excel (par exemple si tu fais un add-in Office), mais s'il s'agit juste de manipuler des fichiers tu peux passer par la bibliothèque EPPlus qui sera plus simple d'utilisation.
    Tout dépend de ce qu'on entends par plus simple.
    Pour ceux qui ont fait du VBA, l'interrop est ce qu'il y a de plus simple (même si ce n'est visiblement pas le cas de Hamza)
    En plus, la licence LGPL peut être un frein.
    Et dans ce cas, il vaut mieux utiliser ClosedXml (qui encapsule et simplifie OpenXML), ou directement OpenXML.

  6. #6
    Membre habitué Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Points : 164
    Points
    164
    Par défaut
    Bonsoir et merci de vos réponse,

    avec la code ci-dessous sa fonctionne tres bien merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    label1.Text = Convert.ToString(Feuille.Range["C3", "C3"].Value);
    mais quand j'utilise le code ci-dessous sa m'affiche dans lechamps : System.__ComObject
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    textBox1.Text = Convert.ToString(Feuille.Cells.Item[3, 3]);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    textBox1.Text = Convert.ToString(Feuille.Cells.Item[3, 3].ToString());
    idem pour le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    textBox1.Text = Convert.ToString(Feuille.Cells[3, 3]);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    textBox1.Text = Convert.ToString(Feuille.Cells[3, 3].ToString());
    Merci

  7. #7
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Range["C3", "C3"] et Cells[3, 3] renvoient exactement la même chose, c'est a dire un Objet Range contenant uniquement la cellule C3.
    Il faut donc aussi passer par Value pour avoir la valeur.

    Ces deux lignes font rigoureusement la même chose :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    textBox1.Text = Convert.ToString(Feuille.Range["C3", "C3"].Value);
    textBox1.Text = Convert.ToString(Feuille.Cells.Item[3, 3].Value);

    PS : N'oublie pas de cliquer sur le bouton "Résolu"

  8. #8
    Membre habitué Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Points : 164
    Points
    164
    Par défaut
    Bonjour,

    Dsl mais le .value n'existe pas en Feuille.cells.item[3,3].Value

    Avec le range sa marche très bien.

    Meric a vous

  9. #9
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Et pourtant...
    Extraits de la doc Microsoft
    Worksheet.Range[Object, Object] Property
    Espace de noms: Microsoft.Office.Interop.Excel
    Assembly: Microsoft.Office.Interop.Excel.dll
    Renvoie un Range objet qui représente une cellule ou une plage de cellules.
    et
    Worksheet.Cells Property
    Espace de noms: Microsoft.Office.Interop.Excel
    Assembly: Microsoft.Office.Interop.Excel.dll
    Renvoie un Range object qui représente toutes les cellules de la feuille de calcul (pas seulement les cellules qui sont actuellement en cours d’utilisation). En lecture seule.
    Tu dois utiliser une vieille version dans laquelle un cast est nécessaire.
    Ceci devrait fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Convert.ToString((Feuille.Cells.Item[3, 3] as Range).Value);

  10. #10
    Membre habitué Avatar de Hamza
    Homme Profil pro
    Data Analyst
    Inscrit en
    Avril 2005
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Data Analyst
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2005
    Messages : 295
    Points : 164
    Points
    164
    Par défaut
    Bonjour,

    Effectivement sa marche !!

    merci pour tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème pour rechercher dans une liste excel avec vba
    Par hop51 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/03/2013, 19h00
  2. [SAX] Problème de récupération d'une valeur dans un attribut d'une balise
    Par Antheadousa dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 10/01/2012, 23h29
  3. [CR 10] Problème de récupération d'une valeur de sous-état
    Par lolo6413 dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 12/09/2010, 11h17
  4. Problème de récupération d'une valeur
    Par EternelF dans le forum VB.NET
    Réponses: 4
    Dernier message: 15/06/2009, 13h20
  5. [MySQL] problème de récupération d'une valeur
    Par Larffas dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/10/2007, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo