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

Bases de données Delphi Discussion :

exporter données (requete ou DBGrid) vers Excel


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 75
    Points : 59
    Points
    59
    Par défaut exporter données (requete ou DBGrid) vers Excel
    bonjour
    je voudrais importer des données contenues dans des tables (SQLServer) dans Excel.
    par exemlpe grace à une requete (qui effectue des jointures et récupère les champs qui m'interressent)
    je ne sais pas comment m'y prendre car je n'utilise jamais excel.
    grace à la fac j'arrive à créer une feuille excel et y inserer des valeurs.
    Mais là pour des tables ...
    donc une solution serait peut-etre de le faire avec une boucle, je lance me requete SQL et puis après je remplis un peu comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while not requete.eof do
    MaFeuille.Cells.Item[i,j].Value:=requete.fieldByName;
    requete.next
    etc...
    mais j'ai vu le composant excelQueryTable que je n'aarrive pas à faire marcher (je ne l'ai pas dans l'aide) donc peut etre ce serait + simple avec ceci
    ou alors peut on directement transformer un DBGrid en feuille excel ???
    merci de me donner des pistes

  2. #2
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Exporte dans un fichier CSV (colonnes séparées par un ";") ou mieux TSV (colonnes séparées par une tabulation).

    Exemple dans la

    http://delphi.developpez.com/faq/?pa...etfichiertexte

    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

  3. #3
    Membre régulier Avatar de dleu
    Profil pro
    Inscrit en
    Août 2004
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 169
    Points : 77
    Points
    77
    Par défaut
    Salut,

    Le code ci-après exporte les valeurs contenues dans un stringGrid dans un fichier 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
    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
     
    {************************************************************************}
    {****** PROCEDURES ET FONCTIONS POUR L'EXPORTATION VERS EXCEL      ******}
    {************************************************************************}
    function RefToCell(RowID, ColID: Integer): string;
    var
      ACount, APos: Integer;
    begin
      ACount := ColID div 26;
      APos   := ColID mod 26;
      if APos = 0 then
      begin
        ACount := ACount - 1;
        APos   := 26;
      end;
     
      if ACount = 0 then
         Result := Chr(Ord('A') + ColID - 1) + IntToStr(RowID);
     
      if ACount = 1 then
         Result := 'A' + Chr(Ord('A') + APos - 1) + IntToStr(RowID);
     
      if ACount > 1 then
         Result := Chr(Ord('A') + ACount - 1) + Chr(Ord('A') + APos - 1) +
         IntToStr(RowID);
    end;
     
    //Exportation du contenu du StringGrid vers Excel
    function StringGridToExcelSheet(Grid: TStringGrid; SheetName, FileName: string;
      ShowExcel: Boolean): Boolean;
    const
      xlWBATWorksheet = -4167;
    var
      SheetCount, SheetColCount, SheetRowCount, BookCount: Integer;
      XLApp, Sheet, Data: OLEVariant;
      I, J, N, M: Integer;
      SaveFileName : String;
    begin
      //calcule la quantité de feuilles nécessaires
      SheetCount := (Grid.ColCount div 256) + 1;
      if Grid.ColCount mod 256 = 0 then
         SheetCount := SheetCount - 1;
      //calcule la quantité de classeurs nécessaires
      BookCount := (Grid.RowCount div 65536) + 1;
      if Grid.RowCount mod 65536 = 0 then
         BookCount := BookCount - 1;
     
      //Creation d'Excel-OLE Object
      Result := False;
      XLApp := CreateOleObject('Excel.Application');
      try
        //pointe sur la feuille excel
        if ShowExcel = false then
           XLApp.Visible := False
        else
           XLApp.Visible := True;
        //ajout Workbook
        for M := 1 to BookCount do
        begin
          XLApp.Workbooks.Add(xlWBATWorksheet);
          //place les feuilles
          for N := 1 to SheetCount - 1 do
          begin
            XLApp.Worksheets.Add;
          end;
        end;
        //ajoute les colonnes
        if Grid.ColCount <= 256 then SheetColCount := Grid.ColCount
        else SheetColCount := 256;
        //ajoute les lignes
        if Grid.RowCount <= 65536 then SheetRowCount := Grid.RowCount
        else SheetRowCount := 65536;
     
        //remplissage de la feuille
        for M := 1 to BookCount do
        begin
          for N := 1 to SheetCount do
          begin
            //va chercher les data
            Data := VarArrayCreate([1, Grid.RowCount, 1, SheetColCount], varVariant);
            for I := 0 to SheetColCount - 1 do
              for J := 0 to SheetRowCount - 1 do
                if ((I+256*(N-1)) <= Grid.ColCount) and ((J+65536*(M-1)) <= Grid.RowCount) then
                  Data[J + 1, I + 1] := Grid.Cells[I+256*(N-1), J+65536*(M-1)];
     
            XLApp.Worksheets[N].Select;
            XLApp.Workbooks[M].Worksheets[N].Name := SheetName + IntToStr(N);
            //formate les cellules en string
            XLApp.Workbooks[M].Worksheets[N].Range[RefToCell(1, 1), RefToCell(SheetRowCount,
              SheetColCount)].Select;
            XLApp.Selection.NumberFormat := '@';
            XLApp.Workbooks[M].Worksheets[N].Range['A1'].Select;
            //remet les données en place
            Sheet := XLApp.Workbooks[M].WorkSheets[N];
            Sheet.Range[RefToCell(1, 1), RefToCell(SheetRowCount,SheetColCount)].Value := Data;
          end;
        end;
        //Enregistre le classeur excel
        try
          for M := 1 to BookCount do
          begin
            //rajoute le numéro du classeur dans le nom de fichier choisi
            SaveFileName := Copy(FileName,1,Pos('.',FileName)-1) + IntToStr(M) +
            Copy(FileName,Pos('.',FileName),
            Length(FileName)-Pos('.',FileName)+1);
            XLApp.Workbooks[M].SaveAs(SaveFileName);
          end;
          Result := True;
        except
          // Error?
        end;
      finally
        //Excel termine
        if (not VarIsEmpty(XLApp)) and (ShowExcel = false) then
        begin
          XLApp.DisplayAlerts := False;
          XLApp.Quit;
          XLAPP := Unassigned;
          Sheet := Unassigned;
        end;
      end;
    end;
    Tu lances la création de la feuille Excel par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    StringGridToExcelSheet(StringGrid1,'Titre de la feuille excel', FichierExcel,true);
    Où FichierExcel est du type FileName.

    Voilà, j'espère que cela te sera utile.

    dleu

    ɹəᴉpᴉp

  4. #4
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    Bonjour
    merci pour les réponses
    voilà j'essaye d'utiliser ces fonctions gentiment données
    mais je me heurte à un problème :
    je dois remplacer le StringGrid par un DBGrid donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Grid.ColCount devient Grid.Columns.Count
    par contre je ne trouve pas l'équivalent pour les lignes
    j'ai vu qu'il existe cette fonction mais je n'arrive pas à l'utiliser ... (identificateur non déclaré)

    et je ne sais pas non plus trouver l'équivalent pour cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Grid.Cells[I+256*(N-1), J+65536*(M-1)];


    je continue de chercher mais :
    en tous cas merci pour le code

  5. #5
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    en fait la fonction dans la FAC (le lien de Bloon) marche très bien

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

Discussions similaires

  1. exporter données d'un datagrid vers excel
    Par kat40 dans le forum VB 6 et antérieur
    Réponses: 21
    Dernier message: 18/03/2008, 16h25
  2. Exporter données textbox Visual Studio vers Excel
    Par vérokit dans le forum VB.NET
    Réponses: 2
    Dernier message: 17/01/2008, 10h14
  3. Exportation de données d'un formulaire vers Excel
    Par bzhmorgane dans le forum IHM
    Réponses: 2
    Dernier message: 05/06/2007, 10h36
  4. Exporter les données d'une flexgrid vers Excel
    Par ecarbill dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/08/2006, 18h06
  5. exporter mon dbgrid vers excel
    Par nil dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/04/2006, 10h44

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