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

  1. #1
    Nouveau membre du Club
    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;

  2. #2
    Expert éminent sénior
    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 ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Nouveau membre du Club
    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
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Nouveau membre du Club
    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

    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 ...
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  7. #7
    Nouveau membre du Club
    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

    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é.
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  9. #9
    Nouveau membre du Club
    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
    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
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  11. #11
    Nouveau membre du Club
    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

###raw>template_hook.ano_emploi###