Announcement

Collapse
No announcement yet.

Exel-Tabellen mit Delphi auslesen und beschreiben ....

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

  • Exel-Tabellen mit Delphi auslesen und beschreiben ....

    hallo

    ich möchte mit delphi den inhalte einzelner zellen aus einer Excel-Tabelle auslesen und auch beschreiben ... ich habe zwar diverse komponenten die nach excel "aussahen" gefunden (zb TExcel-Application) aber damit habe ich irgendwie nichts hinbekommen ... und dazu gab es auch keine hilfe .... ich will nichts weiter als Texte ein und auslesen aus den zellen solche extras wie rahmen setzten und schriftfarbe sind nicht notwendig....

    weis jemand wie das geht ...

    thx im vorraus für die hilfe ....

  • #2
    Hallo,

    die Suche hier im FORUM nach der Zeichenkette "TExcelApplication" liefert 30 Beispiele zurück.

    >..und dazu gab es auch keine hilfe ..

    Hinter TExcelApplication steckt eine VCL-Wrapperkomponente für die Automation-Objekte (COM-Objekte) von Microsoft Excel. Nach den COM-Regeln ist der Hersteller des COM-Objekts für die Dokumentation zuständig. Daher ist es korrekt, wenn Borland dazu in seiner Hilfe nichts sagt. Und die Automation-Objekte von Microsoft Office werden von Microsoft sehr ausführlich dokumentiert.

    Das folgende Beispiel stammt aus meinem Buch <i>COM/DCOM/COM+ mit Delphi</i>:

    <pre>

    <font color="#003399"><i>{ ************************************************** **************
    Source File Name : D5E2KTestFrm.pas
    Typ : Formular-Unit
    Autor : Andreas Kosch
    Erstellt am : 04.05.2000
    Compiler : Delphi 5.01 (UpdatePack#1)
    Betriebssystem : Windows NT 4
    Beschreibung : Delphi 5.01 (mit den Office2000-Komponenten
    aus dem UpdatePack#1) steuert EXCEL 2000
    Revisionen :
    ************************************************** ************** }</i></font>

    <b>unit</b> D5E2KTestFrm;

    <b>interface</b>

    <b>uses</b>
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls, Excel2000, OleServer, ComCtrls;

    <b>type</b>
    TForm1 = <b>class</b>(TForm)
    StatusBar1: TStatusBar;
    ExcelApplication1: TExcelApplication;
    ExcelWorkbook1: TExcelWorkbook;
    ExcelWorksheet1: TExcelWorksheet;
    Button_1: TButton;
    Button_2: TButton;
    Button_3: TButton;
    Button_6: TButton;
    EditSheetNr: TEdit;
    Button_4: TButton;
    ButtonBad: TButton;
    ButtonGood: TButton;
    Button_5: TButton;
    LabelBad: TLabel;
    LabelGood: TLabel;
    <b>procedure</b> Button_1Click(Sender: TObject);
    <b>procedure</b> Button_2Click(Sender: TObject);
    <b>procedure</b> Button_3Click(Sender: TObject);
    <b>procedure</b> Button_6Click(Sender: TObject);
    <b>procedure</b> Button_4Click(Sender: TObject);
    <b>procedure</b> ButtonBadClick(Sender: TObject);
    <b>procedure</b> ButtonGoodClick(Sender: TObject);
    <b>procedure</b> Button_5Click(Sender: TObject);
    <b>private</b>
    <font color="#003399"><i>{ Private-Deklarationen }</i></font>
    FLCID : Integer;
    FSheetCount : Integer;
    <b>public</b>
    <font color="#003399"><i>{ Public-Deklarationen }</i></font>
    <b>end</b>;

    <b>var</b>
    Form1: TForm1;

    <b>implementation</b>

    <font color="#003399"><i>{$R *.DFM}</i></font>

    <b>const</b>
    cXLS_FileName = <font color="#9933CC">'C:\Temp\Out\Automation\Excel\Mapp e1.xls'</font>;

    <b>procedure</b> TForm1.Button_1Click(Sender: TObject);
    <b>begin</b>
    FLCID := GetUserDefaultLCID;
    ExcelApplication1.Connect;
    ExcelApplication1.Visible[FLCID] := True;
    ExcelApplication1.UserControl := True;
    <b>end</b>;

    <b>procedure</b> TForm1.Button_2Click(Sender: TObject);
    <b>begin</b>
    ExcelApplication1.Workbooks.Open(cXLS_FileName, False, False,
    EmptyParam,<font color="#9933CC">''</font>,False,False,EmptyParam,
    EmptyParam,false,false,EmptyParam,false,0);
    ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveW orkBook);
    FSheetCount := ExcelWorkbook1.Worksheets.Count;
    ShowMessage(Format(<font color="#9933CC">'Es wurden %d Worksheets im Workbook gefunden.'</font>,
    [FSheetCount]));
    <b>end</b>;

    <b>procedure</b> TForm1.Button_3Click(Sender: TObject);
    <b>var</b>
    iItem : Integer;
    sValue: <b>String</b>;
    <b>begin</b>
    iItem := StrToInt(EditSheetNr.Text);
    <b>if</b> (iItem &gt; FSheetCount) <b>or</b> (iItem &lt; 0 ) <b>then</b>
    <b>raise</b> Exception.Create(<font color="#9933CC">'Dieses Sheet gibt es nicht.'</font>);
    ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Sheets.It em[iItem] <b>as</b>
    _Worksheet);
    sValue := ExcelWorksheet1.Range[<font color="#9933CC">'A5'</font>,<font color="#9933CC">'A5'</font>].Value;
    ShowMessage(sValue);
    <b>end</b>;

    <b>procedure</b> TForm1.Button_4Click(Sender: TObject);
    <b>var</b>
    vArray : OleVariant;
    aRange : Range;
    <b>begin</b>
    ExcelWorksheet1.ConnectTo(
    ExcelWorkbook1.Sheets.Item[3] <b>as</b> _Worksheet);
    <font color="#003399"><i>// Benutzer soll das Sheet auch sehen</i></font>
    ExcelWorksheet1.Activate;
    <font color="#003399"><i>// Überschrift eintragen</i></font>
    vArray := VarArrayOf([<font color="#9933CC">'Datum'</font>, <font color="#9933CC">'Auftragsnummer'</font>, <font color="#9933CC">'Betrag'</font>, <font color="#9933CC">'Info'</font>]);
    aRange := ExcelWorksheet1.Range[<font color="#9933CC">'A1'</font>,<font color="#9933CC">'D1'</font>];
    aRange.Value := vArray;
    aRange.Font.Bold := True;
    aRange.EntireColumn.AutoFit;
    <font color="#003399"><i>// Werte eintragen</i></font>
    vArray := VarArrayCreate([0, 2], varVariant);
    vArray[0] := 12;
    vArray[1] := 20;
    vArray[2] := 30;
    ExcelWorksheet1.Range[<font color="#9933CC">'A2'</font>,<font color="#9933CC">'C2'</font>].Value := vArray;
    <font color="#003399"><i>// Formel eintragen und Ergebnis in Fettschrift formatieren</i></font>
    ExcelWorksheet1.Range[<font color="#9933CC">'D2'</font>,<font color="#9933CC">'D2'</font>].Formula := <font color="#9933CC">'=A2+B2+C2'</font>;
    ExcelWorksheet1.Range[<font color="#9933CC">'D2'</font>,<font color="#9933CC">'D2'</font>].Font.Bold := True;
    <b>end</b>;

    <b>procedure</b> TForm1.ButtonBadClick(Sender: TObject);
    <b>var</b>
    iLoop : Integer;
    iStart: Integer;
    iStop : Integer;
    <b>begin</b>
    iStart := GetTickCount;
    <b>for</b> iLoop := 1 <b>to</b> 100 <b>do</b>
    ExcelWorksheet1.Cells.Item[iLoop,6].Value := 99.99;
    iStop := GetTickCount;
    LabelBad.Caption := IntToStr(iStop - iStart);
    <b>end</b>;

    <b>procedure</b> TForm1.ButtonGoodClick(Sender: TObject);
    <b>var</b>
    iLoop : Integer;
    iStart: Integer;
    iStop : Integer;
    aRange: Range;
    <b>begin</b>
    aRange := ExcelWorksheet1.Cells;
    iStart := GetTickCount;
    <b>for</b> iLoop := 1 <b>to</b> 100 <b>do</b>
    aRange.Item[iLoop,7].Value := 99.99;
    iStop := GetTickCount;
    LabelGood.Caption := IntToStr(iStop - iStart);
    <b>end</b>;

    <b>procedure</b> TForm1.Button_5Click(Sender: TObject);
    <b>begin</b>
    ExcelWorksheet1.Range[<font color="#9933CC">'F1'</font>,<font color="#9933CC">'F100'</font>].Clear;
    ExcelWorksheet1.Range[<font color="#9933CC">'G1'</font>,<font color="#9933CC">'G100'</font>].Clear;
    <b>end</b>;

    <b>procedure</b> TForm1.Button_6Click(Sender: TObject);
    <b>begin</b>
    ExcelWorksheet1.Disconnect;
    <font color="#003399"><i>// Workbook ohne Speichern schliessen</i></font>
    ExcelWorkbook1.Close(False);
    ExcelWorkbook1.Disconnect;
    <font color="#003399"><i>// Excel beenden</i></font>
    ExcelApplication1.Quit;
    ExcelApplication1.Disconnect;
    <b>end</b>;

    <b>end</b>.

    </pre&gt

    Comment

    Working...
    X