Exportar un StringGrid a Excel
Artículo por Club Developers · 02 March 2006
3810 vistas
Aquà tenemos un procedure que nos permite exportar el contenido de un TStringGrid a Excel
Recordemos que la directiva $J controla si una constante puede ser modificada o no. Para más información, consultar la ayuda de Delphi de esta directiva.
Un posible modo de uso serÃa:
delphi
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;
Recordemos que la directiva $J controla si una constante puede ser modificada o no. Para más información, consultar la ayuda de Delphi de esta directiva.
Un posible modo de uso serÃa:
delphi
SaveAsExcelFile(StringGrid1,'c:\testxls.xls');