Mega Code Archive

 
Categories / Delphi / Activex OLE
 

View a tdataset in ms excel

{....} uses DB; {....} private procedure SendToExcel(aDataSet: TDataSet); {....} uses ComObj, ActiveX, Excel2000; // or Excel97 procedure TForm1.SendToExcel(aDataSet: TDataSet); var PreviewToExcel: TExcelApplication; RangeE: Excel2000.Range; //or RangeE: Excel97.Range I, Row: Integer; Bookmark: TBookmarkStr; begin PreviewToExcel := TExcelApplication.Create(Self); PreviewToExcel.Connect; PreviewToExcel.Workbooks.Add(NULL, 0); RangeE := PreviewToExcel.ActiveCell; for I := 0 to aDataSet.Fields.Count - 1 do begin RangeE.Value := aDataSet.Fields[I].DisplayLabel; RangeE := RangeE.Next; end; aDataSet.DisableControls; try Bookmark := aDataSet.Bookmark; try aDataSet.First; Row := 2; while not aDataSet.EOF do begin //Write down Record As Row in msExcel RangeE := PreviewToExcel.Range['A' + IntToStr(Row), 'A' + IntToStr(Row)]; for I := 0 to aDataSet.Fields.Count - 1 do begin RangeE.Value := aDataSet.Fields[I].AsString; RangeE := RangeE.Next; end; aDataSet.Next; Inc(Row); end; finally aDataSet.Bookmark := Bookmark; end; finally aDataSet.EnableControls; end; //Creating Preview from Range A1..ColumnX //Calculating ASCII 64 (Character Before "A") With Dataset FieldsCount //This Method can only handle range A1..Z?, if want to be excel column type //support, exp "AA"/"IV" RangeE := PreviewToExcel.Range['A1', chr(64 + aDataSet.Fields.Count) + IntToStr(Row - 1)]; RangeE.AutoFormat(8, NULL, NULL, NULL, NULL, NULL, NULL); PreviewToExcel.Visible[0] := True; PreviewToExcel.Disconnect; end; // Beispiel: // Example: procedure TForm1.Button1Click(Sender: TObject); begin SendToExcel(Table1); end;