[ Delphi ] excel document afzoeken naar lege plek

Pagina: 1
Acties:

  • Tryharder
  • Registratie: April 2002
  • Laatst online: 17-08 17:00
Ik ben bezig met een programma dat regels in excel vult met gegevens ingevuld in een standaard form.

Probleem is het zoeken naar de eerstvolgende lege cel in een bestaand excel bestand.Heb het geprobeerd met repeat lus:

i:=1;
repeat
i:=i+1;
until WS.Range['a'+inttostr(i),'a'+inttostr(i)].Value='';

dan heb ik de i toch gevuld met de eerstvolgende vrije regel...?

Probleem is de foutmelding "Invalid Variant Conversion"...

Iemand een idee? thnx.

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 01:20

Delphi32

Heading for the gates of Eden

Een Invalid Variant Type conversion ontstaat als je de waarde van een Variant gaat controleren door die te 'casten' naar een ander datatype, terwijl de Variant zelf leeg is. Van een lege variant kan Delphi geen kaas maken, dus weet ie ook niet of de .Value van je cell een integer, een string of een telefoonnummer moet opleveren.

Om te controleren of een Variant leeg is, doe je een VarIsNull:
code:
1
2
3
4
i:=1;
repeat
Inc(i);
until VarIsNull(WS.Range['a'+inttostr(i),'a'+inttostr(i)]);

  • Tryharder
  • Registratie: April 2002
  • Laatst online: 17-08 17:00
Nu hangt hij zichzelf op....maar geeft inderdaad geen foutmelding.

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 01:20

Delphi32

Heading for the gates of Eden

Op maandag 10 juni 2002 12:50 schreef Tryharder het volgende:
Nu hangt hij zichzelf op....maar geeft inderdaad geen foutmelding.
hehehe...
ik heb ook expres niets aan je loop gedaan, dat mag je zelf uitzoeken :)

  • Tryharder
  • Registratie: April 2002
  • Laatst online: 17-08 17:00
Ok, ik begrijp je niet. Maar met een while not loop lukt het ook niet...help me! :'(

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 01:20

Delphi32

Heading for the gates of Eden

Ok, kijk hier nog eens naar:
code:
1
2
3
4
i:=1;
repeat
  Inc(i);
until VarIsNull(WS.Range['a'+inttostr(i),'a'+inttostr(i)]);

Toen ik dit postte was ik me ervan bewust dat dit wel je probleem met de Invalid Variant Typecast oploste, maar niet het gevaar van de infinite loop dat reeds in jouw code zat.
Het probleem zit hierin, dat je niet precies weet hoe de Excel cellen behandeld worden. Zijn de variants die naar Null evalueren, of toch iets anders? In bovenstaande code ga ik ervan uit dat ze naar Null evalueren als ze leeg zijn (en dat is wat jij wilde controleren met if cell = ''). Als een lege cell niet Null is, zit je dus in een oneindige loop -> hop, dat is jouw probleem nu.
Je moet dus weten hoe je nog meer een 'lege' cell kan bepalen. Je weet nu, dat je niet de cell mag casten naar een Delphi-type. Dus gok ik erop, dat je met VarIsEmpty een beter resultaat krijgt. Kijk eens in de Help :)

Oh ja, en buiten dit, zou het geen kwaad kunnen om een safe-guard in te bouwen, om ervoor te zorgen dat je nooit in een echte infinite loop kan belanden. Bijvoorbeeld door
code:
1
2
3
4
repeat
  Inc(i);
  ...//whatever
until VarIsEmpty(ofzoiets) or i = MaxInt;

  • ArieProductions
  • Registratie: Januari 2002
  • Laatst online: 27-11-2024
Als je nu je ingelezen variant cast naar een string en vervolgens controleerd of deze leeg is?

"Quidquid latine dictum sit, altum videtur" (Whatever is said in Latin sounds profound)


  • Tryharder
  • Registratie: April 2002
  • Laatst online: 17-08 17:00
Ok guys, het is gelukt!

VarisEmpty is inderdaad het sleutelwoord geweest.
Als ik dan ook nog "value" achter de range zet, werkt hij als een tierelier!

Thanx! :)
Pagina: 1