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

Vue hybride

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

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