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 :

Lier un Chart à des colonnes d'une feuille Excel


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Lier un Chart à des colonnes d'une feuille Excel
    Bonjour,

    Je souhaite faire une application qui lit dans un fichier Excel des températures en fonction du temps et qui affiche sur un chart l'évolution de cette température.

    Mais je ne sais pas qu'elle composant utiliser pour faire le lien entre le fichier et le chart.
    Je pensait aux composants binding mais je suis un peu perdu et ne sais pas trop où chercher.

    La première colonne de ma feuille excel donne la date de chaque paquet d'échantillon. On retrouve une date toutes les 10 lignes.
    Puis il y a une colonne par capteur.
    Ensuite les données envoyées par le capteur sont sur 10 lignes (dont la température).
    Je voudrait donc faire des groupes de capteur, puis faire pour chaque date faire une moyenne entre les températures de chaque capteur du groupe.
    Cette série de données doit être ainsi représenté sur le graph en fonction des dates.

    Je souhaiterais, mais je ne sais pas si c'est possible que tout cela soit interactif ; pour chaque ajout d'un nouveau paquet de données (donc d'une nouvelle température) actualiser le graphique.

    Merci de vôtre aide.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Points : 552
    Points
    552
    Par défaut
    j'ai pas tout pigé (j ai lu en travers)

    - tu peux faire des chart natif en Excel je crois (à partir de 2007), donc touy gérer sans C# ?

    FarPoint est un composant Excel Like payant qui te permet de réaliser ce genre de chose (lecture d'un fichier excel, affichage en C# + gestion des charts) ! en version 5.0

    - pour les charts en C# je crois que les composant natif sont pas terrible...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Tout d'abord merci de ta réponse !

    En faite mes données sont sur la feuille excel, et je voudrais que le graphique soit sur une windows form.

    Tu me dis qu'il est possible de créer un chart Excel et de l'importer dans une windows form ? celui ci sera -'il toujours dynamique ; dans le cas d'une modification/ ajout de données de la feuille excel ?

    Sinon peux tu m'en dire plus sur FarPoint ? Dans les exemples que j'ai vu il affiche seulement une feuille de calcul dans une windows form, je n'ai pas vu de graphique.

    Le composant chart de visual studio en C# ne pourrait pas m'aider ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Points : 552
    Points
    552
    Par défaut
    Je ne connais pas bien les composant gratuit chart... désolé


    concernant farpoint spread : pour les charts :
    http://www.fpoint.com/netproducts/sp.../charting.aspx


    Pour lire un fichier excel, l'avantage d'utiliser farpoint (ou Aspose Cells) c est qu il n y a pas besoin d avoir excel d'installé sur le poste.
    C'est egalement plus simple que d'utiliser les office automation...
    le soucis c'est qu'il faut payer !

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Ah oui, c'est quand même cher !

    Et sinon, ça fonctionne comment les office automation ?

    Si quelqu’un connait un moyen avec le composant chart gratuit de visual je veux bien de l'aide !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Points : 552
    Points
    552
    Par défaut
    Ba y a ça :
    http://www.microsoft.com/en-us/downl....aspx?id=14422

    parait il que c est pas terrible !? // quelqu'un a un feedback ?

    Ce que tu souhaites faire est peut être natif à Excel (je pense qu on peut faire des chart sous excel...)
    Si c est le cas, que tu souhaites pas payer, et en faire le moins en utilisant l excel installé sur le poste... alors utilise Excel (quitte à l’intégrer dans une winForm dans ton application)

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    Salut artoon,

    Si j'ai bien compris, tu souhaites générer un graphique sur une WinForm à partir des données d'un fichier Excel. C'est plutôt simple à faire, il faut tout d'abord récupérer les données de ton fichier Excel puis stocker ses informations sous une DataTable par exemple.

    Ensuite, il faut que tu utilises l'espace de noms "System.Windows.Forms.DataVisualization.Charting" qui te permettra de créer un Chart contenant tous les membres dont tu auras besoin pour générer le graphique. Cet objet est notamment composé de Series (correspondant à une collection de Point) et de ChartAreas (les zone de dessin).

    Je te conseille de regarder la doc officielle (ici) ainsi que ce cours très bien expliqué pour l'introduction aux Charts (ici).
    A+

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Salut,

    Je ne peut pas utiliser le composant DataTable, il est grisé. Comment faut-il faire ?

    Je ne le connait pas du tout, comment s'utilise t-il ?

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Points : 26
    Points
    26
    Par défaut
    La doc est ton ami pour apprendre à utiliser un objet que tu ne connais pas (regarde ici).

    C'est très simple, un DataTable est composé de Rows et de Columns, tu pourras utiliser la méthode Rows.Add() / Columns.Add() pour ces 2 composants qui te faciliteront la vie (ressemblant aux List<>).
    Je te conseillerais dans un premier temps de définir tes colonnes et ensuite d'utiliser une boucle for (ou foreach) pour ajouter tes lignes que tu auras récupérer au préalable à partir de ton fichier Excel. Tu n'auras alors plus qu'à déterminer la source du DataGridView:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myDataGridView.DataSource = myDataTable;

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Ok, merci à tous les deux, mais j'ai encore un problème. je pense avoir codé tout le code nécessaire mais j'ai des erreurs à l’exécution de la fonction remplir_datatable et j'ai bien du mal à les corrriger.
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    --------------------------------------------------------------------------------------------
    class mesure
        {
            public List<groupe_capteurs> liste_groupe_capteur;
            public string nom_mesure;
            public System.Windows.Forms.DataVisualization.Charting.Chart chart;
            public System.Data.DataTable datatable;
            public Worksheet worksheet;
     
            public mesure(List<groupe_capteurs> lgc, string n, System.Windows.Forms.DataVisualization.Charting.Chart c, Worksheet w)
            {
                liste_groupe_capteur = lgc;
                nom_mesure = n;
                chart = c;
                datatable = new System.Data.DataTable();
                chart.DataSource = datatable;
                worksheet = w;
            }
     
            public void remplir_datatable()
            {
                DataRow workRow;
                float somme;
     
     
                for (int indice_ligne = 0; indice_ligne < 10; indice_ligne++ )
                {
                    workRow = datatable.NewRow();
                    workRow[0] = worksheet.Cells[indice_ligne, 0];
     
                    foreach (groupe_capteurs gc in liste_groupe_capteur)
                    {
                        somme = 0;
                        datatable.Columns.Add(gc.data_colonne);
                        chart.Series[gc.numero].YValueMembers = gc.numero.ToString();
                        foreach (capteur c in gc.list_capteur)
                        {
                            somme += worksheet.Cells[indice_ligne, c.num_colonne];
                        }
                        workRow[gc.data_colonne] = somme / gc.list_capteur.Capacity;
                    }
                    datatable.Rows.Add(workRow);
                }
                chart.DataBind();
            }
        }
    --------------------------------------------------------------------------------------------
    class groupe_capteurs
        {
            public List<capteur> list_capteur;
            public int numero;
            public DataColumn data_colonne;
        }
    ------------------------------------------------------------------------------------------
    class capteur
        {
            public int num_colonne;
            public string addresse;
        }
    -------------------------------------------------------------------------------------------
    et le code principal

    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
    23
    24
    25
    26
    ExlObj = new Microsoft.Office.Interop.Excel.Application();
     
                if (ExlObj == null)
                {
                    MessageBox.Show("ERROR: EXCEL couldn't be started!");
                    System.Windows.Forms.Application.Exit();
                }
                ExlObj.Visible = true;
     
                theWorkbook = ExlObj.Workbooks.Open(@"C:\Users\monpc\Desktop\excel_chart\Classeur1.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true);
     
     
                sheets = theWorkbook.Worksheets;
                worksheet = (Worksheet)sheets.get_Item(1);
     
     
                capteur cap1 = new capteur(1, "adresse 1");
                capteur cap2 = new capteur(2, "adresse 2");
                List<capteur> list_cap=new List<capteur>();
                list_cap.Add(cap1);
                list_cap.Add(cap2);
                groupe_capteurs group_cap = new groupe_capteurs(list_cap, 1);
                List<groupe_capteurs> list_group_cap = new List<groupe_capteurs>();
                list_group_cap.Add(group_cap);
                mesure mesure = new mesure (list_group_cap, "temperature", chart1, worksheet);
                mesure.remplir_datatable();
    Voyez vous ce qui ne vas pas ?
    Merci d'avance !

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

Discussions similaires

  1. [XL-2010] Copier Coller des colonnes d'une feuille à une autre en fonction d'un critère
    Par Groggy78 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/07/2014, 19h12
  2. Réponses: 9
    Dernier message: 07/10/2010, 17h49
  3. [VBA-Excel] copier plusieurs fois une colonne dans une feuille Excel
    Par ash_rmy dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 09/08/2006, 18h43
  4. copier certaines colonnes d'une feuille Excel
    Par emeraudes dans le forum Access
    Réponses: 7
    Dernier message: 12/04/2006, 16h57
  5. [CR]Importer des données d'une feuille excel
    Par rolan dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 17/12/2004, 22h32

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