Announcement

Collapse
No announcement yet.

Datenexport aus Delphi nach MS-Excel

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datenexport aus Delphi nach MS-Excel

    Hallo,

    ich habe in einem dbgrid die Werte der Abfrage slect * from testdb. Diese Werte möchte ich komplett nach MS-Excel exportieren.
    Leider weiss ich nicht wie.

    Kann mir jemand auf die Sprünge helfen???
    Vielen dank im Voraus.

  • #2
    Hallo,

    für diese Aufgabe stehen mehrere Wege zur Verfügung. Am flexibelsten ist das direkte Einfügen der Datenmenge über <b>Automation</b>. Das <b>Range</b>-Objekt von Excel stellt dazu die Methode <b>CopyFromRecordset</b> zur Verfügung, um eine Datenmenge direkt von einem ADO-RecordSet-Objekt zu übernehmen. Das folgende Beispiel demonstriert die Vorgehensweise. Nachdem die Spaltenbeschriftung über Automation zugewiesen wurde, erhält Excel den Auftrag, den Inhalt der Datenmenge im zugewiesenen Bereich einzufügen:
    <pre>
    uses ADOInt;

    const
    cXLS_FileName = 'C:\Temp\Out\Automation\Excel\Mappe1.xls';

    procedure TForm1.ButtonADOClick(Sender: TObject);
    begin
    ADOConnection1.Connected;
    ADOTable1.Open;
    end;

    procedure TForm1.ButtonExcelClick(Sender: TObject);
    begin
    ExcelApplication1.Connect;
    ExcelApplication1.Visible[GetUserDefaultLCID] := True;
    ExcelApplication1.UserControl := True;
    ExcelApplication1.Workbooks.Open(cXLS_FileName, False, False,
    EmptyParam,'',False,False,EmptyParam,
    EmptyParam,false,false,EmptyParam,false,0);
    ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveW orkBook);
    ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Sheets.It em[3] as
    _Worksheet);
    ExcelWorksheet1.Activate;
    end;

    procedure TForm1.ButtonInsertClick(Sender: TObject);
    var
    aRS : _RecordSet;
    iCnt : Integer;
    i : Integer;
    aRange : Range;
    aField : Field;
    begin
    aRS := ADOTable1.Recordset;
    iCnt := aRS.Fields.Count;
    // Spaltenbeschriftung
    for i := 1 to iCnt do
    begin
    aRange := IDispatch(ExcelWorksheet1.Cells.Item[9,i]) as Range;
    aRange.Font.Bold := True;
    aField := aRS.Fields[i-1];
    aRange.Value := aField.Name;
    aRange.EntireColumn.ColumnWidth := aField.ActualSize;
    end;
    // Daten aus der ADO-Datenmenge kopieren
    ExcelWorksheet1.Range['A10','A10'].CopyFromRecordset(aRS,
    EmptyParam, EmptyParam);
    end;

    procedure TForm1.ButtonExcelStopClick(Sender: TObject);
    begin
    ExcelWorksheet1.Disconnect;
    // Workbook ohne Speichern schliessen
    ExcelWorkbook1.Close(False);
    ExcelWorkbook1.Disconnect;
    // Excel beenden
    ExcelApplication1.Quit;
    ExcelApplication1.Disconnect;
    end;
    </pre&gt

    Comment

    Working...
    X