Bonjour,

Avec Delphi 7, sous windows 10.

Je suis capable d'exporter le contenu d'un Tstringgrid au format excel avec 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
 
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 
  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;

J'arrive à ouvrir le .xls généré avec excel 2013 mais l'application à laquelle il est destiné refuse de l'ouvrir. Si, par contre, je l'ouvre avec excel 2013 et le sauve aux format [Excel 97 - Modèle Excel 2003], l'application en question accepte d'en faire son repas.

Ma question est donc la suivante : est-il selon vous possible de spécifier quelque chose dans le code que j'utilise pour rendre le .xls généré compatible avec leformat [Excel 97 - Modèle Excel 2003] ?

Ou mieux, quelqu'un connait une façon d'exporte le contenu d'un Stringgrid à ce format avec autre chose (composant, code, OLE etc.)

Par avance merci.

Eric Beaumard