Aus Excel Datei einlesen?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
tuete
Beiträge: 7
Registriert: Sa 3. Nov 2012, 16:45

Aus Excel Datei einlesen?

Beitrag von tuete »

Hallo Leute... ich habe ein Problem...
bevor ich mich hier im Forum angemeldet habe, habe ich im Internet recherchiert, aber leider versteh ich von dem nicht viel, da ich ein totaler Anfänger bin...

Ich will im Pascal Zahlen aus einer Datei einlesen lassen... bevor ich so weit gekommen bin, habe ich erst einmal versucht eine txt Datei einlesen zu lassen, was auch funktioniert hat...

hier ein Bild dazu:
miBeForum1.jpg

Danach habe ich versucht Zahlen aus Excel Datei einlesen zu lassen, habe es aber nicht hinbekommen. Ich dachte, dass es eigentlich genau gleich sein müsste wie bei txt Dateien, aber ist anscheinend nicht der Fall... ich habe im Excel eine Tabelle erstellt mit Zahlen und das soll Pascal einlesen, aber ich habe das leider nicht hinbekommen ~ und das kommt dabei raus, hier ein Bild dazu:
miBeForumExcel.jpg


Ist das doch komplizierter, als ich dachte oder habt ihr vllt andere Vorschläge als Excel? Ich will nämlich eine Tabelle machen mit Variablen, die mit Zahlen definiert sind... Beispiel: A= 46; B= 57 etc und diese Zahlen, dann in eine Tabelle einbringen... Pascal sollte dann diese Zahlen aus der Tabelle einlesen, aber was mache ich falsch?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Aus Excel Datei einlesen?

Beitrag von Christian »

Das Excel Dateiformat lässt sich nicht so einfach wie ne Textdatei lesen.

damit sollts gehn:
http://wiki.freepascal.org/FPSpreadsheet/de
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

tuete
Beiträge: 7
Registriert: Sa 3. Nov 2012, 16:45

Re: Aus Excel Datei einlesen?

Beitrag von tuete »

Danke sehr =)

Darüber hatte ich auch schon etwas gelesen, aber nur wenig...
anscheinend ist das die Lösung, werde mich intersiver damit beschäftigen

MfG, tuete

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Aus Excel Datei einlesen?

Beitrag von Heinrich Wolf »

Hi,

mir war es bisher zu mühsam, mich in die Excel Schnittstelle einzulesen. Ich habe mir immer mit Textdateien beholfen, welche die Spalten mit Tabulator getrennt haben. Das schöne daran ist, dass das zu Excel kompatibel ist.

Heiner

tuete
Beiträge: 7
Registriert: Sa 3. Nov 2012, 16:45

Re: Aus Excel Datei einlesen?

Beitrag von tuete »

Hallo, bin jetzt so einigermaßen weitergekommen... musste viel recherchieren, um überhaupt so weit kommen zu können... habe es geschafft, dass Lazarus die fpspreadsheet und fpspreadsheet visual Komponenten installiert und ich kann Sie jetzt auch benutzen.... das allein war schon eine Hürde :(

jetzt habe ich ein weiteres Problem, im Package von fpspreadsheet waren Beispiele drin, wie man Excel Dateien einliest... einmal das Programm an sich und einmal eine Beispiel- Excel- Datei, damit das Programm, was zum einlesen hat...
ich habe das Programm kopiert und genau so übernommen, außer dass ich den Excel-Datei-Namen, dass das Programm einlesen soll, geändert habe, da ich ja selbst eine andere Exceldatei schon vorher kreiert hatte (Test12) und den Programmnamen habe ich auch geändert (Excel_einlesenFpspreadsheetProblem)... dann habe ich auf kompilieren geklickt, was das Programm auch versucht hat zu machen, jedoch bleibt das Programm immer hängen nachdem ich auf kompilieren klicke und dann steht unten im kleinen Fehlermelde-Fenster dieses hier: 'Linking Excel_einlesenFpspreadsheetProblem.exe'... das Programm bleibt dann hängen und nichts weiter passiert, weswegen ich das programm dann durch zwingen schließen muss...

hier einmal das Programm:
ForumFragen1.jpg


und hier nachdem ich auf kompilieren klicke:
ForumFragen2.jpg
wo liegt denn jetzt das Problem an dem Programm, denn wenn ich das Beispielprogramm aus dem fpspreadsheet- package mit lazarus öffne und kompiliere, funktioniert es, es öffnet die Beispieldatei von fpspreadsheet, aber wenn ich meine eigene Datei öffnen will, funktioniert es nicht ~ warum?
Übrigens habe ich zwar eine eigene Excel-Datei, aber ich habe genau die Zeilen und Spalten mit Zahlen gefüllt, wie die Beispieldatei aus dem fpspreadsheet package... das habe ich gemacht, weil ich prüfen und ausprobieren wollte und dadurch auch mehr lernen, aber das Programm will meine Exceldatei einfach nicht einlesen, weil es immer hängen bleibt :cry:
Bitte um Hilfe

Thomas B.
Beiträge: 90
Registriert: Fr 2. Nov 2007, 13:32
OS, Lazarus, FPC: Win (L 1.0 FPC 2.6.0)
CPU-Target: 32Bit
Wohnort: Ulm

Re: Aus Excel Datei einlesen?

Beitrag von Thomas B. »

Excel97-2003 Dateien mit "sfExcel8" einlesen. Die passende Unit dazu (xlsBiff8) hast Du ja schon eingebunden.
Bzgl. dem Linker-Problem vermute ich als Ursache den Umlaut "ü" im Verzeichnispfad - probiers mal in einem anderen Ordner zu kompilieren.

Edit: Übrigens eine Alternative wäre das freie ODS-Format. Einzulesen mit Hilfe der Unit "fpsopendocument" und der Typenangabe "sfOpenDocument"

tuete
Beiträge: 7
Registriert: Sa 3. Nov 2012, 16:45

Re: Aus Excel Datei einlesen?

Beitrag von tuete »

Dankeschön Thomas =)

Ich habe es jetzt geschafft eine Excel- Datei per Lazarus zu schreiben und Sie wieder einzulesen... deine Hinweise haben mir auch sehr geholfen... vielen vielen Dank... ich werde demnächst das Programm hier hochladen, damit die Leute, die dasselbe Problem haben vllt Hilfe dadurch bekommen...

MfG, tuete

tuete
Beiträge: 7
Registriert: Sa 3. Nov 2012, 16:45

Re: Aus Excel Datei einlesen?

Beitrag von tuete »

Hallo Leute...
leider bin ich auf das nächste Problem gestoßen... ich zeige euch erst einmal die Programme

hier das Programm zum Schreiben einer Exzel Datei:
SpreadsheetSchreiben.jpg




hier das Programm zum Lesen der geschriebenen Exzeldatei:
SpreadsheetLesen.jpg


so siehts aus, wenn ich auf kompilieren klicke:
SpreadsheetLesenDebugger.jpg


Was ich jetzt machen will ist jedoch, dass ich A1:= 40 definiere, sodass ich das im weiteren Programm benutzen und darauf zurückgreifen kann. Ich habe zum Beispiel im weiteren Verlauf des Programmes diese Gleichung: (A1:= A1*y) und im Moment habe ich diese Daten (A1= 40; A2= 55; A3= 24; A4= 56) im Quelltexteditor eingegeben, sodass das Programm auf die Daten zugreifen kann und Sie in die Gleichung einsetzen kann, aber ich will diese Daten aus dem Quelltexteditor löschen und diese Daten aus einer Excel Datei einlesen... jetzt habe ich zwar das Programm zum Lesen einer Exceldatei geschrieben, aber wie mache ich das so, das ich A1:= 40 definiere?

wenn ich jetzt beim Schreiben des Spreadsheets die dritte Spalte der Matrix folgendermaßen ändern würde,
MyWorksheet.WriteUTF8Text( 0, 0, 'A1:=40');
MyWorksheet.WriteUTF8Text( 2, 0, 'A2:=55');
MyWorksheet.WriteUTF8Text( 4, 0, 'A3:=24');
MyWorksheet.WriteUTF8Text( 6, 0, 'A4:=56');
dann würde der diese Daten ja lesen ohne zu gucken, was das überhaupt ist, wegen den Apostrophzeichen (' '), dann wäre das ja keine Definition...

Dann habe ich mir überlegt, ich könnte das vllt mit 'WriteFormula' machen, aber damit kann man ja nur addieren, subtrahieren etc (fekCell, fekAdd, fekSub, fekDiv, fekMul, fekOpSUM)...

Kennt ihr da vllt einen Weg, wie ich das machen könnte oder kann man das überhaupt machen? Ich will ja die Daten aus Excel einlesen, nicht nur einfach lesen, aber das habe ich bisher nicht erreicht... Habe mir das Buch 'Lazarus Klassenbibliotheken und IDE' gekauft, aber da steht nichts zu 'Aus Exceldatei einlesen'... habe aus dem Buch etwas zu SQL gelesen, aber da ich jetzt mit spreadsheet angefangen habe und mich da schon ein bisschen eingelesen und mich damit beschäftigt habe, kenne ich mich damit besser aus als SQL, deswegen würde ich lieber mit spreadsheet weitermachen, als etwas mit Neuem anzufangen...

Ich wäre euch sehr dankbar, wenn ihr mir weiterhelfen könntet...

u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Re: Aus Excel Datei einlesen?

Beitrag von u-boot »

tuete hat geschrieben: Was ich jetzt machen will ist jedoch, dass ich A1:= 40 definiere, sodass ich das im weiteren Programm benutzen und darauf zurückgreifen kann.
Dafür wurden meines Wissens Variablen erfunden, denen man was zuweisen kann.
tuete hat geschrieben:dann würde der diese Daten ja lesen ohne zu gucken, was das überhaupt ist, wegen den Apostrophzeichen (' '), dann wäre das ja keine Definition...
Wenn du einen neuen Text liest, weisst auch nicht schon vorher was drinsteht....... ansonsten wär lesen ja auch unnötig....
Die Prüfung der gelesenen Daten wirst wahrscheinlich selber programmieren müssen. (oder Sicherstellen, dass nix falsches an der Stelle stehen kann...)
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

Thomas B.
Beiträge: 90
Registriert: Fr 2. Nov 2007, 13:32
OS, Lazarus, FPC: Win (L 1.0 FPC 2.6.0)
CPU-Target: 32Bit
Wohnort: Ulm

Re: Aus Excel Datei einlesen?

Beitrag von Thomas B. »

Ich hab's nicht ganz verstanden.
Du kannst Zahlen mit WriteNumber und Texte mit WriteUTF8Text in jede beliebige Excel-Zelle hinein schreiben.
Was Du wahrscheinlich suchst ist:

Code: Alles auswählen

var A1,A2 : Double;
...
A1 := MyWorksheet.ReadAsNumber(0,1);
A2 := MyWorksheet.ReasAsNumber(2,1);
usw.
Wenn es sehr viele Variablen A1,A2,A3,.. werden, dann am besten mit Feldern (z.B ein "array of Double") und Schleifen arbeiten.

ein kleiner Tipp am Rande: den Quellcode am besten als Text im Forumskommentar einfügen, markieren, und dann Freepascal/Lazarus als Highlighter auswählen
-

tuete
Beiträge: 7
Registriert: Sa 3. Nov 2012, 16:45

Re: Aus Excel Datei einlesen?

Beitrag von tuete »

Achsooo... ich glaube das war auch mein Problem... ich wollte nämlich nicht nur, dass Lazarus eine Zelle aus Excel einfach nur im Debugger-Fenster anzeigt, sondern, dass ich halt auf die Daten aus Excel zugreifen und im weiteren Verlauf meines Programms benutzen kann und das funktioniert ja nur, wenn ich es definiere...
ich meine, ich will auf bestimmte Excelzelle/feld zugreifen und die dann im weiteren Verlauf meines Programms benutzen, sodass ich die aus Excel gelesene Daten auch ins Programm einbinden kann, dass z.B meine Gleichung ~A1:=(A1*y)~ die aus Excel gelesene Daten auch erkennt und Sie dann in die Gleichung einsetzt...
was ich jedoch bisher gemacht habe, war, dass ich mit fpspreadsheet eine Exceldatei erstellt habe und die Daten einfach nur als Zeichen im Debugger-Fenster gezeigt habe...
jetzt wollte ich mit der GetCell Methode versuchen.... geht das denn?

Aber erst einmal werde ich dein Vorschlag ausprobieren... danke Thomas :)

tuete
Beiträge: 7
Registriert: Sa 3. Nov 2012, 16:45

Re: Aus Excel Datei einlesen?

Beitrag von tuete »

Thomaaaaaaaaaaasss :D ich daaaaaaaaaaaaaaankeeeeeeeee dir...

das was du mir vorgeschlagen hast, war genau das wonach ich gesucht habe.... vielen vielen Dank...
werde das Programm noch einmal demnächst hier hochladen als Textdatei

Aber erst einmal muss ich wieder in die Vorlesung

MfG, Tülin

Thomas B.
Beiträge: 90
Registriert: Fr 2. Nov 2007, 13:32
OS, Lazarus, FPC: Win (L 1.0 FPC 2.6.0)
CPU-Target: 32Bit
Wohnort: Ulm

Re: Aus Excel Datei einlesen?

Beitrag von Thomas B. »

gern geschehen
übrigens, Herzlich Willkommen im Forum!

Antworten