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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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 éclairé
    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
    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

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 934
    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
    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 934
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 934
    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
    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 934
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 934
    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

+ 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