Announcement

Collapse
No announcement yet.

Export von Delphi 5 nach Excel97 - TExcelWorkSheet, TExcelApplication?

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

  • Export von Delphi 5 nach Excel97 - TExcelWorkSheet, TExcelApplication?

    Ich möchte die in Delphi 5 enthaltenen Komponenten nutzen, um eine zweispaltige Tabelle mit Zahlen nach Excel 97 zu exportieren.
    Mit einer älteren Komponente klappt dies schon. Aber diese neuen Komponenten müssen doch irgendwie zu gebrauchen sein!
    Ich habe auch vergeblich nach einer entsprechenden Hilfedatei gesucht. Und eine Analyse der Sourcen hat mir zur Frage der Erzeugung einer Tabelle nicht viel gebracht.

    Gibt es irgendjemanden, der diese Komponenten erfolgreich nutzt?

  • #2
    Hallo,

    ja sicher - denn sonst wären die von Borland nicht ausgeliefert worden ;-) <br>
    Diese Komponenten kapselt nur die Schnittstelle für die Fernsteuerung von Word, Excel etc. über <b>Automation</b> ein, d.h. den Zugriff auf die <b>COM-Objekte</b> von Word und Excel. Daher finden sich auch viele Beispiel für den Einsatz im Forum-Ordner <b>COM/DCOM</b>. Die Frage der Dokumentation ist im Bereich Automation klar geregelt - der Hersteller der Automation-Server stellt diese zur Verfügung. Im Fall von Word und Excel ist also Microsoft dafür zuständig, wobei hier MS beispielhaft dokumentiert (was die Menge und die Qualität angeht).

    Das folgende Beispiel demonstriert das Übernehmen des Inhalts einer Datenbanktabelle in ein Excel-Worksheet. Excel stellt dazu die Methode <b>CopyFromRecordset</b> zur Verfügung, die alle Daten auf einmal direkt aus einem ADO-Recordset-Objekt auslesen kann:
    <pre>
    unit D5E2KADOTestFrm;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    Db, Grids, DBGrids, ADODB, ComCtrls, StdCtrls, Excel2000, OleServer;

    type
    TForm1 = class(TForm)
    StatusBar1: TStatusBar;
    ADOConnection1: TADOConnection;
    ADOTable1: TADOTable;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    ADOTable1Name: TWideStringField;
    ADOTable1Capital: TWideStringField;
    ADOTable1Continent: TWideStringField;
    ADOTable1Area: TFloatField;
    ADOTable1Population: TFloatField;
    ButtonADO: TButton;
    ButtonExcel: TButton;
    ButtonInsert: TButton;
    ExcelApplication1: TExcelApplication;
    ExcelWorksheet1: TExcelWorksheet;
    ButtonExcelStop: TButton;
    ExcelWorkbook1: TExcelWorkbook;
    procedure ButtonADOClick(Sender: TObject);
    procedure ButtonExcelClick(Sender: TObject);
    procedure ButtonExcelStopClick(Sender: TObject);
    procedure ButtonInsertClick(Sender: TObject);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.DFM}

    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;

    end.
    </pre&gt

    Comment

    Working...
    X