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

 Delphi Discussion :

Sauvegarde d'une StringGrid


Sujet :

Delphi

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 108
    Par défaut Sauvegarde d'une StringGrid
    encore une question pour les débutants sans doute!

    Je cherche à enregistrer le contenu d'une Stringgrid dans un fichier excel, et inversement mettre les données d'un fichier excel dans une stringgrid.

    J'ai trouvé sur le forum un topic à ce sujet, mais je ne vois pas comment cela fonctionne....

    quelqu'un ppeut il m'aider?

    l'argument aFileName de l'exemple doit il être remplacé par un nom de fichier?
    Où déclarer 'Savedatafromfile' et 'Opendatafromfile'?

    Merci beaucoup de votre indulgence!!

    Merci d'avance.

  2. #2
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 668
    Par défaut
    bonsoir,
    tu peux sauvegarder le contenu de ton String Grid dans un fichier excel en passant par ces deux fonctions:
    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
    function RefToCell(ARow, ACol: Integer): string;
    begin
      Result := Chr(Ord('A') + ACol - 1) + IntToStr(ARow);
    end;
    ///////////////////////////////////////////////////////////////////////////
    function SauvegarderEnFichierExcel(AGrid: TStringGrid; ASheetName, AFileName: string): Boolean;
    const
      xlWBATWorksheet = -4167;
    var
      Row, Col: Integer;
      GridPrevFile: string;
      XLApp, Sheet, Data: OLEVariant;
      i, j: Integer;
    begin
      // Préparer les données
      Data := VarArrayCreate([1, AGrid.RowCount, 1, AGrid.ColCount], varVariant);
      for i := 0 to AGrid.ColCount - 1 do
        for j := 0 to AGrid.RowCount - 1 do
          Data[j + 1, i + 1] := AGrid.Cells[i, j];
      // Création Excel-OLE Object
      Result := False;
      XLApp := CreateOleObject('Excel.Application');
      try
        //  cacher Excel
        XLApp.Visible := False;
        // ajouter un nouveau Workbook
        XLApp.Workbooks.Add(xlWBatWorkSheet);
        Sheet := XLApp.Workbooks[1].WorkSheets[1];
        Sheet.Name := ASheetName;
        // Complétez  sheet
        Sheet.Range[RefToCell(1, 1), RefToCell(AGrid.RowCount,
          AGrid.ColCount)].Value := Data;
        // sauvegarder Excel Worksheet
        try
          XLApp.Workbooks[1].SaveAs(AFileName);
          Result := True;
        except
          // Erreur ?
        end;
      finally
        // Quiter Excel
        if not VarIsEmpty(XLApp) then
        begin
          XLApp.DisplayAlerts := False;
          XLApp.Quit;
          XLAPP := Unassigned;
          Sheet := Unassigned;
        end;
      end;
    end;
    pour l'appeler tu mets:
    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
      StringList:TStrings;
      i:integer;
    begin
      StringList := TStringList.Create;
      try
        if OpenDialog1.Execute then
        begin
          StringList.LoadFromFile(OpenDialog1.FileName);
          for i := 0 to StringList.Count - 1 do
          begin
            StringGrid1.Cells[0,i] := StringList.Strings[i]
          end;
          if SauvegarderEnFichierExcel(StringGrid1, 'NABIL74', 'c:\Mon fichier Excel.xls') then
          ShowMessage('Données sauvegardées au c:\Mon fichier Excel.xls');
        end;
      finally
        StringGrid1.Free;
        StringList.Free;
      end;
    end;
    j'espère que ça t'aideras.

    a+

    NABIL74

  3. #3
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 668
    Par défaut
    il y a une autre méthode(plus optimisée) pour exporter les données contenues dans ton String Grid vers 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
    procedure TForm1.Button3Click(Sender: TObject);
    var
    xls, wb, Range: OLEVariant;
    arrData: Variant;
    i,j:integer;
    begin
    {créer variante tableau où nous allons copier nos données}
    arrData := VarArrayCreate([1, StringGrid1.RowCount, 1, StringGrid1.ColCount], varVariant);
     
    {remplir tableau}
    for i := 1 to StringGrid1.RowCount do
    for j := 1 to StringGrid1.ColCount do
    arrData[i, j] := StringGrid1.Cells[j-1, i-1];
     
    {initialiser une instance d'Excel}
    xls := CreateOLEObject('Excel.Application');
     
    {créer classeur}
    wb := xls.Workbooks.Add;
     
    {récupérer une gamme où les données doivent être placées}
    Range := wb.WorkSheets[1].Range[wb.WorkSheets[1].Cells[1, 1],
    wb.WorkSheets[1].Cells[StringGrid1.RowCount, StringGrid1.ColCount]];
     
    {copier des données de tableau alloué variante}
    Range.Value := arrData;
     
    {Afficher tes données avec Excel}
    xls.Visible := True;
    end;
    A+

    NABIL74

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 108
    Par défaut
    Merci Nabil74.

    Je vais essayer de comprendre ton code.

    A ce que j'en lis, je dois mettre un TOpenDialog et un TSaveDialog.

    Dois-je déclarer des choses dans les propriétés de ceux-ci?

    Je vais consulter l'aide Delphi en attenadant une réponse.

    Une question cependant, quand est il quand un utilisateur ne possède pas Excel, mais openOffice?

  5. #5
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 668
    Par défaut
    salut,
    pour que ça marche, il faut ajouter dans la partie "Uses"=>"ComObj"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    implementation
      uses
      ComObj;
    tu dois ajouter sur ta form un "OpenDialog"et un "SaveDialog".

    Une question cependant, quand est il quand un utilisateur ne possède pas Excel, mais openOffice?
    ce code fonctionne avec MSExcel et non pas avec "openOffice".

    a+

    NABIL74

  6. #6
    Membre chevronné
    Avatar de alheuredudejeuner
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2005
    Messages : 376
    Billets dans le blog
    4
    Par défaut JVCL palette Jv Data Acces compos :jvgdbgridexportexcel
    Cela pourrai répondre à ton besoin

    André

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 108
    Par défaut
    Merci Nabil,

    J'ai essayé ton premier code.

    Le debogeur me met
    'Worksheets' non déclaré
    'Value' non déclaré
    'Save as' non déclaré

    Où dois-je déclaré ce genre de choses pour faire fonctionner mon programme?

  8. #8
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 668
    Par défaut
    Citation Envoyé par breizh44 Voir le message
    Merci Nabil,

    J'ai essayé ton premier code.

    Le debogeur me met
    'Worksheets' non déclaré
    'Value' non déclaré
    'Save as' non déclaré

    Où dois-je déclaré ce genre de choses pour faire fonctionner mon programme?
    salut,
    pour que ça marche, il faut ajouter dans la partie "Uses"=>"ComObj".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    implementation
      uses
      ComObj;
    a+

    NABIL74

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 108
    Par défaut
    Ok, Nabil, c'est ce que j'ai fait cependant (enfin je crois!)
    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
     
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      procedure supprimerLigne(StringGrid: TStringGrid; ligne: integer);
      //colonne : integer;
      //ligne : integer;
      end;
     
    var
      Liste: TListe;
      identite : string;
      colonne : integer;
      ligne : integer;
     
    implementation
     uses ComObj;
    {$R *.dfm}
     
    procedure TListe.FormCreate(Sender: TObject);
    begin
    ligne := 0  ;
    colonne :=0 ;
     
    Listingclasse.Cells [0,0] := 'Nom';
    Listingclasse.Cells [1,0] := 'Prénom';
    end;

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 108
    Par défaut
    De même que si je reprends ton premier code pour la sauvegarde de ma stringList en fichier excel.

    Tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if SauvegarderEnFichierExcel(StringGrid1, 'NABIL74', 'c:\Mon fichier Excel.xls') then
          ShowMessage('Données sauvegardées au c:\Mon fichier Excel.xls');
        end;
    Si je comprends bien, il faut remplacer ''SauvegarderEnFichierExcel'' par un SaveDialog1.execute?

    Si je remplace par un SaveDialog, ta synthaxe ne semble plus correcte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (StringGrid1, 'NABIL74', 'c:\Mon fichier Excel.xls') then
          ShowMessage('Données sauvegardées au c:\Mon fichier Excel.xls');
        end;

  11. #11
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 668
    Par défaut
    je ne te suis pas.
    Citation Envoyé par breizh44 Voir le message
    Ok, Nabil, c'est ce que j'ai fait cependant (enfin je crois!)
    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
     
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      procedure supprimerLigne(StringGrid: TStringGrid; ligne: integer);
      //colonne : integer;
      //ligne : integer;
      end;
     
    var
      Liste: TListe;
      identite : string;
      colonne : integer;
      ligne : integer;
     
    implementation
     uses ComObj;
    {$R *.dfm}
     
    procedure TListe.FormCreate(Sender: TObject);
    begin
    ligne := 0  ;
    colonne :=0 ;
     
    Listingclasse.Cells [0,0] := 'Nom';
    Listingclasse.Cells [1,0] := 'Prénom';
    end;
    tu remplaces par:et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    ligne := 0  ;
    colonne :=0 ;
     
    StringGrid1.Cells [0,0] := 'Nom';
    StringGrid1.Cells [1,0] := 'Prénom';
    end;
    NABIL74

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 108
    Par défaut
    Je crois qu'il serait plus judicieux pour moi de te montrer ma source !
    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
    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
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
     
    unit Listeeleves;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Grids;
     
    type
      TListe = class(TForm)
        Ajouteleve: TButton;
        Button2: TButton;
        Ajout: TGroupBox;
        Nomeleve: TLabel;
        Champnom: TEdit;
        Prenom: TLabel;
        Champprenom: TEdit;
        Valid: TButton;
        Edit1: TEdit;
        Listingclasse: TStringGrid;
        Button1: TButton;
        OpenDialog1: TOpenDialog;
        SaveDialog1: TSaveDialog;
        Button3: TButton;
        Erase: TButton;
        Label1: TLabel;
        procedure AjouteleveClick(Sender: TObject);
        procedure ValidClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure EraseClick(Sender: TObject);
        procedure Edit1Change(Sender: TObject);
        procedure Button1Click(Sender: TObject);
     
     
     
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      procedure supprimerLigne(StringGrid: TStringGrid; ligne: integer);
      //colonne : integer;
      //ligne : integer;
      end;
     
    var
      Liste: TListe;
      identite : string;
      colonne : integer;
      ligne : integer;
     
    implementation
     uses ComObj;
    {$R *.dfm}
     
    procedure TListe.FormCreate(Sender: TObject);
    begin
    ligne := 0  ;
    colonne :=0 ;
     
    Listingclasse.Cells [0,0] := 'Nom';
    Listingclasse.Cells [1,0] := 'Prénom';
    end;
     
     
    procedure TListe.AjouteleveClick(Sender: TObject);
    begin
    ajout.Visible := true;
    valid.Visible := true;
    erase.Visible := false;
    end;
     
    procedure TListe.supprimerLigne(StringGrid: TStringGrid; ligne: integer);
    var
      i:integer;
    begin
      for i:= ligne to StringGrid.RowCount-2 do
      begin
        StringGrid.Cells[0,i]:= StringGrid.Cells[0,i+1];
        StringGrid.Cells[1,i]:= StringGrid.Cells[1,i+1];
      end;
    end;
     
     
     
    procedure TListe.Button1Click(Sender: TObject);
    var
      StringList:TStrings;
      i:integer;
    begin
      StringList := TStringList.Create;
      try
        if OpenDialog1.Execute then
        begin
          StringList.Loadfromfile(SaveDialog1.FileName);
          for i := 0 to StringList.Count - 1 do
          begin
            listingclasse.Cells[0,i] := StringList.Strings[i]
          end;
        // if SaveDialog1.Execute then
        // begin
        // stringList.SaveToFile(Listingclasse, 'NABIL74', 'c:\Mon fichier Excel.xls');
        //ShowMessage('Données sauvegardées au c:\Mon fichier Excel.xls');
        //end;
        end;
      finally
        listingclasse.Free;
        StringList.Free;
      end;
    end;
     
     
    procedure TListe.Button2Click(Sender: TObject);
    begin
    erase.Visible :=true   ;
    valid.Visible := false  ;
    end;
     
    procedure TListe.ValidClick(Sender: TObject);
    begin
      ligne := ligne +1;
      with Listingclasse do
        Listingclasse.Cells[colonne,ligne]    := champnom.text;
        Listingclasse.Cells[colonne+1,ligne]:= champprenom.text;
      end;
     
    procedure TListe.EraseClick(Sender: TObject);
    begin
    begin
    supprimerLigne(Listingclasse,Listingclasse.Row);
    end;
    end;
     
     
    procedure TListe.Edit1Change(Sender: TObject);
    begin
    //liste.Caption := 'Liste des élèves de la classe de ' + edit1.Text ;
    end;
     
    function RefToCell(ARow, ACol: Integer): string;
    begin
      Result := Chr(Ord('A') + ACol - 1) + IntToStr(ARow);
    end;
    ///////////////////////////////////////////////////////////////////////////
    function SauvegarderEnFichierExcel(AGrid: TStringGrid; ASheetName, AFileName: string): Boolean;
    const
      xlWBATWorksheet = -4167;
    var
      Row, Col: Integer;
      GridPrevFile: string;
      XLApp, Sheet, Data: OLEVariant;
      i, j: Integer;
    begin
      // Préparer les données
      Data := VarArrayCreate([1, AGrid.RowCount, 1, AGrid.ColCount], varVariant);
      for i := 0 to AGrid.ColCount - 1 do
        for j := 0 to AGrid.RowCount - 1 do
          Data[j + 1, i + 1] := AGrid.Cells[i, j];
      // Création Excel-OLE Object
      Result := False;
      XLApp := CreateOleObject('Excel.Application');
      try
        //  cacher Excel
        XLApp.Visible := False;
        // ajouter un nouveau Workbook
        XLApp.Workbooks.Add(xlWBatWorkSheet);
        Sheet := XLApp.Workbooks[1].WorkSheets[1];
        Sheet.Name := ASheetName;
        // Complétez  sheet
        Sheet.Range[RefToCell(1, 1), RefToCell(AGrid.RowCount,
          AGrid.ColCount)].Value := Data;
        // sauvegarder Excel Worksheet
        try
          XLApp.Workbooks[1].SaveAs(AFileName);
          Result := True;
        except
          // Erreur ?
        end;
      finally
        // Quiter Excel
        if not VarIsEmpty(XLApp) then
        begin
          XLApp.DisplayAlerts := False;
          XLApp.Quit;
          XLAPP := Unassigned;
          Sheet := Unassigned;
        end;
      end;
    end;
     
    end.

  13. #13
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 668
    Par défaut
    Si je comprends bien, il faut remplacer ''SauvegarderEnFichierExcel'' par un SaveDialog1.execute?
    oui je le remplace par "SauvegarderEnFichierExcel".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (StringGrid1, 'NABIL74', 'c:\Mon fichier Excel.xls') then
          ShowMessage('Données sauvegardées au c:\Mon fichier Excel.xls');
        end;
    ici, quand ton StringGrid est sauvegardé, alors on affiche un message disant que le fichier Excel est sauvegardé au C:\...

    Qu'est ce que tu veux faire exactement?

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 108
    Par défaut
    Mon souhait est simple (enfin je le pensais jusqu'à maintenant!).

    J'ai un Form avec 2 TEdit (Nom et prénom) et un bouton Ajouter.

    Lors d'un clic sur 'Ajouter', le nom et le prénom s'inscrivent respectivement dans les celleles d'une TStringGrid.

    Une fois que j'ai terminé de rentrer mes données, je veux qu'une boîte de dialogue de sauvegarde s'ouvre pour que je puisse sauvegarder cette TStrignGrid dans un fichier .xls.

    J'ai un autre bouton qui lui me permet via l'ouverture d'une boite de dialogue de sélectionner un ficiher Excel, de l'ouvri et de le présenter dans ma TStringGrid.

  15. #15
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 668
    Par défaut
    pour la sauvegarde de ta StringGrid vers Excel(utilisation de "SaveDialog1"), mets ça:
    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
    procedure TForm1.Button2Click(Sender: TObject);
    var
      StringList:TStrings;
      i:integer;
    begin
      StringList := TStringList.Create;
      try
          for i := 0 to StringList.Count - 1 do
          begin
            StringGrid1.Cells[0,i] := StringList.Strings[i]
          end;
          if SaveDialog1.Execute then
          SauvegarderEnFichierExcel(StringGrid1, 'Feuille1', SaveDialog1.FileName)
        //  ShowMessage('Données sauvegardées au c:\Mon fichier Excel.xls');
       // end;
      finally
        StringGrid1.Free;
        StringList.Free;
      end;
    end;
    pas testé(je n'ai delphi sous la main).

    NABIL74

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 108
    Par défaut
    Merci pour ta patience et ton indulgence Nabil!

    Le débogueur me met 'SauvegarderFichierEnExcel' identificateur inconnu.

    J'avoue que je me perds! Que dois je déclarer pour que cela fonctionne?

    Merci beaucoup.

  17. #17
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 668
    Par défaut
    Citation Envoyé par breizh44 Voir le message
    Merci pour ta patience et ton indulgence Nabil!

    Le débogueur me met 'SauvegarderFichierEnExcel' identificateur inconnu.

    J'avoue que je me perds! Que dois je déclarer pour que cela fonctionne?

    Merci beaucoup.
    c'est simple,tu mets la fonction "SauvegarderFichierEnExcel" avant la procédure du bouton.
    c'est -à dire: en 1:
    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
    function RefToCell(ARow, ACol: Integer): string;
    begin
      Result := Chr(Ord('A') + ACol - 1) + IntToStr(ARow);
    end;
    ///////////////////////////////////////////////////////////////////////////
    function SauvegarderEnFichierExcel(AGrid: TStringGrid; ASheetName, AFileName: string): Boolean;
    const
      xlWBATWorksheet = -4167;
    var
      Row, Col: Integer;
      GridPrevFile: string;
      XLApp, Sheet, Data: OLEVariant;
      i, j: Integer;
    begin
      // Préparer les données
      Data := VarArrayCreate([1, AGrid.RowCount, 1, AGrid.ColCount], varVariant);
      for i := 0 to AGrid.ColCount - 1 do
        for j := 0 to AGrid.RowCount - 1 do
          Data[j + 1, i + 1] := AGrid.Cells[i, j];
      // Création Excel-OLE Object
      Result := False;
      XLApp := CreateOleObject('Excel.Application');
      try
        //  cacher Excel
        XLApp.Visible := False;
        // ajouter un nouveau Workbook
        XLApp.Workbooks.Add(xlWBatWorkSheet);
        Sheet := XLApp.Workbooks[1].WorkSheets[1];
        Sheet.Name := ASheetName;
        // Complétez  sheet
        Sheet.Range[RefToCell(1, 1), RefToCell(AGrid.RowCount,
          AGrid.ColCount)].Value := Data;
        // sauvegarder Excel Worksheet
        try
          XLApp.Workbooks[1].SaveAs(AFileName);
          Result := True;
        except
          // Erreur ?
        end;
      finally
        // Quiter Excel
        if not VarIsEmpty(XLApp) then
        begin
          XLApp.DisplayAlerts := False;
          XLApp.Quit;
          XLAPP := Unassigned;
          Sheet := Unassigned;
        end;
      end;
    end;
    et en 2 :
    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
    procedure TForm1.Button2Click(Sender: TObject);
    var
      StringList:TStrings;
      i:integer;
    begin
      StringList := TStringList.Create;
      try
          for i := 0 to StringList.Count - 1 do
          begin
            StringGrid1.Cells[0,i] := StringList.Strings[i]
          end;
          if SaveDialog1.Execute then
          SauvegarderEnFichierExcel(StringGrid1, 'Feuille1', SaveDialog1.FileName)
        //  ShowMessage('Données sauvegardées au c:\Mon fichier Excel.xls');
       // end;
      finally
        StringGrid1.Free;
        StringList.Free;
      end;
    end;
    comme ça le déboguer ne t'affichera pas ce message d'erreur.

    a+

    NABIL74

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 108
    Par défaut
    Merci beaucoup Nabil, la sauvegarde de ma StringGrid fonctionne à merveille!

    Si je suis ton raisonnement, la récupération des données d'un fichier Excel devrait se dérouler comme cela :

    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
     
    procedure TListe.RecupclasseClick(Sender: TObject);
    var
      StringList:TStrings;
      i:integer;
    begin
      StringList := TStringList.Create;
      try
        if OpenDialog1.Execute then
        begin
          StringList.LoadFromFile(OpenDialog1.FileName);
          for i := 0 to StringList.Count - 1 do
          begin
            Listingclasse.Cells[0,i] := StringList.Strings[i]
             end;
            end;
      finally
        Listingclasse.Free;
        StringList.Free;
          end;
          end;
    Dois-j" écrire une procédure pareillement à celle de SauvegarderFichierEnExcel'?

  19. #19
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 668
    Par défaut
    tu peux importer le contenu de ta feuille excel avec cette fonction:
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    function Excel_A_StringGrid(AGrid: TStringGrid; AXLSFile: string): Boolean;
    const
      xlCellTypeLastCell = $0000000B;
    var
      XLApp, Sheet: OLEVariant;
      RangeMatrix: Variant;
      x, y, k, r: Integer;
    begin
      Result := False;
      // Créer un objet OLE Excel
      XLApp := CreateOleObject('Excel.Application');
      try
        //  Excel n''est pas visible
        XLApp.Visible := False;
     
        // Ouvrir le classeur
        XLApp.Workbooks.Open(AXLSFile);
     
        Sheet := XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];
     
        // Afin de connaître la dimension de la feuille de travail, c'est-à-dire le nombre de lignes
        // et le nombre de colonnes,  activer la dernière cellule non vide de celui-ci
     
        Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
        // Obtenenir la valeur de la dernière ligne
        x := XLApp.ActiveCell.Row;
        // GObtenenir la valeur de la dernière  colonne
        y := XLApp.ActiveCell.Column;
     
        // Stringgrid la ligne et col dimensions.
     
        AGrid.RowCount := x;
        AGrid.ColCount := y;
     
        // Attribuer la variante associée à la feuille de calcul
     
        RangeMatrix := XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;
        //  Préciser la boucle pour remplir le TStringGrid
        k := 1;
        repeat
          for r := 1 to y do
            AGrid.Cells[(r - 1), (k - 1)] := RangeMatrix[K, R];
          Inc(k, 1);
          AGrid.RowCount := k + 1;
        until k > x;
        // Annuler l'affectation du Delphi Variante Matrix
        RangeMatrix := Unassigned;
     
      finally
        // Quitter Excel
        if not VarIsEmpty(XLApp) then
        begin
          // XLApp.DisplayAlerts := False;
          XLApp.Quit;
          XLAPP := Unassigned;
          Sheet := Unassigned;
          Result := True;
        end;
      end;
    end;
    pour l'appeler, tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    if OpenDialog1.Execute then
     Excel_A_StringGrid(StringGrid1, OpenDialog1.FileName)
    end;
    Bonne chance alors.

    A+

    NABIL74

Discussions similaires

  1. [C#]Sauvegarde d'une selection multiple d'une listbox?
    Par onouiri dans le forum ASP.NET
    Réponses: 7
    Dernier message: 29/04/2004, 17h16
  2. [Kylix] Trier le contenu d'une StringGrid
    Par cmp-france dans le forum EDI
    Réponses: 1
    Dernier message: 01/04/2004, 09h18
  3. Sauvegarde d'une image sous un autre format
    Par gandf dans le forum C++Builder
    Réponses: 4
    Dernier message: 24/02/2004, 09h50
  4. sauvegarde d'une base ailleurs qu'en local
    Par jbat dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 13/01/2004, 11h25
  5. Sauver une StringGrid dans un fichier
    Par Rodrigue dans le forum C++Builder
    Réponses: 2
    Dernier message: 10/12/2003, 14h52

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