Thema: Excel Sheets

Einzelnen Beitrag anzeigen

Sidi61

Registriert seit: 13. Jun 2006
97 Beiträge
 
Delphi XE5 Professional
 
#11

AW: Excel Sheets

  Alt 3. Okt 2016, 20:07
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

Geändert von Sidi61 ( 3. Okt 2016 um 23:09 Uhr)
  Mit Zitat antworten Zitat