![]() |
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 |
AW: ExcelApplication in Delphi xe2 starter
Notfalls halt selber importieren, ich hoffe mal diese Funktionalität ist in der Starter nicht beschnitten
|
AW: ExcelApplication in Delphi xe2 starter
"Einfach" auf die direkte COM/Automatisierungsschnittstelle von Excel ohne den VCL-Wrapper zugreifen.
|
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:
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 |
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 |
AW: ExcelApplication in Delphi xe2 starter
Zitat:
Zitat:
Gruß K-H |
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:
In diesem Sinne
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; Ykcim |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz