![]() |
AW: Problem beim Verwenden von Excel
@ GHorn: Der Link behandelt doch nur Strings, und es scheint mir als ob gerade die Abwesenheit eines Strings mein Problem wäre. Oder irre ich?
@ nahpets: Mit EmptyParam anstelle von '' bekomme ich ebenfalls die Fehlermeldung 'Invalid variant operation', und zusàtzlich funktionniert die Prozedur nicht nach einem weiteren Exekutieren, anders als mit ''. Ich habe auch versucht mit hilfe von copy(Excel.Cells...,1,1) aus dem Variant-Problem einen String zu machen, das funktionniert ebenfalls nicht. Ich bin echt am Verzweifeln. |
AW: Problem beim Verwenden von Excel
Dein Programm bekommt Daten immer als Typ OLE-Variant.
Die meisten Datentypen lassen sich automatisch zu einem String konvertieren, manche aber auch nicht. Insbesondere für Zellen ohne Inhalt wird kein leerer String sondern "Unassigned" zurückgegeben. Da wird auch mit Copy kein String draus, Copy verlangt als Parameter bereits einen String. Versuchs doch mal in der Art:
Delphi-Quellcode:
var
vName, vVorname: Variant; sNameVorname: string; begin {...} i := index7[j]; while True do begin Inc(i); vName := Excel.Cells[i, 2].Value; vVorname := Excel.Cells[i, 3].Value; if VarIsEmpty(vName) or (vName = '') then Break; if VarIsEmpty(vVorname) or (vVorname = '') then sNameVorname := vName else sNameVorname := vName + ' ' + vVorname; ComboBox4.Items.Add(sNameVorname); end; Dec(i); {...} end; |
AW: Problem beim Verwenden von Excel
Erstmal Danke für deine Mühe!
Nun frage ich mich doch gleich ob es selbstverständliche wäre, dass ich verstehen würde was in der Funktion "VarIsEmpty" zu stehen hat, oder ist das eine Funktion in der Unit? Wenn sie in der Unit ist, was genau tut sie dann? Bei delphibasics habe ich nämlich nichts dazu gefunden. Und wieso
Delphi-Quellcode:
? - wäre es nicht die Aufgabe der ersten Bedingung, die zweite überflüssig zu machen?
VarIsEmpty(vName) or (vName = '')
|
AW: Problem beim Verwenden von Excel
Zitat:
![]() Zitat:
Das erst beudeutet: "Du hast gar nix" das zweite: Du hast zwar einen String in deinem Variant, dieser ist aber leer. ist wie bei einem DBMS der unterschied zwischen nil/null und '' |
AW: Problem beim Verwenden von Excel
Danke für den Link!
Ich verfüge leider nicht über die Delphi-Hilfe, da ich eine sehr alte Delphi-Version besitze und deren Hilfe nur bis Win XP geladen/benutzt werden kann. Und bisher war ich ganz zufrieden mit dem delphibasics-Angebot. Alles klar, verstehe. Sobald ich zu Hause bin, werde ich es dann mit VarIsEmpty(vName) versuchen! |
AW: Problem beim Verwenden von Excel
Zitat:
Zitat:
![]() ![]() ![]() ![]() |
AW: Problem beim Verwenden von Excel
Ein Mal habe ich es mit:
Delphi-Quellcode:
versucht, und ein Mal mit:
7: begin
i:=0; Excel.ActiveWorkbook.Sheets['7eme'].Select; index:=index7[j]; while (NOT VarIsEmpty(Excel.Cells[(index+i),2].Value)) and (Excel.Cells[(index+i),2].Value<>'') do begin ComboBox4.Items.Add(Excel.Cells[(index+i),2].Value+' '+Excel.Cells[(index+i),3].Value); inc(i); end; end;
Delphi-Quellcode:
Beide Male habe ich die übliche Fehlermeldung bekommen.
7: begin
i:=0; Excel.ActiveWorkbook.Sheets['7eme'].Select; index:=index7[j]; while NOT VarIsEmpty(Excel.Cells[(index+i),2].Value) do begin ComboBox4.Items.Add(Excel.Cells[(index+i),2].Value+' '+Excel.Cells[(index+i),3].Value); inc(i); end; end; Was nun wiederum neu war, ist, dass nach der Fehlermeldung folgende Zeile blau gefärbt wurde:
Delphi-Quellcode:
Nichtsdestotrotz wurden die richtigen Items in die ComboBox eingefügt...
ComboBox4.Items.Add(Excel.Cells[(index+i),2].Value+' '+Excel.Cells[(index+i),3].Value);
Was ist hier los? |
AW: Problem beim Verwenden von Excel
Wenn du es mit
Delphi-Quellcode:
versuchst, was ändert sich?
type
dummy1, dummy2 : string; .... while NOT(VarIsEmpty(Excel.Cells[(index+i),2].Value)) do begin dummy1:=''; dummy2:=''; dummy1:=Excel.Cells[(index+i),2].Value; dummy2:=Excel.Cells[(index+i),3].Value; ComboBox4.Items.Add(dummy1+' '+dummy2); inc(i); end; Gruß K-H |
AW: Problem beim Verwenden von Excel
ES GEHT!
Ich kann es nicht glauben, wie kann das sein? Das kommt doch eigentlich genau auf das raus, was ich mit copy versucht hatte? Du kannst dir nicht vorstellen wie dankbar ich dir bin! :) |
AW: Problem beim Verwenden von Excel
Ich habe nun ein weiteres Problem.
Und zwar wollte ich zum Sortieren von Resultaten quicksort benutzen. Diebezüglich mein Code:
Delphi-Quellcode:
Dies klappt soweit auch, bis auf die Stelle 1 im Array, die bleibt nämlich unverändert. Mit den Beispielwerten die ich zum Test eingefügt habe, wird so mit der for downto Schleife als letzte MessageBox 21 angezeigt.
procedure switch(var a,b:integer);
var aux:integer; begin aux:=a; a:=b; b:=aux; end; function seperate(var a:array of integer;l,r:integer):integer; var i,j,pivot:integer; begin pivot:=a[r]; i:=l; j:=r-1; while i<=j do if a[i]<pivot then inc(i) else if a[j]>pivot then j:=j-1 else begin switch(a[i],a[j]); inc(i); j:=j-1; end; switch(a[i],a[r]); result:=i; end; procedure quicksort(var a:array of integer;l,r:integer); var i:integer; begin if l<r then begin i:=seperate(a,l,r); quicksort(a,l,i-1); quicksort(a,i+1,r); end; end; procedure TForm1.Button3Click(Sender: TObject); var test:array[1..20] of integer;I:integer; begin test[1]:=21;test[2]:=7;test[3]:=12;test[4]:=99;test[5]:=72;test[6]:=3;test[7]:=50;test[8]:=59;test[9]:=17;test[10]:=190; test[11]:=8;test[12]:=19;test[13]:=44;test[14]:=87;test[15]:=6;test[16]:=0;test[17]:=55;test[18]:=59;test[19]:=16;test[20]:=29; quicksort(test,1,20); for i:=20 downto 1 do ShowMessage(IntToStr(test[i])); end; Ich bin den Code mehrmals durchgegangen und kann den Fehler nicht finden... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:22 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 by Thomas Breitkreuz