![]() |
StringGrid & Excel
Ich habe diesen Post bereits gelesen:
![]() bisheriger Code:
Delphi-Quellcode:
Jetzt würde ich gern einen Button haben, der immer bei einem Klick, in das offene Excel eine Zeile bzw einen Wert an der angegebenen Stelle im offenen Excel Dokument hinzufügt. Leider habe ich es nur geschafft beim Aufruf von Excel Werte zu übergeben.
procedure ExcelFuellen;
var Excel : Variant; begin Excel := CreateOleObject('Excel.Application'); Excel.Application.SheetsInNewWorkBook := 8; //Die 8 is die Anzahl der Sheets Excel.Workbooks.Add; Excel.Sheets.Add; //einen neuen Sheet hinzufügen Excel.Sheets[1].Name := 'DP Sheet'; //Hierbei ist 1 das erste Sheet 2 das zweite usw. Excel.Visible := true; Excel := unassigned; // Frage: was bedeutet das? end; Ist dies auch anders möglich? Danke |
Re: StringGrid & Excel
Hallo BarcB;
Unter TForm die Variable deklarieren:
Delphi-Quellcode:
Und dann einfach unter ButtonClick schreiben:
private
{ Private-Deklarationen } public { Public-Deklarationen } Excel: Variant;
Delphi-Quellcode:
Bis bald Chemiker
procedure TForm1.Button2Click(Sender: TObject);
begin Excel.Worksheets['Tabelle1'].Activate; Excel.cells[10,20]:= 'Testausgabe'; end; |
Re: StringGrid & Excel
Zitat:
Bei einer "richtigen" Klasse würde man Excel.free aufrufen. |
Re: StringGrid & Excel
Hallo,
wenn das aufrufende Programm geschlossen wird, sollt man Excel auch schließen. Für diesen Fall würde ich diesen Code empfehlen.
Delphi-Quellcode:
Bis bald Chemiker
procedure TForm1.FormDestroy(Sender: TObject);
begin if not VarIsEmpty(Excel) then begin Excel.DisplayAlerts:= FALSE; Excel.Quit; Excel := Unassigned; end; end; |
Re: StringGrid & Excel
sorry wurde ja beantwortet
|
Re: StringGrid & Excel
Hallo,
Delphi – Hilfe benutzen, „Unassigned“ markieren und STRG-F1 Taste drücken. Excel.Visible := true; Excel := unassigned; In dieser Kombination ist das Blödsinn, weil Du danach keinen Zugriff auf Excel mehr hast. Bis bald Chemiker |
Re: StringGrid & Excel
Super, dass funktioniert schonmal richtig gut!
Nun noch eine Frage: Wenn man aus Delphi Excel zum speichern bringen will "Excel.ActiveWorkbook.SaveAs('daten.xls');" dann speichert Excel die Datei im voreingestellten Speicherordner für Excel Dateien, bei mir Eigene Dateien. Ich möchte die Datei aber gern im selben Verzeichnis, wie in dem das Programm läuft, speichern. |
Re: StringGrid & Excel
Hallo,
mit Ordner:= ExtractFilePath(ParamStr(0)); Bis bald Chemiker |
Re: StringGrid & Excel
Vielen Dank erstmal, hat mir alles sehr geholfen!
Bis zu nächsten Frage! |
Re: StringGrid & Excel
Empfiehlt es sich die Excel Verbindung mit
Excel := CreateOleObject('Excel.Application'); aufzubauen oder lieber gleich die TExcelApplication Komponente nutzen? Wenn ich jetzt ein bestehendes Excel Dokument laden möchte, wie stellt man am besten die Verbindung zu diesem her? |
Re: StringGrid & Excel
Hallo BarcB,
das sind zwei Verschiedene Möglichkeiten. Excel := CreateOleObject('Excel.Application'); späte Bindung Mit der Komponente TExcelApplication baute man eine frühe Bindung auf. Mit beiden Verfahren ist es möglich eine bestehendes Excel – Dokument zu laden. Beide Verfahren haben ihre Vor- und Nachteile. Mit TExcelApplication (frühen Bindung) Vorteil: schneller, Fehlerprüfung beim Compilieren, Programmierhilfe vorhanden. Nachteil: Der entsprechende Automations-Server Excel muss auf dem Entwicklungsrechner vorhanden sei. (Für mich persönlich der größte Nachteil) Man muss mehr Quell – Code schreiben. Welches Verfahren man nun benutzt hängt nun davon ab was man damit machen will. In den meisten Fällen ist die frühre Bindung zu bevorzugen. Bis bald Chemiker |
Re: StringGrid & Excel
Also einmal muss ich beim start des Programms Excel öffnen, den Inhalt auslesen und danach kann Excel eigtl wieder geschlossen werden.
Beim zweiten Programm muss Excel gestartet werden und solange das Programm läuft muss auch Excel offen bleiben. Hier (oder in beiden Fällen!?) empfiehlt sich dann wohl die Komponente. |
Re: StringGrid & Excel
Hallo BarcB,
ist mit späte und frühe Bindung möglich. Da fällt mir noch ein Nachteil für die frühe Bindung ein. Es haben sich bei machen Excel – Versionen die Parameter – Anzahl von einigen Befehle geändert z.B. beim Excel.Workbooks.Open, sind es bei ExcelXP 16 Parameter, bei älteren Versionen ist die Anzahl der Parameter aber geringer. Bis bald Chemiker |
Re: StringGrid & Excel
Zitat:
Nehmen wir es einfach für eine späte Bindung! okay jetzt hab ichs selber :)
Delphi-Quellcode:
Excel := CreateOleObject('Excel.Application'); Excel.Workbooks.Open(ExtractFilePath(ParamStr(0))+'Kontenliste\konten.xls'); Excel.Visible := true; |
Re: StringGrid & Excel
Zitat:
Was genau hast du denn vor? |
Re: StringGrid & Excel
Ich werde aus Excel Informationen entnehmen und gleichzeitig auch wieder speichern.
Mal ne andere Frage, wenn ich 2 Forms habe und in Form1 die Verbindung mit Excel hergestellt wird, kann man dann in Form2 auch darauf zugreifen? |
Re: StringGrid & Excel
Hallo BarcB,
mit z.B.:
Delphi-Quellcode:
Bis bald Chemiker
Excel.Workbooks.Open (DateiName);
|
Re: StringGrid & Excel
Hallo BarcB,
warum soll das nicht gehen? Es muss nur sichergestellt sein das Form2, die Excel – Variable bekannt ist. Warum willst Du Excel ständig offen halten? Es ist doch ohne Probleme möglich z.B. 1. Excel zu starten 2. Excel – Datei laden 3. Excel – Werte zu verarbeiten 4. Excel wieder schließen evt. Vorher die Excel – Datei speichern. Bis bald Chemiker |
Re: StringGrid & Excel
Weil ich dann nur am öffnen/schließen bin.
Die Daten werden über Netzwerk und Internet ständig aktualisiert und ich möchte diese möglichst 'Live' in diese Datei speichern. Chemiker, wie mach Form2 die Excel Variable bekannt? Unit2.Excel := Unit1.Excel; habs :D |
Re: StringGrid & Excel
Zitat:
die erfahrung hat gezeigt, dass z.b. EXCEL öfters die daten zerschiesst. falls es etwas wichtiges ist, könntest du deine auswertungen vergessern. in so einem falle, zwischenspeichern und erst bei bedarf ans EXCEL übertragen. da ist es dann auch nicht problematisch wenn EXCEL abschmiert und nur noch datenschrott hinterlässt :-) |
Re: StringGrid & Excel
Is ja für schule..
|
Re: StringGrid & Excel
Und noch ne Frage.
Wie kopiert man ein Sheet innerhalb eines Workbooks? Wenn ich eins kopieren will erstellt er immer ein neues Workbook. Sad |
Re: StringGrid & Excel
Hallo BarcB,
ich kann grenzgaenger nur beipflichten ich würde so etwas, ohne Excel machen mit den Biff – Format. Zitat:
Zitat:
Etwas Hintergrund – Information: Das oberste Objekt der Hierarchie in Excel ist die Excel – Applikation. Eine Ebene tiefer sind die Workbooks (Arbeitsmappen), dann folgt wieder eine Stufe tiefer die Sheets (Tabellenblätter) usw. Abhängig von der verwendeten Methode (z.B. .Add) kannst Du ein Diagramm, -Makro- oder Tabellenblatt oder nur Tabellenblätter (Worksheets- Auflistung) hinzufügen. Arbeitsmappen müssen in der Regel explizit angesprochen werden, wenn mehrere davon offen sind und nur eine bestimmte davon etwas ausführen soll. Das bedeutet in Deinem Fall, dass eine OleVariabel verwendet wird, um die spezielle Arbeitsmappe (Workbook) anzusprechen.
Delphi-Quellcode:
WB ist jetzt die Arbeitsmappe mit der Du was ausführen willst.
WB:= Excel.Workbooks.Open (ExcelMappDateiName); // WB= Workbook als OleVariabel
Delphi-Quellcode:
Das erste Tabellenblatt in der Arbeitsmappe die zuvor geladen worden ist, wird kopiert und die Kopie wird vor dem Original Arbeitsblatt eingetragen.
WB.Worksheets[1].copy (Before:=WB.Worksheets[1]);
Delphi-Quellcode:
Das kopierte Arbeitsblatt ist jetzt aktiv und wird mit einem Namen versehen. Das kopierte Arbeitsblatt hat den Name ‚Kopie’.
WB.ActiveSheet.Name := 'Kopie';
Bis bald Chemiker |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:08 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