Bonjour,

Je vous prie de m'aider à créer, écrire et lire dans un fichier Excel sans OLE et sans que Delphi soit installé sur le poste, avec Delphi RAD Studio 10.2.

Merci

Voici le code que j'ai trouvé sur internet ; avec TStrinGrid la taille des champs ne dépasse pas 5 caractères :

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
----------------------------------
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;
 
 
 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;
 
 
 
 
 
begin
 
grid.Cells[1,1]:='aaaaaaaaaa'  ;
grid.Cells[2,1]:='bbbbbbbbbb'  ;
grid.Cells[1,2]:='cccccccccc'  ;
grid.Cells[2,2]:='dddddddddd'   ;
 
 
   if SaveAsExcelFile(Grid, 'c:\My.xls') then
    ShowMessage('StringGrid saved!');