![]() |
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:33 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