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

Langage Delphi Discussion :

Tableau de StringGrid


Sujet :

Langage Delphi

  1. #1
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut Tableau de StringGrid
    Bonjour à tous,

    J'ai réalisé un export vers excel de 2 StringGrid (JvStringGrid qui sont des statistiques venant d'une base access) cela fonctionne bien, avec respect des couleurs, du nbre de colonne de ligne + ajout des functions de total sur chaque fin de grid (dernière ligne du StringGrid) genre SOMME(A1:...) sur la feuille 1 d'un classeur.

    Bref, mais dans cet export je fais une boucle x = 1 to 2 car j'ai 2 stringgrid, j'aimerais l'automatiser au mieux .

    Donc comment ecrire 1 Array de StringGrid et ensuite exploiter cela dans une boucle qui serais :

    For i:= 0 to [MonArray de StringGrid].Count -1 do
    etc...

    Merci de votre aide.

    Mes 2 StringGrids de Départ :



    L'export dans Excel :


  2. #2
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    Plutôt qu'un tableau, tu ne pourrais pas te servir des références de tes grids pour les désigner l'une après l'autre ?

    Il y a ça dans la FAQ
    http://delphi.developpez.com/faq/?pa...#findcomponent
    Choisir, c'est renoncer...

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 747
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 747
    Points : 13 314
    Points
    13 314
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    type
      TMonArray = array[0..1] of TStringGrid;
     
    var
      MonArray :TMonArray;
     
    for i := 0 to high(MonArray) do
      MonArray[i].etc

  4. #4
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Merci à tous les deux, mais j'ai une présition à apporter.

    Mon export est réalisé dans un Unit séparer, donc je fais appel à une procédure comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TFStatistiques.JvXPExcelClick(Sender: TObject);
    begin
      StringGrid_Excel(GridSemaineTemps,GridSemaineNombre);
    end;
    j'ai evidement déclarer mon unit dans les uses de la form concerné.

    Voilà un bout de mon unit StringGrid_Excel :

    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
    procedure StringGrid_Excel(StringGrid1, StringGrid2 : TJvStringGrid);
    var
    // Pour Excel
        vMSExcel : variant; // Ouverture
        vXLWorkbook, vXLWorkbooks : variant; // Classeur
        aFeuille : AnsiString; // nom de la Feuille
        vWorksheet : variant; // Feuille
    // Pour le programme
      i: Integer;
      x,y: Integer;
      t: Integer;
      StringGridJv : TjvStringGrid;
      LigneDepart: integer;
    Begin
    // On test si excel est présent
      if ApplicationInstalled('Excel.Application',HKEY_CLASSES_ROOT) then
      Begin
    
      // Fenêtre d'attente avant affichage du résultat
      Fattente := TFattente.Create(Application);
      Try
        Fattente.Show;
        FAttente.JvXPProgressBar1.Position := 2;
        FAttente.Label1.Caption := 'Initialisation...';
        Application.ProcessMessages;
    
      // Ouverture Excel
        vMSExcel := CreateOleObject('Excel.Application');
        vMSExcel.Visible := False;
        FAttente.JvXPProgressBar1.Position := FAttente.JvXPProgressBar1.Position + 3;
        FAttente.Label1.Caption := 'Ouverture de la liaison avec Excel...';
        Application.ProcessMessages;
    
      // Création d'un nouveau classeur
        vXLWorkbooks := vMSExcel.Workbooks;
        vXLWorkbook := vXLWorkbooks.Add;
        FAttente.JvXPProgressBar1.Position := FAttente.JvXPProgressBar1.Position + 2;
        FAttente.Label1.Caption := 'Création du classeur...';
        Application.ProcessMessages;
    
      // On travail sur la 1ère feuille de calcul de ce classeur
        aFeuille := 'Feuil1';
        vWorksheet := vXLWorkbook.WorkSheets[aFeuille];
        FAttente.JvXPProgressBar1.Position := FAttente.JvXPProgressBar1.Position + 3;
        FAttente.Label1.Caption := 'Création des ''Feuil''...';
        Application.ProcessMessages;
    
        For t := 1 to 2 do
        Begin
    
    // La je fais le boulot //
    Ma demande est pas une limit à 2 de stringGrid, mais j'aimerais que le tableau de grid soit en tableau dynamique ne connaissant pas à l'avance le nombre de tableau a exporter.

    La procedure que je tente de faire serais en tout est pour tout

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure StringGrid_Excel( [Tableau de StringGrid], [Tableau destination Feuille Excel]);
    Begin
     
    //
     
    end
    ;

    Cela donnerai quoi ?

    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
    Type
      TMonArrayGrid = Array of TJvStringGrid;
      TMonArrayFeuille = Array of integer; // Numero de la feuille
     
    Procedure StringGrid_Excel(MonArraydeGrid: TMonArrayGrid, MesFeuilles: TMonArrayFeuille);
    Var
    i: Integer;
    Begin
    // .....
    //.. ..
       For i:0 To High(MonArraydeGrid) do
       Begin 
    //.. Programme
       end;
    end;
    est-ce que cela serais correct ?

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 747
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 747
    Points : 13 314
    Points
    13 314
    Par défaut
    C'est correct avec un SetLength pour dimensionner les tableaux.

  6. #6
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Bon j'ai essayer mais cela fonctionne pas.

    Lorsque je fais appel à la procédure comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TFStatistiques.JvXPExcelClick(Sender: TObject);
    Begin
     
    StringGrid_Excel([GridSemaineTemps,GridSemaineNombre]);
     
    end;
    J'ai une erreur Ordinal type required.
    J'ai fais cela en déclaration

    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
    Type
      TMonArray = Array of TJvStringGrid;
     
      procedure StringGrid_Excel(MonArray: TMonArray);
     
    // ....
     
    implementation
     
    uses Statistiques, Attente, Commun;
     
    procedure StringGrid_Excel(MonArray: TMonArray);
    var
    Begin
     
    ....
    end;

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 747
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 747
    Points : 13 314
    Points
    13 314
    Par défaut
    ça ne fonctionne pas par une déclaration de type mais ça fonctionne comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure StringGrid_Excel(MonArray: array of TStringGrid);
    Mais ne me demande pas pourquoi

  8. #8
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Je pouvais toujours chercher !!! lol

    MErci AndNotOr ta toujours l'astuce qui me débloque. Je vais prendre un Abonnement lol.

    Pour la propisition de OutOfRange le count des components est aussi une solution valable mais est moins rapide car il faut compter les composants et tester si c'est des StringGrid.

  9. #9
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Derniere chose

    comment tu dimension avec setlenght dans ce cas ?

  10. #10
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 747
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 747
    Points : 13 314
    Points
    13 314
    Par défaut
    Dans le cas de ton appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringGrid_Excel([GridSemaineTemps,GridSemaineNombre]);
    tu n'as pas besoin de SetLength puisque tu ne passes pas par une variable.

    Ce serait dans un cas comme celui-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    type
      TMonArray = Array of TStringGrid;
     
    var
      MonArray :TMonArray;
     
      SetLength(MonArray, 2);
      MonArray[0] := StringGrid1;
      MonArray[1] := StringGrid2;
      StringGrid_Excel(MonArray);

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/02/2008, 20h10
  2. Réponses: 2
    Dernier message: 27/05/2002, 19h46
  3. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 12h21
  4. transmision de tableau en parametre
    Par Horus dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/05/2002, 11h15
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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