Hallo zusammen,
nach langem Gefummel habe ich jetzt doch tatsächlich einen Code der läuft
Einen Schönheitsfehler bezüglich Fehlermeldung "Undeklarierter Bezeichner" für After und Name bleibt erhalten, wenn ich das jedoch richtig verstanden habe ist das kein Beinbruch.
Es sind einige eurer Tips eingeflossen - Danke dafür - mit folgendem Skript kann ich jetzt eine neue Arbeitsmappe mit 3 Arbeitsblättern anlegen und diese auch benennen.
Delphi-Quellcode:
Var ExcelApp : OleVariant;
Function TFormExcel.Excel_Starten(Q,Namen : String; Anz : integer; V : boolean) : boolean;
var OK : boolean;
N1, N2 : string;
I : integer;
begin
OK := true;
try
ExcelApp := GetActiveOleObject('Excel.Application');
Except
try
ExcelApp := CreateOleObject('Excel.Application');
except
Showmessage('Excel konnte nicht gestartet werden!');
OK := false;
end;
end;
if (OK) and (not v) then
begin
ExcelApp.visible := false;
ExcelApp.DisplayAlerts:=False; //unterdrückt die Ausgaben von Hinweisen aus Excel
end;
if Q = '' then //neue Arbeitsmappe anlegen
begin
ExcelApp.Workbooks.Add(xlWBatWorkSheet);
//Eine Arbeitsmappe hat automatisch auch eine Tabelle
N1 := Namen;
if Pos(';',N1)>0 then
begin
N2 := Copy(N1,1,Pos(';',N1)-1);
Delete(N1,1,Pos(';',N1));
end else N2 := 'Seite 1';
ExcelApp.ActiveWorkbook.ActiveSheet.Name := N2;
//soll die Arbeitsmappe mehr als eine Tabelle enthalten dann weitere anlegen
if Anz > 1 then
begin
for I := 2 to Anz do
begin
if Pos(';',N1)>0 then
begin
N2 := Copy(N1,1,Pos(';',N1)-1);
Delete(N1,1,Pos(';',N1));
end else N2 := 'Seite ' + inttostr(I);
ExcelApp.ActiveWorkbook.Worksheets.Add(After := ExcelApp.ActiveWorkbook.Worksheets[I-1]);
ExcelApp.ActiveWorkbook.Worksheets[I].Name := N2;
end;
end else
begin
//hier Action wenn vorhandene Arbeitsmappe geöffnet werden soll
end;
end;
Result := OK;
end;
Function TFormExcel.Excel_Arbeitsmappe_speichern(Z: string):boolean;
Var OK : boolean;
begin
OK := true;
if Z = '' then Ziel := Quelle else Ziel := Z;
if Ziel <> '' then ExcelApp.ActiveWorkbook.saveas(Ziel) else OK := false;
Result := OK;
end;
Procedure TFormExcel.Excel_Schliessen;
begin
ExcelApp.Quit;
ExcelApp := Unassigned;
end;
procedure TFormExcel.Button1Click(Sender: TObject);
begin
if Excel_Starten('','Test 1;Test 2;Test 3;',3,false) then
begin
Excel_Arbeitsmappe_speichern('D:\Eigene Dateien\temp\Test.xlsx');
Excel_Schliessen;
end;
end;
Ein weiteres Problem wo ich noch keinen Ansatz gefunden habe:
Wie im Beispiel zu sehen gebe ich die Datei-Endung mit .xlsx an, was aber wenn der Anwender noch ein älteres Excel hat welches nur xls unterstützt.
Kann ich das irgendwie herausfinden ob xlsx geht oder nicht ??
Gruß
Sidi61