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

Composants VCL Delphi Discussion :

Graph sous Excel et series en trop!


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 108
    Par défaut Graph sous Excel et series en trop!
    Bonjour,

    Je cherche a piloter Excel depuis Delphi par EOL. J'ai définit une procedure qui crée un graph en fonction d'arguments passés en paramètres. Je crée deux series superposées dans le code mais lorsque j'ouvre ma feuille de graphique avec Excel, j'ai plusieures series au lieux de deux!!! Et je m'interoge sur l'origine des series supplementaires...

    Voici le code:
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    Procedure TForm1.CreerFichierXLS(DataMTO: TDataMTO; DataHoule: TDataHoule);
    var
      Classeur: _WorkBook;
      FeuilleActive: _WorkSheet;
      Graph: _Chart;
      CollSerie : SeriesCollection;
      RangeX, RangeY, Range: ExcelRange;
      Axe: Axis;
      serie: ExcelXP.Series;
      i, j: integer;
     
    Procedure TraceGraphExcel(Classeur:_WorkBook; RangeX, RangeY, RangeYY: ExcelRange; TitrePage, TitreGraph, TitreAxeDroit, TitreAxeGauche: String);overload;
    var
      FeuilleActive: _WorkSheet;
      Graph: _Chart;
      CollSerie : SeriesCollection;
      Axe: Axis;
      serie: ExcelXP.Series;
      i, j: integer;
    begin
      //Ajout d'une feuille au classeur
      Graph:=Classeur.Sheets.Add(emptyParam, emptyParam, 1, xlChart, 0) as _Chart;
      Graph.Name:=TitrePage;
      //creation d'un chart de type ligneXY
      Graph.ChartType:=xlXYScatter;
      //affectation au graph des valeurs de vitesse
      CollSerie:=Graph.SeriesCollection(EmptyParam,0) as SeriesCollection;
      //Première serie
      Serie:=CollSerie.NewSeries;
      Serie.FormulaLocal:='=SERIE(;'+rangeX.Address[true,true,xlA1,True,false]
        +';'+rangeY.Address[true,true,xlA1,True,false]+';1)';
      Serie.ChartType:=xlXYScatter;
      Serie.Border.Color:=RGB(0,0,255);
      Serie.Border.Weight:=3;
      Serie.MarkerStyle:=0;
      //Seconde serie
      Serie:=CollSerie.NewSeries;
      Serie.FormulaLocal:='=SERIE(;'+rangeX.Address[true,true,xlA1,True,false]
        +';'+rangeYY.Address[true,true,xlA1,True,false]+';1)';
      Serie.ChartType:=xlXYScatter;
      Serie.AxisGroup:=xlSecondary;
      Serie.MarkerStyle:=8;
      Serie.Border.LineStyle:=0;
      Serie.MarkerForegroundColor:=RGB(255,0,0);
      Serie.MarkerBackgroundColor:=RGB(255,0,0);
      //Mise en forme 
      //[...]
    end;
     
    begin
      //Demarrage de Excel
      ExcelApplication1.connect;
      //Ouverture du classeur
      ExcelApplication1.SheetsInNewWorkbook[0]:=1;
      Classeur:=ExcelApplication1.Workbooks.Add(emptyParam, 0);
      //cache Excel
      ExcelApplication1.Visible[0]:=false;
      //Activation de la première feuille
      FeuilleActive:= Classeur.Worksheets[1] as _WorkSheet;
      FeuilleActive.Name:='Mesures';
      //Definition des labels des colonnes et remplissage des cellules
      //[...]
      //=========================================Creation du graphique du vent moyen
      //Selection des valeurs pour construire le graph
      RangeX:=FeuilleActive.Range[FeuilleActive.Cells.item[2, 1], FeuilleActive.Cells.item[DataMTO.NbMesures, 1]];
      RangeY:=FeuilleActive.Range[FeuilleActive.Cells.item[2, 2], FeuilleActive.Cells.item[DataMTO.NbMesures, 2]];
      Range:=FeuilleActive.Range[FeuilleActive.Cells.item[2, 3], FeuilleActive.Cells.item[DataMTO.NbMesures, 3]];
      TraceGraphExcel(Classeur, RangeX, Range, RangeY, 'Vent_Moyen', 'Vent moyen', 'Vitesse ('+ DataMTO.UniteVent +')', 'Direction (°)');
      //==========================================Creation du graphique du vent maxi
      //Selection des valeurs pour construire le graph
      RangeY:=FeuilleActive.Range[FeuilleActive.Cells.item[2, 4], FeuilleActive.Cells.item[DataMTO.NbMesures, 4]];
      Range:=FeuilleActive.Range[FeuilleActive.Cells.item[2, 5], FeuilleActive.Cells.item[DataMTO.NbMesures, 5]];
      TraceGraphExcel(Classeur, RangeX, Range, RangeY, 'Vent_Maximal', 'Vent maximal', 'Vitesse ('+ DataMTO.UniteVent +')', 'Direction (°)');
      //========================================Creation du graphique de l'agitation
      //Selection des valeurs pour construire le graph
      RangeY:=FeuilleActive.Range[FeuilleActive.Cells.item[2, 16], FeuilleActive.Cells.item[DataMTO.NbMesures, 16]];
      Range:=FeuilleActive.Range[FeuilleActive.Cells.item[2, 17], FeuilleActive.Cells.item[DataMTO.NbMesures, 17]];
      //Control de progession
      Form3.ProgressBar1.Position:=round(13/(13+Nbcouches)*20+80);
      TraceGraphExcel(Classeur, RangeX, RangeY, Range, 'Agitation', 'Agitation', 'Hauteur ('+DataHoule.UniteHoule+')', 'Direction (°)');
     
    //Sauver la chose
      Classeur.SaveAs(copy(OpenDialog1.FileName, 0,Length(OpenDialog1.FileName)-3)+'XLS',EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
      xlNoChange,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);
      //rend Excel visible
      ExcelApplication1.Visible[0]:=true;
    end;
    Le premier graph possède 3 series (celle en trop ne possède pas de valeurs X et y a "=Mesures!$A$1" pour valeurs Y !!!!)
    Le second en possède deux (Ca c'est ce que je veux comme je veux)
    Le dernier en possède 4 ( ) (j'ai bien les series avec les valeurs Y des colonnes P et Q comme demandé, mais j'ai aussi deux series avec les valeurs des colonnes D et E)

    Je ne comprend pas comment c'est possible... J'ai beau tourner le truc dans tous les sens, je ne voit pas pourquoi. Quelq'un peut m'aider?
    Merci!

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 343
    Par défaut
    Bonjour,
    Juste une idée, est-ce que tu as validé ton modele de graphe dans Excel seul avant de le coder en Delphi...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 108
    Par défaut
    Vi. J'ai fait ca.

    Bon, j'ai pas trouver l'erreur. Par contre j'ai modifier le code et j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Graph.SetSourceData(ExcelApplication1.union(RangeX, RangeY, RangeYY),xlColumns);
    Par contre il faut faire gaffe au type de graphique associé au graph: si on ne choisi pas expressement un graph avec des valeurs X et des valeurs Y (ex: xlXYScatter) il se peut que le graph crée ne present pas de champs Valeur X et du coup ca met des erreurs partout.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/01/2008, 01h05
  2. Réponses: 3
    Dernier message: 17/11/2006, 14h35
  3. Graphe sous Excel
    Par Mabiche103 dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/06/2006, 12h21
  4. [VBA-E]Sélectionner un graph sous Excel
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 12/04/2006, 14h54
  5. Composant permettant de faire des graphes sous Excel
    Par PrinceMaster77 dans le forum ASP
    Réponses: 2
    Dernier message: 25/10/2005, 22h13

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