![]() |
Excel Tabelle auslesen
Hallo.
Ich möchte eine EXCEL Tabelle mit Delphi öffnen und die Daten auslesen. Die Tabelle enthällt 2 Karteikarten. Kann mir jemand helfen wie ich das bewerkstellige? MfG, Ronny |
je nachdem was für eine delphi version du hast findest du im Server Reiter der Komponenten-Palette eine komponente namens ExelWorkSheet. Damit sollte es gehen.
Die Delphi-Hilfe dazu ist eigentlich recht gut. |
Excel Tabelle auslesen
Leider bekomme ich keine Hilfe bei der Komponente.
Wieso weis ich nicht. Im Internet finde ich kein passendes HowTo. Kann mir jemand anders behilflich sein? MfG, Ronny |
Hi !
Schau doch einfach mal auf der Site ![]() Excel Automation ein und bekommst dann mehrere Hits angezeigt. Ist als einstieg in die Automation der Officeanwendungen sehr hilfreich. Hilfe bekommst Du deshalb nicht angezeigt, weil es einfach keine Delphihilfe dazu gibt. Delphi erstellt aus den Office-Objekten einfach entsprechende Units, um die Funktionalität zu kapseln. Und da Office ein MS-Produkt ist, kann man es vergessen, vernünftige Hilfe in zusammenhang mit Delphi zu bekommen. Auf den Seiten des MSDN findet man auch einige Beispiele, die sind aber alle in VisualBasic. Wenn man etwas Übung hat, kann man diese dann nach Delphi umschreiben. Wenn Du nun immernoch nicht weiter kommst, dann sag einfach nochmal bescheid. Werde mir dann mal was konkreteres überlegen und dir eventuell auch Quellcode reinstellen. Gruß, Helld |
Excel Tabelle auslesen
Vielen Dank für die schnelle Antwort.
Leider sind meine Englisch-Kentnisse etwas begrenzt und ich kann mir nicht gerade viel aus den Seite entnehmen. Wenn Sie einen Source haben wäre ich Ihnen dankbar. MfG, Ronny |
HI !
Also erstmal kannst Du mich atürlich duzen :-) Ich werde mal heute abend versuchen mir etwas Zeit zu nehmen und die wichtigsten Sachen zusammentragen. Muss nur jetzt erst mal zum Kunden raus und weiss halt nicht, wann ich wieder da bin !!! Gruss, Helld |
Code:
uses
Excel97; // falls Excel 97 benutzt wird var excel: TExcelApplication; wb: _WorkBook; ws: _WorkSheet; lcid: Integer;
Code:
// Excel öffnen
lcid := GetUserDefaultLCID; excel := TExcelApplication.Create(FormMain); excel.Connect; // Exceldatei laden (test.xls) wb := excel.Workbooks.Open('test.xls', emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, lcid); // erstes Worksheet auswählen ws := wb.Sheets[1] as _WorkSheet;
Code:
// Feld A1 ausgeben
ShowMessage(ws.Cells.Item[y,x].Value);
Code:
// Excel schließen - Datei NICHT speichern
wb.Close(False, emptyParam, emptyParam, lcid); excel.Quit;
Code:
// Excel schließen - Datei speichern
wb.Close(True, 'C:\test.xls', emptyParam, lcid); excel.Quit; |
Delphi und Excel
Hallo.
Der Code hier funktioniert und ich kann auch Daten lesen. Wie bekomme ich aber heraus, wie viele Zeilen und Spalten auch wirklich Daten enthalten? MfG, Ronny |
mh...geh in einer schleife einfach die felder in x und y richtung durch und überprüfe, ob ein inhalt drin ist. dafür darf dann jedoch zwischendurch nicht ein feld leer sein.
sonst fällt mir dazu nix ein momentan... |
Zitat:
Die große Preisfrage ist jetzt noch, ob das Excel, auf dem das Programm dann benutzt werden soll, auch noch installiert sein muss wenn ich Komponenten benutze. Gibt es denn nichts einfaches? Wieso muss immer alles so kompliziert sein :( MfG, Ronny |
excel muss auf jedenfall installiert sein, sonst funktioniert das programm nicht. die komponenten sind nur kapselungen für ne ole verbindung zu excel.
|
Zitat:
:) |
Excel Tabelle auslesen
Hi.
Hmm da muss ich mal suchen. Wieso muss auch alles von M$ immer so kompliziert sein. MfG Ronny |
Kannst ja das csv format benutzen...
|
Excel Tabelle auslesen
Hi.
Hmm CSV geht immer gut nur die KHK-Software will nur Excel exportieren. MfG Ronny |
CB2206 schrieb zur Automatisierung von Excel per Delphi:
"mh...geh in einer schleife einfach die felder in x und y richtung durch und überprüfe, ob ein inhalt drin ist. dafür darf dann jedoch zwischendurch nicht ein feld leer sein" Frage: wie kann ich die ErrorMessage (und den Programmabbruch) bei der Typumwandlung vermeiden, wenn ich dabei ein leeres Excel-Feld einlese? Bzw., wie stelle ich den Feldtyp fest, nachdem ich den Inhalt der Zelle an meine Variable vom Typ OleVariant übergeben habe? Nach dem Einlesen der Zelle weiß ich ja noch nicht, ob das Feld leer, eine Zahl oder ein String ist? |
Hi !
Sorry erst mal, dass ich es bisher nicht geschafft habe, das Tutorial zu schreiben, gehe im Moment im Stress unter :-)) Überlegung: Wenn die Daten in Excel eine stupide Tabelle darstellen, also keinen generierten Report, dann speichere die XLS-Datei als CSV. Oder brauchst Du einen gewissen Automatismus ? Meiner Meinung nach gab es in Excel so etwas ähnliches wie MaxRow (oder so) mit dem man die Anzahl der gefüllten Zeilen abfragen kann. Ich bin aber echt nicht mehr sicher. Zum Glück musste ich bisher nichts auslesen sondern nur in eine Exceltabelle schreiben. Ist irgendwie einfacher :-) Gruß, Helld |
Ich muß in der Excel-Datei auf Daten zugreifen, um Berechnungen auszuführen. Das könnte man auch in VB machen, aber da kenne ich mich nicht gut aus.
Die Datenstruktur ist z.B. in der ersten Zeile in A1 eine Überschrift, in A2 dann ein Kommentar, und in der 3. Zeile dann von "A" bis z.B. "Z" die gemessenen Kanäle. Diese 3. Zeile für die Kanalnamen ist aber nicht fest! Ein Hauptproblem ist, das man schon bei der Suche nach der Zeilennummer, in der die Kanalnamen stehen, eventuell auf leere Zellen trifft, wo auch eine Abfrage nach '' (Leerstring) eine Exception auslöst. Man weiß bei der OleVariant halt nie, welcher Datentyp jetzt aus der Excel-Zelle übergeben wurde. Schreiben ist da viel einfacher, da man ja jeden Typ an die Variant-Variable übergeben kann (hierzu gibt es dann ja auch jede Menge Beispiele im Internet und in Foren). Ich bin aber mittlerweile fündig geworden nach einem ersten wichtigen Schritt: - mit "Case VarType of" (VarType= integer) kann man feststellen, welche Typumwandlung erforderlich ist, bei leeren Excel-Zellen ist es der Typ VarEmpty = 0, also keine Umwandlung oder Abfrage auf Inhalt möglich. Ansonsten kann man Integer- oder Realzahlen an entsprechende eigene Variablen übergeben, die Berechnungen ausführen und das Ergebnis dann wieder in Excel-Zellen schreiben. Rako :lol: |
Re: Excel Tabelle auslesen
Ich hab das ganze auch mal ausprobiert. Wenn ich den Code hier ausführe:
Uses-Units:
Delphi-Quellcode:
Globale Variable:
uses
Excel2000;
Delphi-Quellcode:
Tabelle öffnen
var
FrmMain: TFrmMain; excel: TExcelApplication; wb: _WorkBook; ws: _WorkSheet; lcid: Integer;
Delphi-Quellcode:
Tabelle auslesen
procedure TFrmMain.Button1Click(Sender: TObject);
begin if OpenDialogExcel.Execute then begin // Excel öffnen lcid := GetUserDefaultLCID; excel := TExcelApplication.Create(FrmMain); excel.Connect; // Exceldatei laden wb := excel.Workbooks.Open(OpenDialogExcel.FileName, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, emptyParam, lcid); // erstes Worksheet auswählen ws := wb.Sheets[1] as _WorkSheet; OpenExcel(StringGridExcel); end; end;
Delphi-Quellcode:
krieg ich diese Meldung:
procedure OpenExcel(StringGrid:TStringGrid);
var x,y:Integer; maxCol,maxRow:Integer; begin maxCol := ws.Columns.Count; maxRow := ws.Rows.Count; for x := 0 to maxCol - 1 do begin for y := 0 to maxRow - 1 do begin StringGrid.Cells[x,y] := ws.Cells.Item[x,y].Value; // <-- Hier kracht es beim ersten durchlauf!! end; end; end;
Code:
OLE-Fehler 800A03EC
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:25 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