Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Excel - Zellenabfrage (https://www.delphipraxis.net/145868-excel-zellenabfrage.html)

aurikel_Max 9. Jan 2010 20:46


Excel - Zellenabfrage
 
Guten Abend Delphi-Praxis-Community,

ich brauche Eure Hilfe bei dem folgendem Problem:

Ich möchte eine Komma-Zahl in eine Excel-Tabelle speichern, dafür geht das Programm an eine bestimmte Stelle in der Excel-Tabelle und beginnt von da aus in y-Richtung nach einer freien Zelle zu suchen.

Mein Code sieht so aus (es geht bestimmt eleganter, aber ...):

Delphi-Quellcode:
  row := 4; // y
  column := 3; // x
  x := 1;
  while NOT(x = 0) do
  begin
    if ((excel.Cells[row, column].Value) = '') then
    begin
      x := 0;
    end
    else
    begin
      row := row + 1;
    end;
  end;
Das Problem ist, dass ich folgende Fehlermeldung bekomme, da die Zellen mit den Zahlen gefüllt sind: Could not convert variant of type (UnicodeString) into type (Double). -> deswegen muss ich das (excel.Cells[row, column].Value) vorher noch umwandeln?

Liebe Grüße.

anubis2k5 10. Jan 2010 04:19

Re: Excel - Zellenabfrage
 
Wenn ich richtig liege, prüft der Code ob es ein leerer String ist. Vielleicht solltest du prüfen ob eine Zahl enthalten ist. Alternativ kannst du vielleicht noch die Länge des zurück gegebenen Strings prüfen (mittels Length())

HiWieGehts 10. Jan 2010 09:05

Re: Excel - Zellenabfrage
 
Hallo,

habe mir die Mühe gemacht und auf Delphi-Praxis nach <excel zelle leer> gesucht. Unter anderem wurde ein Beitrag mit dem Titel <Leere Excel-Zelle> gefunden. Der schaut ganz gut aus und dürfte die Lösung für dein Problem bieten.

LG

aurikel_Max 10. Jan 2010 09:28

Re: Excel - Zellenabfrage
 
Zitat:

Zitat von HiWieGehts
Hallo,

habe mir die Mühe gemacht und auf Delphi-Praxis nach <excel zelle leer> gesucht. Unter anderem wurde ein Beitrag mit dem Titel <Leere Excel-Zelle> gefunden. Der schaut ganz gut aus und dürfte die Lösung für dein Problem bieten.

LG

Erstmal danke ich Euch beiden für eure Antwort.

Danach möchte ich auf HiWieGehts eingehen:

Die Boardsuche habe ich zwar auch benutzt, aber wohl einen unpassenderen Begriff genommen ... nachdem ich deinen Begriff benutzt habe, habe ich folgendes gefunden:

Zitat:

Zitat von Chemiker
Hallo JPSelter,

versuch es mal mit:

Delphi-Quellcode:
if Excel.cells[i,j].value = ‘’ then
In Excel gibt es die empty-Konstante auf der man prüfen kann.

Bis bald Chemiker

Wobei mir ‘’ als fehlerhaft angezeigt wurde und beim Compilieren einen Fehler ergab. Deshalb habe ich anubis2k5's Lösungsansatz benutzt, der auch tadellos funktioniert, Dankeschön euch beiden!
:dp:

Delphi-Quellcode:
    if Length(Excel.cells[row,column]) = 0  then
So sieht es dann jetzt aus :)

Liebe Grüße. (jetzt eine Runde joggen gehen und danach weiter arbeiten :))

anubis2k5 10. Jan 2010 16:00

Re: Excel - Zellenabfrage
 
Hallo!

Zitat:

if Excel.cells[i,j].value = ‘’ then
wird zu:

Delphi-Quellcode:
if Excel.cells[i,j].value = '' then

aurikel_Max 10. Jan 2010 16:33

Re: Excel - Zellenabfrage
 
Zitat:

Zitat von anubis2k5
Hallo!

Zitat:

if Excel.cells[i,j].value = ‘’ then
wird zu:

Delphi-Quellcode:
if Excel.cells[i,j].value = '' then

Das entspricht meinem alten fehlerhaften Quellcode, das Problem:
Zitat:

Could not convert variant of type (UnicodeString) into type (Double)
.

Die Überprüfung anhand der Länge ist besser und mein (kleines) Programm klappt auch :).

:dp:

Jens Schumann 10. Jan 2010 16:39

Re: Excel - Zellenabfrage
 
Hallo,
Excel.cells[i,j].value ist hier vom Typ OleVariant.
Was liegt da näher als eine Umwandlung in einen String und anschließende
Prüfung auf ''

Delphi-Quellcode:
if VarToStr(Excel.cells[i,j].value) = '' then
geht immer

aurikel_Max 10. Jan 2010 16:49

Re: Excel - Zellenabfrage
 
Zitat:

Zitat von Jens Schumann
Hallo,
Excel.cells[i,j].value ist hier vom Typ OleVariant.
Was liegt da näher als eine Umwandlung in einen String und anschließende
Prüfung auf ''

Delphi-Quellcode:
if VarToStr(Excel.cells[i,j].value) = '' then
geht immer

Genau das hab ich gesucht, bevor ich den alternativen Lösungsansatz mit der Länge erhalten hab, ich wusste nicht genau, wie ich den Wert (Value) umwandeln muss. (wobei ich es bei der Länge belassen werde, danke ich auch Dir für die Hilfe!)
:dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz