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

Langage Delphi Discussion :

Ajouter une feuille dans classeur excel


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 42
    Points
    42
    Par défaut Ajouter une feuille dans classeur excel
    Bonjour,

    j'ai cette fonction qui me permet d'exporter des données vers 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
    function TFPointeuse.SaveAsExcelFile(ADataSet: TDataSet; AFileName: string): Boolean;
    const
      {$J+} CXlsBof: array[0..5] of Word = ($809, 8, 00, $10, 0, 0); {$J-}
      CXlsEof: array[0..1] of Word = ($0A, 00);
    var
      FStream: TFileStream;
      ICol, iRow: Integer;
     
        procedure XlsWriteCellLabel(XlsStream: TStream; const ACol, ARow: Word;
          const AValue: string);
        var
          L: Word;
        const
          {$J+}
          CXlsLabel: array[0..5] of Word = ($204, 0, 0, 0, 0, 0);
          {$J-}
        begin
          L := Length(AValue);
          CXlsLabel[1] := 8 + L;
          CXlsLabel[2] := ARow;
          CXlsLabel[3] := ACol;
          CXlsLabel[5] := L;
          XlsStream.WriteBuffer(CXlsLabel, SizeOf(CXlsLabel));
          XlsStream.WriteBuffer(Pointer(AValue)^, L);
        end;
    begin
      Result := False;
      FStream := TFileStream.Create(PChar(AFileName), fmCreate or fmOpenWrite);
      try
        CXlsBof[4] := 0;
        FStream.WriteBuffer(CXlsBof, SizeOf(CXlsBof));
        ADataSet.DisableControls;
        ADataSet.first;iRow := 0;
         while not ADataSet.EOF do
         begin
            iRow := iRow+1;
            for ICol := 0 to ADataSet.FieldCount - 1 do
              XlsWriteCellLabel(FStream, ICol+1, iRow,ADataSet.Fields[ICol].AsString);
            ADataSet.Next;
         end;
         ADataSet.DisableControls;
     
     
        FStream.WriteBuffer(CXlsEof, SizeOf(CXlsEof));
        Result := True;
      finally
        FStream.Free;
      end;
    end;
    Le classeur est généré avec une seule seule feuille.
    Ma question est : Comment puis je la modifiée pour avoir 3 feuille dedans ?

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    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 577
    Points : 25 225
    Points
    25 225
    Par défaut
    C'est directement en binaire ?

    XlsWriteCellLabel, je l'ai déjà vu cette fonction, ah oui, c'est dans la FAQ - Comment exporter un TStringGrid vers Excel ?
    Il est fort possible que cela soit plus difficile, surtout ensuite, faudra écrire les cellules dans la bonne feuille

    Utiliser Excel en OLE serait peut-être plus pérenne ? surtout avec les versions XML !
    Le code est plus simple et il est mieux de maitriser ce que l'on utilise !
    Si tu as un peu de budget, le composant TMS FlexCell permet de créer un fichier Excel sans avoir Excel installé

    Tu trouves d'autres exporter Excel gratuit aussi

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Si tu as un peu de budget, le composant TMS FlexCell permet de créer un fichier Excel sans avoir Excel installé

    Tu trouves d'autres exporter Excel gratuit aussi
    Salut,

    +1, le composant TMS FlexCell est très performant! Ou tu peux aussi utilisé les composants XLS Read WriteII .

    Sinon la Biblio TscExcelExport gratuite (for non-commercial use)permet de le faire aussi:
    http://www.scip.be/index.php?Page=ComponentsExcelExport

    Bonne chance

  4. #4
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 42
    Points
    42
    Par défaut
    En fait, j'utilise cette fonction pour creer le fichier excel, puis le compostant ole pour le modifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try
        ExcelApp := GetActiveOleObject('Excel.Application');
      except
      ExcelApp:=CreateOleObject('Excel.Application');
      end;
      MonClasseur:=ExcelApp.Workbooks.Open('C:\Sauvegardes\P2'+ DateNouvFormat +'\Point'+ DateNouvFormat+'.xls');
      MaFeuille:=MonClasseur.Worksheets[1] ;

    Le problème revient à ajouter une autre feuille "MaFeuille2"

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    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 577
    Points : 25 225
    Points
    25 225
    Par défaut
    si tu utilises déjà OLE, pourquoi ne pas utiliser le code de la Comment ajouter une feuille au classeur ?

    Je te laisse lire l'aide MSDN de MonClasseur.Worksheets.Add();


  6. #6
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 42
    Points
    42
    Par défaut
    Lorsque j'ajoute cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Monclasseur.Sheets.Add(EmptyParam,EmptyParam,1,xlWBATWorksheet,0);
    j'ai un problème 'Nombre de paramètres invalide', je suis sous delphi7

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    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 577
    Points : 25 225
    Points
    25 225
    Par défaut
    Selon la MSDN microsoft.office.interop.excel.worksheets.add
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Object Add(
    	Object Before,
    	Object After,
    	Object Count,
    	Object Type
    )
    le dernier zéro me semble effectivement en trop !
    Je suppose que tu l'avais trouvé tout seul, et j'espère voir un prochainement

  8. #8
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 42
    Points
    42
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MonClasseur:=ExcelApp.Workbooks.Open('C:\Sauvegardes\P2'+ DateNouvFormat +'\Point'+ DateNouvFormat+'.xls');
      Monclasseur.Sheets.Add(EmptyParam , EmptyParam ,1,xlWBATWorksheet) ;
     
      MaFeuille:=MonClasseur.Worksheets[1] ;
      MaFeuille2:=MonClasseur.Worksheets[2] ;
    Ce code n'a pas d'effet sur le classeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaFeuille2.Range['A1'].Value:='Nom';
    Ne fait rien

    J'ai l'impression que il y a quelque chose qui manque

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    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 577
    Points : 25 225
    Points
    25 225

  10. #10
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 42
    Points
    42
    Par défaut
    C'est déja fait, mais c'est pas mentionné plus haut;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MonClasseur.Save ;
      MonClasseur.Close(True);
      ExcelApp.Quit;

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    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 577
    Points : 25 225
    Points
    25 225
    Par défaut
    Citation Envoyé par sniperpro Voir le message
    C'est déja fait, mais c'est pas mentionné plus haut;
    Mentionné ? ben si dans la !
    Pilotage OLE d'Excel à partir de Delphi !

    Pourquoi faudrait-il répéter ce que n'importe qui devrait trouver si il le cherche !


Discussions similaires

  1. Importer 1 fichier txt dans une feuille de classeur Excel
    Par agtim dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 27/01/2015, 12h34
  2. Ajouter une feuille dans un classeur fermé
    Par SilkyRoad dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/12/2011, 15h38
  3. Ajouter une feuille dans Excel
    Par lionjpl dans le forum C#
    Réponses: 1
    Dernier message: 20/04/2010, 22h01
  4. ruban excel avec lien sur une feuille du classeur excel 2007
    Par corbisier dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/09/2007, 15h00
  5. Réponses: 2
    Dernier message: 15/05/2006, 08h46

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