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