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 :

D7 vers XE2 SaveAsExcellFile bug


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 478
    Par défaut D7 vers XE2 SaveAsExcellFile bug
    Salut,
    Cette fonction fonctionne parfaitement avec D7 mais plus sous XE2(32bits)
    Surement un format plus supporté??? Qui peut 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
    function SaveAsExcelFile(AGrid: TStringGrid; 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;
      I, J: Integer;
    begin
      Result := False;
      FStream := TFileStream.Create(PChar(AFileName), fmCreate or fmOpenWrite);
      try
        CXlsBof[4] := 0;
        FStream.WriteBuffer(CXlsBof, SizeOf(CXlsBof));
        for i := 0 to AGrid.ColCount - 1 do
          for j := 0 to AGrid.RowCount - 1 do
            XlsWriteCellLabel(FStream, I, J, AGrid.cells[i, j]);
        FStream.WriteBuffer(CXlsEof, SizeOf(CXlsEof));
        Result := True;
      finally
        FStream.Free;
      end;
    end;

    PhilLu

  2. #2
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 478
    Par défaut
    J'oubliais de donner la fonction appelée

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

  3. #3
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    Le problème doit être l'Unicode. Essaie d'utiliser des AnsiString (du coup avec perte).

  4. #4
    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
    Voici une fonction un peu similaire que j'avais modifié pour le même problème, regarde le IFDEF :
    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
     
    procedure TXLSWriter.CellStr(vCol, vRow: word; aValue: String;
      vAtribut: TSetOfAtribut = []);
    var
      FAtribut: array [0 .. 2] of byte;
      slen: byte;
    begin
      WriteWord(4); // opcode for string
      slen := length(aValue);
      if slen = 0 then aValue := ' ';
     
      WriteWord(slen + 8); // count of byte
      WriteWord(vCol);
      WriteWord(vRow);
     
      SetCellAtribut(vAtribut, FAtribut);
      fstream.Write(FAtribut, 3);
     
      fstream.Write(slen, 1);
    {$IFDEF UNICODE}
      fstream.Write(AnsiString(aValue)[1], slen);
    {$ELSE}
      fstream.Write(aValue[1], slen);
    {$ENDIF}
    end;

Discussions similaires

  1. [XL-2010] Export vers autre onglet - Bug sur boucle origine inconnue
    Par bickou dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/04/2015, 11h55
  2. Delphi 7 vers XE2
    Par PhilLU dans le forum Débuter
    Réponses: 7
    Dernier message: 17/06/2013, 19h15
  3. Réponses: 0
    Dernier message: 14/11/2011, 12h04
  4. Automation export vers Excel bug 1 fois sur 2
    Par Celia1303 dans le forum Access
    Réponses: 7
    Dernier message: 12/04/2006, 18h28
  5. Bug Excel vers Access
    Par jbaudin dans le forum Access
    Réponses: 2
    Dernier message: 01/12/2005, 16h56

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