Bonjour,

Le but de mon projet, est de récupérer des variables dans un code en C++ écrit dans C++BuilderXE et d'afficher ces valeurs dans un fichier Calc de LibreOffice. Pour cela j'ai déjà utilisé les fonctions "OLE" d'OpenOffice, pour afficher du texte dans les cellules, de la couleur etc..., j'ai aussi réussi à faire des bordures en m'aidant d'un code en Pascal et de la doc d'OpenOffice car je n'ai pas trouvée de moyen de faire des bordures dans la FAQ, même si elle ma bien aidé pour le reste.

Et maintenant je bloque sur le diagramme de Gantt, j'ai cherché des bout de code en C++ sur le web mais je n'ai rien trouvé.
j'ai aussi le code en Pascal qui fait le diagramme de Gant, mais je n'arrive pas à faire comme j'ai fait avec les bordures où je m'aidais de la doc d'OpenOffice.

Donc j'aimerais que quelqu'un réussisse à faire un code en C++ pour faire un diagramme de Gantt et l'afficher dans un feuille Calc s'il vous plait.

Je vous passe aussi le code en Pascal, je pense qui si vous arrivez à le traduire, cela va fonctionner .

Code pascal : 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
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;


Merci d'avance et à bientôt