Bonjour,

j'exporte le contenu d'un StringGrid vers un fichier Xls à l'aide de ce code :

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
{ ============================================================================== }
function TF_Grille.SaveAsExcelFile(AGrid: TStringGrid; AFileName: string): Boolean;
//     Sauvegarde d'une grille dans un fichier Excel
// Utilisation : SaveAsExcelFile(StringGrid1,'c:\testxls.xls');
// La directive $J contrôle si les constantes typées peuvent être modifiées ou non.
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
  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
        Begin
          If Pos(sLineBreak , AGrid.cells[i, j]) >0 Then ShowMessage('Oui') ;  // détection du passage à la ligne dans la grille
          XlsWriteCellLabel(FStream, I, J, AGrid.cells[i, j]);
        End ;
    FStream.WriteBuffer(CXlsEof, SizeOf(CXlsEof));
    Result := True;
  finally
    FStream.Free;
  end;
end;
{ ============================================================================== }
procedure TF_Grille.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;
{ ============================================================================== }
Dans la StringGrid, j'ai des textes sur plusieurs lignes (grâce à sLineBreak)

à l'export ces textes se retrouvent dans Excel sur une même ligne de la cellule.

Il faudrait que je remplace les sLineBreak par des Alt+Enter (qui passe à la ligne dans Excel)

Je ne sais pas comment faire. Quelqu'un a t'il déjà fait ?

Merci
A+
Charly