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#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 à 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 ?

  3. #3
    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;

  4. #4
    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