Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   ExcelApplication in Delphi xe2 starter (https://www.delphipraxis.net/163465-excelapplication-delphi-xe2-starter.html)

Ykcim 29. Sep 2011 16:17

ExcelApplication in Delphi xe2 starter
 
Hallo Zusammen,

Ich habe ein Programm aus TurboDelphi, welches ich mit Delphi xe2 starter compilieren möchte. Jetzt macht aber die Excelapplication Ärger. xe2 sscheint die Komponente nicht zu finden.
Gibt es die Komponente nicht mehr oder muss ich sie gegen eine andere austauschen?

Vielen Dank
Ykcim

mkinzler 29. Sep 2011 16:20

AW: ExcelApplication in Delphi xe2 starter
 
Notfalls halt selber importieren, ich hoffe mal diese Funktionalität ist in der Starter nicht beschnitten

Bernhard Geyer 29. Sep 2011 16:24

AW: ExcelApplication in Delphi xe2 starter
 
"Einfach" auf die direkte COM/Automatisierungsschnittstelle von Excel ohne den VCL-Wrapper zugreifen.

Ykcim 29. Sep 2011 16:28

AW: ExcelApplication in Delphi xe2 starter
 
Manchmal bekomme ich wirklich Angst vor diesem Forum. Wenn die Antworten noch ein bißchen schneller kämen, dann hätte ich sie noch bevor ich die Frage zuende gestellt hätte... :thumb:

Was das Installieren oder Importieren von Komponenten angeht, habe ich garkeine Erfahrungen. Ich habe bis vorhin ausschließlich TurboDelphi verwendet...

Gibt es dazu auch noch einen Tip?
Welche Komponente müsste importiert werden?
Wo finde ich die?
Wie importiere ich die?

Ups, da ist schon die nächste Hilfstellung - VIELEN DANK!

Zitat:

"Einfach" auf die direkte COM/Automatisierungsschnittstelle von Excel ohne den VCL-Wrapper zugreifen.
:?:

Was ist eine "COM/Automatisierungsschnittstelle von Excel"?
Wie greife ich auf die "COM/Automatisierungsschnittstelle von Excel" zu?
Was ist ein "VCL-Wrapper"?

Ich komme mir gerade SEHR unwissend vor... :oops:

Vielen Dank
Ykcim

Ykcim 15. Nov 2012 12:05

AW: ExcelApplication in Delphi xe2 starter
 
Hallo Zusammen,

ich muss hier noch mal nachhaken, da ich noch keine Antwort auf mein Problem gefunden habe und es jetzt wieder aktuell wird...

Ich möchte die Daten eines StringGrids nach Excel exportieren. Dazu gibt es genug Beispiele und ich habe es in einem Programm mit TurboDelphi auch erfolgreich umgesetzt.
Ich bin aber jetzt auch Delphi xe2 starter umgestiegen und finde dort keine Möglichkeit, wie ich Excel öffnen / steuern kann.

Bin ich alleine mit diesem Problem?
Hat das etwas damit zu tun, dass ich die Starter Version verwende?
Wie machen das andere xe2 Nutzer?

Da es in der Vergangenheit mit einfachen StandardTools möglich war, sollte es doch in der neuen Version erst recht einen Standard geben, oder?

Vielen Dank für Eure Unterstützung

Ykcim

p80286 15. Nov 2012 14:00

AW: ExcelApplication in Delphi xe2 starter
 
Zitat:

Zitat von Ykcim (Beitrag 1191286)
ich muss hier noch mal nachhaken, da ich noch keine Antwort auf mein Problem gefunden habe und es jetzt wieder aktuell wird...

Hier müßten eigentlich jede Menge Beispiele herumgeistern, hast Du einmal die Suche bemüht?

Zitat:

Zitat von Ykcim (Beitrag 1191286)
Da es in der Vergangenheit mit einfachen StandardTools möglich war, sollte es doch in der neuen Version erst recht einen Standard geben, oder?

Schön wär's

Gruß
K-H

Ykcim 15. Nov 2012 21:42

AW: ExcelApplication in Delphi xe2 starter
 
Okay, hier die Lösung, wie ich eine der vielen Procduren, die es dafür gibt angepasst habe.
Das ganze in einer Klasse gekapselt:

Delphi-Quellcode:
uses ... ComObj

Type
   TExcelExport = class
      strict protected
         FExcelApp: OleVariant;
         FWorkbook: OleVariant;
         FWorksheet: OleVariant;
         FRange: OleVariant;
         FData: OleVariant;
         FValue: OleVariant;
         FMaxCol, FMaxRow: integer;
      public
         constructor create(StringGrid : TStringGrid; Pfad:string; Space:integer);
         function RefToCell(Col, Row, Space : Integer) : string;
         function GetExcelApp: OleVariant;
         function GetWorkbook: OleVariant;
         function GetWorksheet: OleVariant;
         function GetRange: OleVariant;
         function GetData: OleVariant;
         function GetValue: OleVariant;
         function GetMaxCol: integer;
         function GetMaxRow: integer;
         procedure SetExcelApp;
         procedure SetWorkbook;
         procedure SetWorksheet;
         procedure SetRange;
         procedure SetData;
         procedure SetValue;
         property ExcelApp: OleVariant read GetExcelApp;
         property Workbook: OleVariant read GetWorkbook;
         property Worksheet: OleVariant read GetWorksheet;
         property Range: OleVariant read GetRange;
         property Data: OleVariant read GetData;
         property Value: OleVariant read GetValue;
         property MaxCol: integer read GetMaxCol;
         property MaxRow: integer read GetMaxRow;
   end;


implementation

function Min(X1, X2 : Integer) : Integer;
begin
   if (X1 < X2) then
     Result := X1
   else
     Result := X2;
end;

{=============================================================================}

function Max(X1, X2 : Integer) : Integer;
begin
   if (X1 > X2) then
     Result := X1
   else
     Result := X2;
end;

{=============================================================================}

//Inhalt eines TStringGrid nach Excel exportieren
constructor TExcelExport.create(StringGrid : TStringGrid; Pfad:string; Space:integer);
var  Row, Col: integer;
begin
  //Verbindung zu Excel herstellen
  FExcelApp := CreateOleObject('Excel.Application');
  try
    if not VarIsNull(FExcelApp) then
    begin
      //Neues FWorkbook öffnen
      FWorkbook :=FExcelApp.Workbooks.open(pfad);
      if not VarIsNull(FWorkbook) then
      begin
        //Maximalen Bereich bestimmen
        FMaxCol := Min(StringGrid.ColCount, FExcelApp.Columns.Count);
        FMaxRow := Min(StringGrid.RowCount, FExcelApp.Rows.Count);
        if (FMaxRow > 0) and (FMaxCol > 0) then
        begin
          //FWorksheet auswählen
          FWorksheet := FWorkbook.ActiveSheet;
          //Bereich auswählen
          FRange := FWorksheet.Range[RefToCell(1, 1, Space), RefToCell(FMaxCol, FMaxRow, Space)];
          if not VarIsNull(FRange) then
          begin
            //Daten aus Grid holen
            FData := VarArrayCreate([1, FMaxRow, 1, FMaxCol], varVariant);
            for Row := 0 to Pred(FMaxRow) do
            begin
              for Col := 0 to Pred(FMaxCol) do
              begin
                FValue := StringToVariant(StringGrid.Cells[Col, Row]);
                FData[Succ(Row), Succ(Col)] := FValue
              end;
            end;
            //Daten dem Excelsheet übergeben
            FRange.Value := FData;
            //Excel anzeigen
            FWorkbook.Activate;
            FExcelApp.Visible := True;
          end;
        end;
      end;
    end;
  finally
    FData    := UnAssigned;
  end;
end;

function TExcelExport.RefToCell(Col, Row, Space : Integer) : string;
var
  Pos : Integer;
begin
  //Spalte bestimmen
  Result := '';
  while Col > 0 do
  begin
    Pos := Col mod 26;
    if Pos = 0 then
    begin
      Pos := 26;
      Dec(Col);
    end;
    Result := Chr(Ord('A') + Pos -1) + Result;
    Col := Col div 26;
  end;
  //Spalte und Zeile zusammenführen
  Result := Result + IntToStr(Row+Space);
end;

function TExcelExport.GetExcelApp;
begin
   Result:=FExcelApp;
end;

function TExcelExport.GetWorkbook;
begin
   Result:=FWorkbook;
end;

function TExcelExport.GetWorksheet;
begin
   Result:=FWorksheet;
end;

function TExcelExport.GetRange;
begin
   Result:=FRange;
end;

function TExcelExport.GetData;
begin
   Result:=FData;
end;

function TExcelExport.GetValue;
begin
   Result:=FValue;
end;

function TExcelExport.GetMaxCol;
begin
   Result:=FMaxCol;
end;

function TExcelExport.GetMaxRow;
begin
   Result:=FMaxRow;
end;

procedure TExcelExport.SetExcelApp;
begin
   FExcelApp:=UnAssigned;
end;

procedure TExcelExport.SetWorkbook;
begin
   FWorkBook:=UnAssigned;
end;

procedure TExcelExport.SetWorksheet;
begin
   FWorksheet:=UnAssigned;
end;

procedure TExcelExport.SetRange;
begin
   FRange:=UnAssigned;
end;

procedure TExcelExport.SetData;
begin
   FData:=UnAssigned;
end;

procedure TExcelExport.SetValue;
begin
   FValue:=UnAssigned;
end;

{=============================================================================}


Aufruf mit Formatierung:

Delphi-Quellcode:
procedure TMain.AdvGlowButton4Click(Sender: TObject);
var  Pfad: string;
      Space: integer;
      Objekt: TExcelExport;
begin
   Space:=2;
   // Programmpfad ermitteln
   Pfad:=ExtractFilePath(ParamStr(0));
   Pfad:=Pfad+'\Temp\Export.xlt';
   Objekt:=TExcelExport.create(Main.FrameTerminVerfolgungIntern1.GridEigene, Pfad, Space);
   Try
      //Excel formatieren
      Objekt.ExcelApp.Range['E2:E2'].Value:='Briefkasten: Alle eigene FAs';
      Objekt.ExcelApp.Range['A3:S3'].Select;     //Den Bereich A1 bis I3 makieren
      Objekt.ExcelApp.Selection.Font.Bold := true;//und im Makierten Bereich die Schriftdicke ändern
      Objekt.ExcelApp.Range[Objekt.RefToCell(1, 1, Space), Objekt.RefToCell(Objekt.MaxCol, Objekt.MaxRow, Space)].Select;
      Objekt.ExcelApp.Selection.borders.weight:=2;
      Objekt.ExcelApp.Range['A3:S3'].Select;
      Objekt.ExcelApp.Selection.borders.weight:=3;
      Objekt.Range.Columns.AutoFit;
      Objekt.ExcelApp.Range['Q:Q'].Columnwidth:=8;
      Objekt.ExcelApp.Range['R:R'].Columnwidth:=0;
      Objekt.ExcelApp.Range['I:I'].Columnwidth:=1.71;
      Objekt.ExcelApp.Range['D:D'].Columnwidth:=13;
      Objekt.ExcelApp.Range['G:G'].Columnwidth:=14.71;
      Objekt.ExcelApp.Range['O:O'].Columnwidth:=22;
      Objekt.ExcelApp.Range['O:O'].WrapText:=true;
      Objekt.ExcelApp.Range['Q:Q'].WrapText:=true;
      Objekt.ExcelApp.Range['D:D'].WrapText:=true;
      Objekt.ExcelApp.Range['G:G'].WrapText:=true;
      Objekt.ExcelApp.Range['A2:O2'].mergecells:=true;
      Objekt.ExcelApp.ActiveSheet.PageSetup.LeftFooter:=Main.StartUser.Caption;
   Finally
      Objekt.Free;
   end;
end;
In diesem Sinne

Ykcim


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz