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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
   | // Une fois que les DVFV de chaque LF sont remplie dans la feuille OpenOffice, on dessine le diagramme
Function Graph(feuille,NomGraph:string;cycle,Nbligne,Nbcolone:integer):variant;
// feuille : nom de la feuille sur laquelle est inserer le graph,
// Nomgraph : nom du graph
// durée du cycle du plan de feux + structure,
// nbligne : du tableau de données pour remplir la graph
// nb de colonne : du tableau de donnée pour remplir le graph
 
///////// Ajoute le graphe sur la Feuille, le nomme, definie son type, le cycle maxi, les Echelles
///////// Les données sont traité dans la procedure Diagram
var
 
  nb_feuille: integer;
  TableauPlageDonne : variant;
  aRect , Maplage : variant;
  GraphListe : Variant;  // liste des graph
  Graph : Variant;
  Diagram:variant;
  CapsuleGraph:variant;
  AxeY:variant;
  Point,Taille,Col_donnee:variant;
  NumCol,cpt,Xpoint,Ypoint,larg,long:integer;
 
begin
 {  feuille:='Feuille22';
   NomGraph:='TT';
   cycle:=80;
   Nbligne:=32;
   Nbcolone:=8;   }
    Xpoint:=00;
    Ypoint:=00;
    larg :=27450;
    long :=16800;
 
    MaFeuille := MonClasseur.GetByName(feuille);
    // taille du rectangle encapsulant graph et position dans la feuille du rectangle
    CoreReflection := OpenOffice.createInstance('com.sun.star.reflection.CoreReflection');
    CoreReflection.forName('com.sun.star.awt.Rectangle').createObject(aRect);
    aRect.X := Xpoint;
    aRect.Y := Ypoint;
    aRect.Width := larg;
    aRect.Height := long;
 
    // numero de la feuille sur laquelle il y a le graph
    for nb_feuille:= 0 to MonClasseur.getcount-1 do
    begin
           if MonClasseur.GetByIndex(nb_feuille).GetName= Feuille then break;
    end;
 
    // Plage de donnée du graph
    CoreReflection .forName('com.sun.star.table.CellRangeAddress').createObject(Maplage);
        TableauPlageDonne := VarArrayCreate([0, 0], varVariant);
        MaPlage.Sheet := nb_feuille;
        Maplage.StartColumn :=17;
        Maplage.StartRow :=1;
        Maplage.EndColumn :=Nbcolone+17;
        Maplage.EndRow :=NbLigne+1;
        TableauPlageDonne[0] := Maplage; //Mafeuille.getCellRangeByPosition(9,1,15,10);
 
    // Liste des graph de la feuille
    GraphListe := Mafeuille.getCharts;
    //Ajoute un nouveau graph à la liste des graphe avce les parametres
    // first bool: ColumnHeaders
    // second bool: RowHeaders
    GraphListe.addNewByName( NomGraph , aRect, TableauPlageDonne, false,true);
 
   // Pointe sur le graph
   CoreReflection .forName('com.sun.star.table.XTableChart').createObject(CapsuleGraph);
   CapsuleGraph:=  GraphListe.getByindex(0);
   Graph:=CapsuleGraph.getEmbeddedObject;
 
   // ajoute les services OOo liées au type de diagramme au Graphique
   Graph.CreateInstance('com.sun.star.chart.BarDiagram');
        Graph.setPropertyValue('HasLegend' , false);
        Graph.setPropertyValue('HasMainTitle' , false);
        Graph.setPropertyValue('HasMainTitle' , false);
 
   // Pointe sur le diagramme du graph
   diagram:=graph.getDiagram;
        diagram.setPropertyValue('Stacked' , true);
        diagram.setPropertyValue('Vertical', true);
 
   // determine la position ou est inséré le graphe
   CoreReflection.forName('com.sun.star.awt.Point').createObject(point);
     Point.X := Xpoint;
     Point.Y := Ypoint;
   // determine la taille du graphe dans le rectangle
   CoreReflection.forName('com.sun.star.awt.Size').createObject(taille);
     taille.width := larg;
     taille.height := long;
 
     diagram.setPosition (Point);
     diagram.setSize (taille);
 
   //Pointe sur l'axe des ordonnées du graph
   AxeY := diagram.getYAxis;
        AxeY.setPropertyValue('Max', Cycle);
        AxeY.setPropertyValue('Min', 0);
        AxeY.setPropertyValue('Origin',0);
 
   // Echelle du graphe
  if cycle>100 then AxeY.setPropertyValue('StepMain',5)
          else if cycle>60 then AxeY.setPropertyValue('StepMain',2)
          else AxeY.setPropertyValue('StepMain',1);
  AxeY.setPropertyValue('TextCanOverlap',False);
 
   //determine la couleur de chaque ligne : Balaye toutes les lignes du graph
   cpt:=1;
   for NumCol:=0 to NbColone-1 do
   begin
        //Pointe sur une ligne du graph ( colone dans le diagramme)
        Col_donnee:= diagram.getDataRowProperties(NumCol);
        // traite la couleur
        if cpt=3 then
        begin
              Col_donnee.SetPropertyValue('FillColor',16777062);  // jaune
              cpt:=0;
        end
        else if cpt=2  then
             begin
                  Col_donnee.SetPropertyValue('FillColor',2359075);// vert
                  Col_donnee.setPropertyValue('DataCaption',1);   // indique qu'il faut afficher la valeur de la colonne
             end
             else Col_donnee.SetPropertyValue('FillColor',16711680);// rouge
 
        cpt:=cpt+1;
   end;
 
//  if isNullEmpty(diagram) then MessageDlg(' cho y rine', mtInformation,[mbOk], 0);
  result:= diagram;
// Graph.refresh;
end; | 
Partager