![]() |
Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Hallo
Ich würde gerne Excel automatisieren, jedoch scheitere ich schon bei dem Import der TypeLibrary. Egal wie ich versuche die Microsoft Excel 12.0 Object Library zu installiere, scheitere ich. Folgende meldungen bekomme ich. Zusammengekürzt auf die Fehler, Zeilentechnisch sind es schon mehr. Zitat:
Delphi 2010 Professional Microsoft Office 2007 Home and Student Vorgegangen bin ich wie folgt: Komponente / Komponente Importieren / Typenbibliothek / Microsoft Excel 12 ... Klassennamen nicht verändert. Palettenseite: (none) Rest ebenfalls so gelassen wie vorgegeben. Habe es einmal mit Komponenten Wrapper versucht und einmal ohne. Könnte mir hierbei jemand helfen? Gruß Daniel |
AW: Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Hallo,
Du brauchst nicht die Typbibliothek für Office 2007 importieren. Die Office XP Komponenten sind eigentlich schon mitinstalliert, gegebenfalls mußt Du unter Packages noch einen Haken setzen. |
AW: Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Ahh. Diese sind unter Beispiele geführt.
Die XP Komponenten sind aber auch 2007 kompatibel? Beantwortet hat dies, auch wenn es nun vermutlich geht, die eigentliche Frage. Es müsste doch möglich sein dies über die TypenBibliothek gehen. Muss es morgen mal testen. Habe hier keine IDE und kein Excel drauf. Danke schon einmal für die schnelle Antwort |
AW: Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Hallo,
die Office-XP Komponenten funktionieren. Das ist das Gute an COM (OLE), einmal eingeführte Schnittstellen (Interfaces) funktionieren auch in späteren Office Versionen, für neuere Funktionalitäten werden dann neue Intefaces "aufgemacht", allerdings habe ich noch keine Funktionalitäten vermisst (allerdings beschränken sich meine Versuche aufs Austesten, was so geht). Es kann sein, falls Du schon "vorgefertigte" Codeschnipsel von irgendwo hast, das die Anzahl der Parameter, die deine Delphiversion verlangt, von deinem Schnipsel abweicht, meistens helfen dann ein paar "EmptyParam" zusätzlich schon weiter. Für die Suche im Internet wären "Deborah Pate (TeamB)" oder "Binh Ly" gute Anlaufpunkte, viele der gängigen "How to ..." in Bezug auf Office sind ursprünglich von ihnen, egal wer jetzt seinen Namen darunterschreibt :). Gruß Thomas |
AW: Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Danke, ich werds mal ausprobieren.
Ich brauche es nicht für sehr umfangreiche dinge, zumindest bis jetzt... Es soll einfach eine Preisliste aus MySQL ans Excel übergeben werden, natürlich mit ein paar Formatierungen, Hintergrundfarbe, Textfarbe, Zellen -höhe/-breite. Vielleicht auch mal eine kleine Formel düe übergeben wird. Das ganze ist ein Test, ob das mit Delphi und ein wenig Automatisierung besser klappt als es zu Fuß zu machen. Hierbei dürfen die Breite des Dokumentes nicht überschritten werden und die Länge ebenfalls nicht Dann muss eine neue "Seite" her. Gruß Daniel |
AW: Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Hallo,
ich habe selbst einmal für ein Projekt den Report mit Word erstellt inklusive Kopf und Fußzeile, Seitenzahlen etc. Falls Du einen Ansatz brauchst, wie dies oder das mit Delphi zu lösen ist, nutze in Word die Macrofunktion, zeichne die Arbeitschritte auf, die Du normalerweise in Word machen würdest und den von Word erzeugten VBA Code kannst Du zu großen Teilen (mit kleinen Delphi spezifischen Änderungen) in Dein Projekt übernehmen. Gruß Thomas |
AW: Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Hallo
Ich habs nun am Laufen. Durch mehrere Seiten habe ich nun auch einiges abgedeckt in einer kleinen Demo App. Was aber noch Fehlt sind Methoden um den Zellenrahmen zu entfernen, Rahmenteile definieren und in dem Quelltext den ich bisher habe, kann ich auch nur rahmenstärke von 1-4 setzen aber in Excel ansich gibts ja noch mehr, mit Punkten z.B. natürich noch die Methoden wie Rahmenfarbe. Wo kann ich die Doku finden, was alles möglich ist und welche Werte ich einsetzen muss? z.B. sowas:
Delphi-Quellcode:
// SheetType
xlChart = -4109; xlWorksheet = -4167; // WBATemplate xlWBATWorksheet = -4167; xlWBATChart = -4109; // Page Setup xlPortrait = 1; xlLandscape = 2; xlPaperA4 = 9; // Format Cells xlBottom = -4107; xlLeft = -4131; xlRight = -4152; xlTop = -4160; // Text Alignment xlHAlignCenter = -4108; xlVAlignCenter = -4108; // Cell Borders xlThick = 4; xlThin = 2; |
AW: Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Hallo Cyberaxx,
die Doku ist die Hilfe von VBA in Excel, wie madtom schon geschrieben hat, kommt man am besten zum Ziel, wenn man sich einen Macro aufzeichnet und diesen dann in Delphi nachbildet.
Delphi-Quellcode:
Damit wird die Zelle A2 markiert und auf der linken Seite mit einem blauen Rahmen versehen.
olevEXCEL.range['A2','A2'].Select; // Die Zelle A2
olevEXCEL.Selection.Borders[xlEdgeLeft].LineStyle := xlDashDot; olevEXCEL.Selection.Borders[xlEdgeLeft].ColorIndex := 5; // blau olevEXCEL.Selection.Borders[xlEdgeLeft].TintAndShade := 0; olevEXCEL.Selection.Borders[xlEdgeLeft].Weight := xlMedium; Bis bald Chemiker |
AW: Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Hallo
Weder das eine noch das andere mag mein Excel 2007 Die Zelle A2 wird zwar selektiert aber es kommt kein Rahmen. Wenn ich den Makro Recorder benutze sieht es genau so aus. Egal was ich nutze es taucht nicht in Excel auf.
Code:
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone Selection.Borders(xlEdgeLeft).LineStyle = xlNone With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Color = -16777024 .TintAndShade = 0 .Weight = xlThin End With
Delphi-Quellcode:
Hier passiert ebenfalls nichts weiter als der Range selekt.
Excel.Range['A1:L3'].Select;
Excel.Selection.Borders[xlDiagonalDown].LineStyle := xlNone; Excel.Selection.Borders[xlDiagonalUp].LineStyle := xlNone; Excel.Selection.Borders[xlEdgeLeft].LineStyle := xlNone; Excel.Selection.Borders[xlEdgeTop].LineStyle := xlContinuous; Excel.Selection.Borders[xlEdgeTop].Color := -16777024; Excel.Selection.Borders[xlEdgeTop].TintAndShade := 0; Excel.Selection.Borders[xlEdgeTop].Weight := xlThin; ![]() Das hier hingegen funktioniert ohne Probleme es deckt nur leider nicht alles ab was ich benötige. Wo steckt hier nur der Fehler? |
AW: Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Hallo Cyberaxx,
als bei mir funktioniert Dein Quellcode. Vielleicht ist das Worksheet nicht aktiviert.
Delphi-Quellcode:
Bis bald Chemiker
olevEXCEL.ActiveWorkbook.Worksheets['Tabelle1'];
olevEXCEL.range['A2','B2'].Select; ... ... |
AW: Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Hm... Habe es nun geändert auf
Code:
Der Text steht in der betreffenden Zelle und sie ist auch markiert genau wie vorher. Jedoch der Rahmen ist immernoch nicht vorhanden.
EXCEL.ActiveWorkbook.Worksheets['Tabelle1'];
Excel.Cells[2, 1].Value := 'test2'; Excel.range['A2','A2'].value := 'test'; Excel.range['A2','A2'].Select; // Die Zelle A2 Excel.Selection.Borders[xlEdgeLeft].LineStyle := xlDashDot; Excel.Selection.Borders[xlEdgeLeft].ColorIndex := 5; // blau Excel.Selection.Borders[xlEdgeLeft].TintAndShade := 0; Excel.Selection.Borders[xlEdgeLeft].Weight := xlMedium; TExcelApplication hab ich auf meiner Form. Ka aber ohne die gehts ja nicht. Excel Starten:
Delphi-Quellcode:
da kein Arbeitsblatt existiert:
try
Excel := GetActiveOleObject('Excel.Application'); except Excel := CreateOleObject('Excel.Application'); end; Excel.Visible := True;
Delphi-Quellcode:
ist ja auch gleich mien aktives.
Excel.Workbooks.Add(xlWBatWorkSheet);
und zu guter letzt eben die Zelle umranden. |
AW: Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Hallo Cyberaxx,
versuch mal das hier:
Delphi-Quellcode:
procedure TForm1.btnRahmenZeichnenClick(Sender: TObject);
var OLEvExcel: OleVariant; begin OLEvExcel := CreateOleObject('Excel.Application'); OLEvExcel.Visible:= TRUE; OLEvExcel.Workbooks.add; OLEvExcel.ActiveWorkbook.Worksheets['Tabelle1']; OLEvExcel.Range['A1:L3'].Select; OLEvExcel.Selection.Borders[xlDiagonalDown].LineStyle := xlNone; OLEvExcel.Selection.Borders[xlDiagonalUp].LineStyle := xlNone; OLEvExcel.Selection.Borders[xlEdgeLeft].LineStyle := xlNone; OLEvExcel.Selection.Borders[xlEdgeTop].LineStyle := xlContinuous; OLEvExcel.Selection.Borders[xlEdgeTop].Color := -16777024; OLEvExcel.Selection.Borders[xlEdgeTop].TintAndShade := 0; OLEvExcel.Selection.Borders[xlEdgeTop].Weight := xlThin; ShowMessage('Rahmen in Excel ansehen'); OLEvExcel.ActiveWorkBook.Saved:= TRUE; OLEvExcel.Workbooks.Close; OLEvExcel.Quit; OLEvExcel:= Unassigned; end; Bis bald Chemiker |
AW: Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Dies klappt leider auch nicht.
Wenn ich das Excel Fenster anklicke sehe ich das Range Select also das die Felder A1-L3 markiert sind aber klicke ich dann eine Zelle ab, sehe ich dort keinen Rahmen. Ich verstehs nicht, warum klappts bei anderen aber bei mir nicht. Office 2007 liegt in der standard Installation vor. In Delphi habe ich nur die Jedies installiert. Habe nun eben auch ein neues Projekt erstellt und nur diesen Source genutzt. Zusätzlich mal die Komponenten von XP auf 2000 in Delphi umgestellt aber es klappt nicht. |
AW: Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Hallo Cyberaxx,
schaust Du mal im Taskmanger unter Prozesse nach, ob vieleicht noch andere Excel Instanzen laufen die nicht ordentlich geschlossen worden sind. Bis bald Chemiker |
AW: Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Hallo Cyberaxx,
noch ein Versuch:
Delphi-Quellcode:
Bis bald Chemiker
procedure TForm1.btnRahmenZeichnenClick(Sender: TObject);
var OLEvExcel: OleVariant; begin OLEvExcel := CreateOleObject('Excel.Application'); OLEvExcel.Visible:= TRUE; OLEvExcel.Workbooks.add; OLEvExcel.ActiveWorkbook.Worksheets['Tabelle1']; OLEvExcel.Range['A1:L3'].Select; olevEXCEL.Selection.Borders[xlDiagonalDown].LineStyle := xlNone; olevEXCEL.Selection.Borders[xlDiagonalUp].LineStyle := xlNone; olevEXCEL.Selection.Borders[xlEdgeLeft].LineStyle := xlDashDot;//xlContinuous; olevEXCEL.Selection.Borders[xlEdgeLeft].Color := clred;//xlAutomatic; olevEXCEL.Selection.Borders[xlEdgeLeft].TintAndShade := 0; olevEXCEL.Selection.Borders[xlEdgeLeft].Weight := xlMedium; //xlThick; olevEXCEL.Selection.Borders[xlEdgeTop].LineStyle := xlDashDot;// xlContinuous; olevEXCEL.Selection.Borders[xlEdgeTop].Color := clred;//xlAutomatic; olevEXCEL.Selection.Borders[xlEdgeTop].TintAndShade := 0; olevEXCEL.Selection.Borders[xlEdgeTop].Weight := xlMedium; //xlThick; olevEXCEL.Selection.Borders[xlEdgeBottom].LineStyle := xlDashDot;// xlContinuous; olevEXCEL.Selection.Borders[xlEdgeBottom].Color := clred;//xlAutomatic; olevEXCEL.Selection.Borders[xlEdgeBottom].TintAndShade := 0; olevEXCEL.Selection.Borders[xlEdgeBottom].Weight := xlMedium; //xlThick; olevEXCEL.Selection.Borders[xlEdgeRight].LineStyle := xlDashDot;// xlContinuous; olevEXCEL.Selection.Borders[xlEdgeRight].Color := clred;//xlAutomatic; olevEXCEL.Selection.Borders[xlEdgeRight].TintAndShade := 0; olevEXCEL.Selection.Borders[xlEdgeRight].Weight := xlMedium; //xlThick; ShowMessage('Rahmen in Excel ansehen'); OLEvExcel.ActiveWorkBook.Saved:= TRUE; OLEvExcel.Workbooks.Close; OLEvExcel.Quit; OLEvExcel:= Unassigned; end; |
AW: Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Also ich weiß nun nicht was ich sagen soll, sicher werden einige nun lachen und ich nun erstmal in die Ecke.
Mein Originalbeispiel bezog sich nur auf die oberste Linie, diese ist nicht zu erkennen. Habe mal die Range geändert und siehe da sie wird sichtbar. Somit gehe ich nun mal in die Ecke... schämen... @Chemiker: Sry das Du Dich so bemüht hast. Aber durch Dein letztes Beispiel wurde es mir dann doch mal klar. Dies funktionierte direkt, auch wenn ich da wiederum in der Spalte 1 die obere Linie nicht sehe. Den Rest dagegen schon :) Danke |
AW: Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Hallo Cyberaxx,
gut das es jetzt funktioniert. Mir gingen langsam die Ideen aus. Bis bald Chemiker |
AW: Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Ich bin Froh das es nur ein Verständnisproblem meiner Seite war. :)
Habe da aber noch eine kleine Frage und zwar nur nach der Möglichkeit ein Arbeitsblatt auszulesen. Also Abfragen wie, wie viele Blätter vorhanden sind. Wie viele Spalten und Zeilen vorhanden sind. Möchte also nur erstmal gerne wissen ob dies möglich ist, denn darüber habe ich bisher nichts gelesen ausser das man eben den Inhalt einer bestimmten zelle abfragen könnte. Gruß Daniel |
AW: Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Mal zu deinen Fragen die Antwort in VBA. Delphi Übersetzung überlass ich dir:
Sagen wir Excel ist die variable deiner Excel-Application, dann liefert:
Code:
die Anzahl der offenen Workbooks (=Dateien).
Excel.Workbooks.Count
Für ein Workbook (z.B. das Aktive) liefert:
Code:
oder war es
Excel.ActiveWorkbook.Worksheets.Count
Code:
die Anzahl der Arbeitsblätter.
Excel.ActiveWorkbook.Sheets.Count
Für ein Arbeitsblatt, z.B. das letzte, liefert:
Code:
den gefüllten Bereich und
Dim r as Range
Set r = Excel.ActiveWorkbook.Worksheets[Excel.ActiveWorkbook.Worksheets.Count].UsedRange
Code:
die Spalten und Zeilen dieses Bereichs.
r.Columns.Count
r.Rows.Count |
AW: Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Ahh Danke
Das bringt mich doch schon ein wenig weiter :) Danke für die Antwort. |
AW: Delphi 2010 Professional & Excel 2007 TypeLibrary Probleme
Ich bin doch tatsächlich noch einmal da.
Es ist natürlich auch das selbe Thema... Mittels:
Delphi-Quellcode:
Setze ist Einen Namen für ein Feld bzw einen Bereich.
procedure Excel_AddNameReferer(Value: string; Range: string);
var CurrSheetName: string; begin CurrSheetName := Excel.ActiveSheet.Name; Excel.ActiveWorkbook.Names.Add(Value, '=' + CurrSheetName + '!' + Range); end; Jetzt möchte ich das ganze gerne auch umgekehrt nutzen, also die Referenz wieder entfernen. In VBA Script schaut das dann so aus.
Code:
In Delphi dann bei mir so
ActiveWorkbook.Names("Testsheet").Delete
Delphi-Quellcode:
mit (Value) hab ich es auch schon probiert, die Fehlermeldung lautet immer:
Excel.ActiveWorkBook.Names[Value].Delete();
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:16 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