hi, ich habs jetzt wie folgt gelöst:
function TFrorm1.IsProgActive(sClassName: String): Boolean;
var
ClassID: TCLSID;
Unknown: IUnknown;
begin
try
ClassID := ProgIDToClassID(sClassName);
Result := GetActiveObject(ClassID, nil, Unknown) = S_OK;
except
Result := False;
end;
end;
procedure TForm1.Butto1Click(Sender: TObject);
const
xlCellTypeLastCell = $0000000B;
var
WorkAkt,AppAkt:Boolean;
MessPfad: String;
begin
Messpfad:='C:/2004_09_28_Messdaten.xls';
try
AppAkt:=false;
WorkAkt:=true;
try
//Abfrage ob Excel aktiv, dann
if IsProgActive('Excel.Application') then begin
TExcelApplication.ConnectKind := ckNewInstance instead of ckRunningOrNew;
AppAkt:=true;
ExcelApplication1 := TExcelapplication.Create(nil);
ExcelApplication1.ConnectKind := ckRunningOrNew;
ExcelApplication1.Connect;
ExcelApplication1.Visible[GetUserDefaultLCID]:=true;
ExcelApplication1.UserControl:=True;
//Falls Excel aktiv, auch mein Workbook???
if Messpfad <> ExcelApplication1.ActiveWorkbook.Path[GetUserDefaultLCID]+'\'+ExcelApplication1.ActiveWorkbook.Name
then begin
ExcelApplication1.Workbooks.Open
(Pfad,False,False,EmptyParam,'',False,False,EmptyP aram,EmptyParam,false,false,EmptyParam,false,0);
WorkAkt:=false;
end;
ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveW orkBook);
end
else begin
//Wenn nicht offen, dann aktiviere Excel und standartweg einleiten
WorkAkt:=false;
ExcelApplication1 := TExcelapplication.Create(nil);
ExcelApplication1.ConnectKind := ckRunningOrNew;
ExcelApplication1.Connect;
ExcelApplication1.Visible[GetUserDefaultLCID]:=true;
ExcelApplication1.UserControl:=True;
ExcelApplication1.Workbooks.Open(Pfad,False,False, EmptyParam,'',False,False,EmptyParam,EmptyParam,fa lse,false,EmptyParam,false,0);
// Workbook verbinden
ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveW orkBook);
end;
// Woorksheet verbinden und aktivieren
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Sheets.It em['Peltier'] as _Worksheet);
ExcelWorksheet1.Activate;
//Und jetzt Workbook und Worksheet auslesen...
Ich hoff ich kann damit etwas helfen.
Gruß
Daniel
P.S.: Falls noch jemand einen besseren Weg weiß, ich bin immer offen...