AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein ExcelApplication in Delphi xe2 starter
Thema durchsuchen
Ansicht
Themen-Optionen

ExcelApplication in Delphi xe2 starter

Ein Thema von Ykcim · begonnen am 29. Sep 2011 · letzter Beitrag vom 15. Nov 2012
Antwort Antwort
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#1

ExcelApplication in Delphi xe2 starter

  Alt 29. Sep 2011, 16:17
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
Patrick
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: ExcelApplication in Delphi xe2 starter

  Alt 29. Sep 2011, 16:20
Notfalls halt selber importieren, ich hoffe mal diese Funktionalität ist in der Starter nicht beschnitten
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: ExcelApplication in Delphi xe2 starter

  Alt 29. Sep 2011, 16:24
"Einfach" auf die direkte COM/Automatisierungsschnittstelle von Excel ohne den VCL-Wrapper zugreifen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: ExcelApplication in Delphi xe2 starter

  Alt 29. Sep 2011, 16:28
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...

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...

Vielen Dank
Ykcim
Patrick
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: ExcelApplication in Delphi xe2 starter

  Alt 15. Nov 2012, 12:05
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
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: ExcelApplication in Delphi xe2 starter

  Alt 15. Nov 2012, 14:00
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?

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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
804 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: ExcelApplication in Delphi xe2 starter

  Alt 15. Nov 2012, 21:42
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
Patrick
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:24 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