Pusta komórka z Excela

0

Zaczytuję komórki z Excela.
Wypełnione komórki zaczytuje prawidłowo.
Ale jeśli komórka jest pusta, to po zaczytaniu moja zmienna temp typu string nie jest pusta tylko zawiera $A0 $00 (w hex)
I teraz warunek

if Length(temp) = '' then

nigdy nie będzie spełniony

Na tą chwilę sprawę załatwiłem tak :

 temp := StringReplace(temp, #160, '', [rfReplaceAll]);

Ale chciałbym się dowiedzieć, czy można to zrobić lepiej.
Bo jeśli nagle się okaże że z Excela przyjdzie inny znak (nie $A0) to znowu string nie będzie pusty.

0

Witam, u mnie taki kod działa bez problemu.

var vExcel: Variant;
    i, j : Byte;
    s: string;
begin
  vExcel:=CreateOLEObject('Excel.Application');
  vExcel.Application.Workbooks.Open('demo.xls');
  vExcel.Visible:=False;
  for i:= 1 to 11 do
    for j:=1 to 11 do
      begin
        s:=vExcel.Workbooks[1].WorkSheets[1].Cells[i,j];
        Memo1.Lines.Add(s);
        If s='' then Memo1.Lines.Add('Komórka: Ja pusta, ja pusta, jak mnie widać?'); // ;)
      end;
  vExcel.Quit;
  vExcel:=UnAssigned;

Z resztą:

if Length(temp) = '' then ...

pewnie, że nie będzie. Integer<>string(nawet pusty).

0

miało być

if Length(temp) = 0 then

lub

if temp = '' then

A zaczytywanie z Excela robię w bardzo podobny sposób i u mnie string nie jest pusty. Ale wypróbuję dokładnie ten sam powyższy przykład.

0

Sprawdziłem powyższy przykład, i nadal zwraca nie całkiem pusty string.
Tylko że ja na komórek wrzucam to do dynamicznej tablicy stringów.
Ale to chyba nie przez to ?

0

Najwyraźniej komórka nie jest tak całkiem pusta ;-)
#$A0 to NBSP (non-breaking space). Nie wiem dlaczego Excel ten kod zwraca, ale pomysł ze StringReplace wydaje się słuszny.

1 użytkowników online, w tym zalogowanych: 0, gości: 1