Einzelnen Beitrag anzeigen

BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: OleContainer und Variant in einem möglich?

  Alt 18. Dez 2008, 14:00
Also habe hier auch nochmal eine Möglichkeit für die, die mit einbinden von Excel in ihre Projekte schwierigkeiten haben und so wie ich vor ein paar Tagen nicht wirklich viel davon wussten. Habe sämtliche wahrscheinlich mögliche Fehlermeldungen bekommen und folgende, wie ich finde, sehr einfache Möglichkeit gefunden, Excel in mein Programm einzubinden. Diesmal aber als externe Variante (damit meine ich Excel wird seperat geladen).

Delphi-Quellcode:
unit Excelsteuerungsunit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtnrs, ComObj, StdCtrls, ComCtrls, ExcelXP;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  excel: Variant;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i, iTemp, lcid: integer;
    exc: TExcelApplication;
    excWB: TExcelWorkbook;
    excWS: TExcelWorksheet;
begin
  // Speicher für Excel, ExcelWorkbook und ExcelWorksheet allocieren
  // Dies ist nötig, da sonst bei dem verbinden (connectTo) mit dem Workbook und
  // Worksheet fehler auftreten
  exc := TExcelApplication.Create(Nil);
  excWB := TExcelWorkbook.create(Nil);
  excWS := TExcelWorksheet.create(Nil);
  // User ID ermitteln
  // dies ist nicht unbedingt nötig, es kann beim laden der Exceldatei (nächster Schritt)
  // auch Problemlos eine Null an Stelle dieser Variablen eingetragen werden
  lcid := GetUserDefaultLCID;
  //vorhandener Exceldatei laden !!! wichtig !!! Die Anzahl der emtyParam ist Office-Versions abhängig
  exc.Workbooks.Open('D:\Tischsteuerung\Steuerungsprogramm Version 1.103\Sensoren.xls', emptyParam, emptyParam, emptyParam, emptyParam
                          , emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam
                          , emptyParam, emptyParam, lcid);
  // Excel soll angezeigt werden
  exc.visible[lcid] := true;
  // verbinden des Workbooks und des Worksheets mit der in der exc geladenen Datei
  excWB.ConnectTo(exc.ActiveWorkbook);
  excWS.ConnectTo(excWB.ActiveSheet as ExcelWorksheet);
  // Laufvariable
  i := 1;
  // in dieser Schleife werden Zahlen in den Zellen in eine ComboBox eingetragen
  // mit ähnlichen Schleifen können auch strings als Einträge in eine ComboBox
  // ermöglicht werden.
  while trystrtoint(excWS.Cells.Item[i+1,1],iTemp)=true do
    begin
      Showmessage('Hallo');
      ComboBox1.Items.Add(excWS.Cells.Item[i+1,1]);
      i:=i+1;
    end;
  // Das erste Element in der ComboBox wird auch aktiv gesetzt
  ComboBox1.ItemIndex := 0;
end;

end.
Habe euch auch den kompletten Quellcode mal reingestellt, da ich meistens nur Beispiele gefunden hab, wo man nicht alle eingebundenen Units oder andere interessante Teile des Quellcodes nicht gesehen hat. Für alle die nicht so wie ich Excel 2003 benutzen sondern eine andere Version hier noch einen Link, den ich hier in DP gefunden hab, wo die Anzahl der emptyParam in der "Open"-Funktion aufgelistet sind und vor allem auch, wofür sie stehen (6.Beitrag):

DP über Excel, emptyParam beim laden einer Datei

Hoffe das hilft anderen, welche ähnliche Probleme haben, wie ich.

MfG
BAMatze
  Mit Zitat antworten Zitat