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 :

Export Delphi vers Excel très lent


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Par défaut Export Delphi vers Excel très lent
    Bonjour,

    J'utilise la méthode Ole pour exporter mon StringAlignGrid vers un classeur excel.

    Seul probleme, ca met plus d'une minute pour exporter 380 lignes et 25 colonnes.
    Sachant que j'ai des tableaux bien plus gros, je voulais savoir si il existe un autre moyen, beaucoup plus rapide pour exporter des données vers Excel?

    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Citation Envoyé par Sandara Voir le message
    J'utilise la méthode Ole pour exporter mon StringAlignGrid vers un classeur excel.
    C'est-à-dire ?
    Tu ouvres Excel, et tu rempli case par case ?

    Moi, je génère un fichier texte, avec séparateur (le point-virgule par exemple), et je demande à Excel de l'importer (par OLE).
    C'est BEAUCOUP plus rapide.

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Par défaut
    Oui j'utilise Ole pour remplir case par case mon fichier Excel.

    Donc passer par un fichier texte est le plus rapide ou existe il un autre moyen?
    Je préfere me renseigner et savoir s'il en existe une meilleure avant de me lancer dans cette méthode.

    Merci

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Par défaut
    Peux tu m'eclairer sur la démarche à suivre pour faire l'import d'un fichier texte en Ole ?

    Merci

  5. #5
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    moi je te recommande les composants XLSReadWriteII qui sont excellents et ne nécessitent pas Excel sur le poste ... c'est très intéressant notamment quand tu as une politique de migration à OpenOffice
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Si tu veux un truc pas trop complexe gratos et sans besoin d'Excel tu peux interpréter ce bout de code (trouvé sur Torry je crois) :
    Pour voir un exemple d'utilisation tu peux en récupérer un ici (https://sourceforge.net/projects/axbase/)

    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 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;

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

Discussions similaires

  1. export access vers excel en asp
    Par oniric dans le forum ASP
    Réponses: 9
    Dernier message: 24/03/2006, 14h21
  2. [VB6] Problème Export mshflexgrid vers Excel
    Par dubidon dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/02/2006, 13h28
  3. Réponses: 1
    Dernier message: 01/11/2005, 12h04
  4. Export requete vers excel et mise en forme
    Par ston dans le forum Access
    Réponses: 2
    Dernier message: 27/10/2005, 16h55
  5. Export ASP vers excel
    Par steph04 dans le forum ASP
    Réponses: 4
    Dernier message: 04/05/2005, 01h22

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