In excel (oä) suchen.

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

Re: In excel (oä) suchen.

Beitrag von gillian_x »

Danke für den Tip, aber leider funktioniert das mit der Ausgabe der Klimazone noch immer nicht :|

Ich poste einfach mal den Code, denke der Fehler ist schon in der Suche, vielleicht findet jemand was

Code: Alles auswählen

 
 
procedure TForm1.Button1Click(Sender: TObject);
 
Var   XLApp: OLEVariant;
      x,y: word;
      path: variant;
      a : Integer;
      suche : string;
 
begin
      a:= StrToInt (Edit2.Text);
      Label2.Caption:= ('Postleitzahl ' + IntToStr(a));
 
 begin
 
     XLApp := CreateOleObject('Excel.Application');
     try
     XLApp.Visible := False;         
     XLApp.DisplayAlerts := False;
     path := edit1.Text;
     XLApp.Workbooks.Open(Path);
 
     for x := 1 to 2 do
     begin
     for y := 1 to 59998 do
     begin
     StringGrid1.Cells[x,y] := XLApp.Cells[y,x].Value;
     end;
     end;
 
  begin
    suche:= Edit2.Text;
    for y:=0 to Stringgrid1.RowCount-1 do
    If Stringgrid1.Cells[x,y]=suche
    then
 
     Label3.Caption := StringGrid1.Cells[2,y];
  end;
 
   finally
   XLApp.Quit;
   XLAPP := Unassigned;
   end;
 
 end;
end;
 

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Re: In excel (oä) suchen.

Beitrag von theo »

Code: Alles auswählen

If Stringgrid1.Cells[x,y]=suche 


Welchen Wert hat x?

Und wozu diese merkwürdigen begin .. end?

gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

Re: In excel (oä) suchen.

Beitrag von gillian_x »

Welchen Wert hat x?


Hmm... Gute Frage? Sollte ich x vorher einen Wert zuweisen?

Begin, end... Kann man das weglassen? Dachte das muss dahin? :|

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Re: In excel (oä) suchen.

Beitrag von theo »

:shock: :?:

Denk nochmal nach.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: In excel (oä) suchen.

Beitrag von Michl »

Ohne die unnötigen "begin"s und "end"s und etwas eingerückt, sieht der Code so aus:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
 
Var   XLApp: OLEVariant;
      x,y: word;
      path: variant;
      a : Integer;
      suche : string;
 
begin
  a:= StrToInt (Edit2.Text);
  Label2.Caption:= ('Postleitzahl ' + IntToStr(a));
 
  XLApp := CreateOleObject('Excel.Application');
  try
    XLApp.Visible := False;
    XLApp.DisplayAlerts := False;
    path := edit1.Text;
    XLApp.Workbooks.Open(Path);
 
    for x := 1 to 2 do
      for y := 1 to 59998 do
        StringGrid1.Cells[x,y] := XLApp.Cells[y,x].Value;
 
    suche:= Edit2.Text;
    for y:=0 to Stringgrid1.RowCount-1 do
      If Stringgrid1.Cells[x,y]=suche then // <-- x hat von der vorherigen Schleife immer noch den Wert 2, Du könntest auch Stringgrid1.Cells[2,y] schreiben.
        Label3.Caption := StringGrid1.Cells[2,y];
 
  finally
    XLApp.Quit;
    XLAPP := Unassigned;
  end;
end

Sollte sich in der 3. Spalte der zu suchende String ("suche") befinden, sollte er so gefunden werden (Rechtschreibung / Groß- und Kleinschreibung beachten!). Falls er in einer anderen Spalte ist, müsstest Du in dieser anderen Spalte suchen.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Re: In excel (oä) suchen.

Beitrag von theo »

Code: Alles auswählen

 <-- x hat von der vorherigen Schleife immer noch den Wert 2, 


Das ist eine gefährliche Annahme und ganz sicher kein guter Stil.
http://lists.freepascal.org/fpc-pascal/ ... 13575.html

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: In excel (oä) suchen.

Beitrag von Michl »

theo hat geschrieben:... und ganz sicher kein guter Stil.
Oha, da hab ich mich scheinbar etwas unglücklich ausgedrückt. Ich wollte keineswegs dies als einen guten Programmierstil hinstellen, wollte dem OP lediglich seinen Code reflektieren.

theo hat geschrieben:Das ist eine gefährliche Annahme...
http://lists.freepascal.org/fpc-pascal/ ... 13575.html
Interessant! Kann mich zwar nicht erinnern jemals eine Variable einer "For"-Schleife "weiterverwendet" zu haben, dass die Variable aber den Endwert, den Endwert + 1 oder sonstigen Wert je nach Compiler/System enthalten kann, habe ich aber noch nicht gewusst (bei mir ist der Zähler immer der Endwert, soweit ich das testen konnte). Danke für den Hinweis!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

Re: In excel (oä) suchen.

Beitrag von gillian_x »

Sorry, aber ich beschäftige mich erst seit kurzem mit Lazarus und bin auch schon etwas länger aus dem programmieren raus :|

Also sollte ich x vorher wieder auf 0 setzen?

Denkt ihr, dass hier mein Fehler liegt?

Lg

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Re: In excel (oä) suchen.

Beitrag von theo »

gillian_x hat geschrieben:
Also sollte ich x vorher wieder auf 0 setzen?

Denkt ihr, dass hier mein Fehler liegt?

Ich habe den Eindruck, dass du vielleicht zuerst einmal einen Einführungskurs machen solltest.
Deine Fragen zeigen einfach, dass du keinen Durchblick hast und sowas kann man nicht im Forum erarbeiten.

Z.B. auch hier: http://www.delphi-treff.de/tutorials/gr ... tutorials/
viewtopic.php?f=21&t=79

gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

Re: In excel (oä) suchen.

Beitrag von gillian_x »

man bin ich blöd! :lol:

jetzt habe ich es! :)

Code: Alles auswählen

 
for y:=0 to Stringgrid1.RowCount-1 do
       If Stringgrid1.Cells[1,y]=IntToStr(a) then
          Label3.Caption := ('Klimazone ' + StringGrid1.Cells[2,y]);
 


will ja in der ersten Spalte suchen und das was in der zweiten steht ausgeben ! :idea:

manchmal steht man aber auch auf dem Schlauch oder so :lol: :lol: :lol: :lol:

wp_xyz
Beiträge: 4893
Registriert: Fr 8. Apr 2011, 09:01

Re: In excel (oä) suchen.

Beitrag von wp_xyz »

Die erste Version eines Programms ist selten die beste. Überleg mal: Brauchst du das StringGrid wirklich? Du könntest doch zu Beginn deines Codes, wenn du die Excel-Zellen ins StringGrid überträgst, gleich prüfen, ob die Postleitzahl in Spalte x=1 dem Suchwort entspricht, und dann bei Übereinstimmung in derselben Zeile (y) die Klimazone nachschlagen). Das spart die doppelte Speicherbelegung durch die Excel- und StringGrid-Zellen, und du kannst das ganze so steuern, dass nicht weiter gesucht wird, nachdem der Treffer schon gefunden wurde. Beachte aber, dass in dem oberen Teil der Prozedur noch etwas zu ändern ist, damit mein Vorschlag optimal funktioniert.

Zum Schluss noch ein Hinweis, falls du das Fach Informatik nach dieser Übung nicht mit Schrecken abwählst und trotzdem dran bleibst: Dass Excel die Indizierung der Zellen mit 1 beginnen lässt, entspricht nicht der Konvention von Lazarus und vielen anderen Programmiersprachen, hier ist der erste Index immer 0. Erzeugt wunderschöne Fehler, wenn man das nicht beachtet...

gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

Re: In excel (oä) suchen.

Beitrag von gillian_x »

hi wp_xyz,

benötige dieses tool für das Master Projekt, hatte bisher im Studium wenig mit Programmieren am Hut, ausser ein C Kurs im Bachelor.

gibt es vielleicht die möglichkeit die daten dauerhaft im stringgrid zu speichern? So das die nicht jedesmal wieder neu eingelesen werden müssen?
das würde ja auch schon viel zeit sparen. dieser gedanke kam mir grad.

LG

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Re: In excel (oä) suchen.

Beitrag von theo »

Man kann StringGrid Inhalte in eine Datei speichern und wieder laden. (Save/LoadFromFile)
Import von CSV geht auch.

http://lazarus-ccr.sourceforge.net/docs ... ofile.html
http://lazarus-ccr.sourceforge.net/docs ... mfile.html

wp_xyz
Beiträge: 4893
Registriert: Fr 8. Apr 2011, 09:01

Re: In excel (oä) suchen.

Beitrag von wp_xyz »

gillian_x hat geschrieben:gibt es vielleicht die möglichkeit die daten dauerhaft im stringgrid zu speichern? So das die nicht jedesmal wieder neu eingelesen werden müssen?

Was meinst du mit "dauerhaft" und "jedesmal"? Solange das Programm läuft, bleiben die Daten ohne gegenteilige Maßnahmen "dauerhaft" im Grid. Beim Neustarten des Programms musst du aber "jedesmal" die Daten neu einlesen, daran führt kein Weg vorbei. Das Einlesen der Daten direkt aus Excel mit Hilfe von OLE ist natürlich quälend langsam. Besser wäre es, wenn du dir die Daten schon aus Excel in eine CSV-Datei exportiert hättest, so wie weiter oben schon vorgeschlagen wurde. Eine solche Textdatei einzulesen geht wesentlich schneller als über das Monster Excel im Hintergrund. Oder du nimmst fpspreadsheet, das liest die Excel-Datei direkt, benötigt aber nicht Excel dafür.

Antworten