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 :

Importer un fichier XLS dans un StringGrid avec OpenDialog


Sujet :

Delphi

  1. #1
    Nouveau membre du Club Avatar de JemaCodeur
    Homme Profil pro
    Amateur
    Inscrit en
    Avril 2019
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Amateur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2019
    Messages : 60
    Points : 38
    Points
    38
    Par défaut Importer un fichier XLS dans un StringGrid avec OpenDialog
    Bonjour,

    Je suis un grand commençant dans l'univers du développement.
    Je voudrais charger les données de mon fichier XLS dans un StringGrid.
    Alors j'ai pas mal de forum mais je ne trouve réellement ce que je veux.

    Je je serais très bien d'avoir de l'aide.

    Merci d'avance.

    Ci-contre le code que j'ai essayé de faire.

    DELPHI 7 - XLS 2010

    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
     
    { BOUTON D'IMPORTATION DE FICHIER XLS }
    procedure TForm_Import.btn_uploadClick(Sender: TObject);
    begin
      with Import_File do
        begin
          Title := 'IMPORTATION DE FICHIER XLS';
          Filter := '*.xlsx';
          DefaultExt := 'xlsx';
          InitialDir := GetCurrentDir;
          Options := [ofFileMustExist];
     
          if Execute then
          begin
            MessageDlg('Le fichier a été chargé.', mtInformation, [mbOK], 0);
            // Appple de la fonction de chragement de fichier XLS
          end else
          begin
            MessageDlg('Le fichier n''a pas été chargé.', mtInformation, [mbOK], 0);
          end;
        end;
     
    end;
     
    { CHARGER LE FICHIER XLS DANS UN STRINGGRID }
    procedure TForm_Import.ChargerFichier(FileName: String);
    var
      TableNames : TStrings;
      i : Integer;
    begin
      connexionBase.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source="'
      + FileName + '";Extended Properties="Excel 8.0;HDR=Yes;IMEX=0";Persist Security Info=False';
      connexionBase.Open;
      try
        TableNames := TStringList.Create;
        connexionBase.GetTableNames(TableNames);
     
     
        TConnexionBase.TableName := '['+ TableNames[0] +']';
        TConnexionBase.Open;
        TConnexionBase.First;
     
        // Je veux parcourir le fichier et faire le chargement.
        for i := 0 to TConnexionBase.RecordCount - 1 do
        begin
          // Je suis coincé
        end;
      finally
        TConnexionBase.Close;
        connexionBase.Close;
        MessageDlg('Import terminé avec sucés', mtInformation, [mbOK], 0);
      end;
    end;
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 621
    Points : 25 321
    Points
    25 321
    Par défaut
    TConnexionBase c'est un composant ADO ? TADOTable
    Un TDBGrid + TDataSource fera la travail bien mieux qu'une copîe dans un TStringGrid


    Sinon, les mots clés sont TStringGrid.ColCount, TStringGrid.RowCount, TStringGrid.Cells et TADOTable.Fields[], AsString ...

  3. #3
    Nouveau membre du Club Avatar de JemaCodeur
    Homme Profil pro
    Amateur
    Inscrit en
    Avril 2019
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Amateur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2019
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Merci de votre réponse rapide.

    Oui en effet, TConnexionBase est un composant TADOTABLE.
    je crois aussi mal nommé la table c'est un DBGrid au lieu d'un StringGrid faute à lire beaucoup de chose sur ça.

    Ci-contre les entêtes de mon programme peut être cela peut servir à mieux m'aider.
    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
     
    unit Main;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, ImgList, ToolWin, ComCtrls, Grids, DBGrids, StdCtrls,
      DB, ADODB, SMDBGrid, jpeg, Mask, DBCtrls;
     
    type
      TForm_Import = class(TForm)
        Panel1: TPanel;
        Panel15: TPanel;
        Panel16: TPanel;
        Import_File: TOpenDialog;
        ToolBar1: TToolBar;
        ToolButton5: TToolButton;
        ToolButton3: TToolButton;
        btn_update: TLabel;
        Image1: TImage;
        dtsTableauResult: TDataSource;
        Panel2: TPanel;
        btn_upload: TLabel;
        Image2: TImage;
        connexionBase: TADOConnection;
        dbedit_import: TDBEdit;
        TConnexionBase: TADOTable;
        DBGrid1: TDBGrid;
        procedure btn_uploadClick(Sender: TObject);
      private
        { Private declarations }
        procedure ChargerFichier(FileName : String);
      public
        { Public declarations }
      end;
    var
      Form_Import: TForm_Import;
     
    implementation
     
    {$R *.dfm}
     
    // Coding here ...

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 621
    Points : 25 321
    Points
    25 321

  5. #5
    Nouveau membre du Club Avatar de JemaCodeur
    Homme Profil pro
    Amateur
    Inscrit en
    Avril 2019
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Amateur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2019
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    ShaiLeTroll, merci pour le tuyau.

    J'ai bien lu la documentation et je crois que c'est pas loin de ce que j'ai fait.
    Sauf si vous avez remarqué quelque chose d'anormale sur la liste de mes composants ou même sur mon code quelque chose que je devrais changer.

    Si cela concerne le composant TADOConnection, je suis pas encor au bout du programme parce que je veux faire une insertion de la table récupérer sur le fichier XLS dans une base de données SQL Server.

    ci-dessous la procédure de la création du formulaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    { OUVERTURE DU FORMULAIRE }
    procedure TForm_Import.FormCreate(Sender: TObject);
    begin
      connexionBase.LoginPrompt := False;
      q_tableauResultat.Connection := connexionBase;
      dtsTableauResultats.DataSet := q_tableauResultat;
      dbg_resultat.DataSource := dtsTableauResultats;
    end;
    Merci d'avance de votre aide.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 164
    Points : 41 346
    Points
    41 346
    Billets dans le blog
    63
    Par défaut
    Bonsoir, de retour de plage

    je vois une unité Smdbgrid mais pas de tsmdbgrid, un essai avorté je pense. Dommage, cela fait un bail que je n'utilise plus ou presque VCL mais j'ai souvenir que smdbgrid et ses extensions permettait de travailler avec des fichiers Excel (xls pas xlsx) il faudrait que je vérifie mais avec le peu de vacances dont je dispose ...

  7. #7
    Nouveau membre du Club Avatar de JemaCodeur
    Homme Profil pro
    Amateur
    Inscrit en
    Avril 2019
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Amateur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2019
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Salut SergioMaster, votre aide est vraiment la bienvenue vrai que j'ai testé pas mal de composants.

    Merci d'avance

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 164
    Points : 41 346
    Points
    41 346
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    je savais bien que les SMComponents avaient ce genre de chose :
    http://www.scalabium.com/
    The native Delphi components provide fast and direct importing of data from MS Excel/XML/HTML/DBF/Open Office/Paradox files directly without use of any external libraries!
    voir SMImport, gros avantage que j'y avais vu à l'époque, pas besoin d'Excel installé.

  9. #9
    Nouveau membre du Club Avatar de JemaCodeur
    Homme Profil pro
    Amateur
    Inscrit en
    Avril 2019
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Amateur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2019
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Bonjour,

    Je vous remercie tous d'avoir pris de votre temps pour régler mon problème.
    Finalement je suis arrivé à afficher mes données dans un StringGrid en fin.

    Toutefois, j'aimerais savoir vos avis sur la suite car j'aimerais récupérer les données de mon StringGrid et faire une insertion dans la base.
    - Est ce que c'est une bonne idée alors d'utiliser un StringGrid à la place d'un DBGrid ?

    Merci

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 621
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 621
    Points : 25 321
    Points
    25 321
    Par défaut
    Si vous souhaitez recopier une DB vers une autre, plutot sans affichage, utiliser un composant type BatchMove

    Sinon, vous pouvez lire le contenu de votre TADOTable et produire un SQL d'INSERT, comme je l'ai fait de Paradox à Oracle, l'idée est d'écrire un template de INSERT qu'il faut juste remplir la partie VALUES

  11. #11
    Nouveau membre du Club Avatar de JemaCodeur
    Homme Profil pro
    Amateur
    Inscrit en
    Avril 2019
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Amateur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2019
    Messages : 60
    Points : 38
    Points
    38
    Par défaut
    Bonjour ShaiLeTroll,

    Vous avez raison je pouvez éventuellement faire l'import du fichier XLS dans la BD et après la récupérer dans un DBGrid.

    Je vais peut-être creuser là dessus.

    Merci à vous tous

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

Discussions similaires

  1. Importer un fichier excel dans 2 tables avec creation d'identificateurs
    Par ammarijel dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 17/11/2014, 14h17
  2. Importer des fichiers CSV dans SQL Server avec SSIS
    Par nathantahiti dans le forum SSIS
    Réponses: 4
    Dernier message: 02/08/2011, 16h09
  3. Importer un fichier XLS dans une Base de Donnée.
    Par Jerem38 dans le forum MySQL
    Réponses: 3
    Dernier message: 18/05/2009, 23h29
  4. [AC-2002] Importer plusieurs fichiers xls dans Access
    Par Beamish dans le forum VBA Access
    Réponses: 4
    Dernier message: 07/05/2009, 11h50
  5. Importer un fichier texte dans une table avec champ Memo
    Par Steph4fun dans le forum Paradox
    Réponses: 12
    Dernier message: 25/11/2007, 23h10

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