Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.28;
Скачать: CL | DM;

Вниз

Проблема с переменной   Найти похожие ветки 

 
Alexey_T-O   (2005-08-04 14:00) [0]

Код:
var
 x:variant;
 rez:array [1..100,1..2] of variant;
 i:integer;
 p:variant;
begin
 x:=CreateOleObject("Excel.Application");
 x.workbooks.open(ExtractFilePath(ParamStr(0)) +"Test.xls");
 x.worksheets[1].Select;
 for i:=1 to 100 do
 begin
  rez[i,1]:=x.worksheets[1].Cells[i,1];
  rez[i,2]:=x.worksheets[1].Cells[i,5];
 end;

 x.quit;
 x:=Unassigned;

 p:="-1.00  (Glims)";  <<< Как можно отделить -1 от (Glims)?
 i:=1;
 for i:=1 to 100 do
 If rez[i,1]=p then showmessage("OK");

Почему выскакивает ошибка "Invalid variant operations" ? Ведь в ячейках EXCEL"я лежит как текст так и цифры.
P.S.За ранее спасибо.


 
Digitman ©   (2005-08-04 14:03) [1]

rez:array [1..100,1..2] of Olevariant

!!


> p:="-1.00  (Glims)";  <<< Как можно отделить -1 от (Glims)?


что значит "отделить" ? кастрировать что ли ?)


 
Alexey_T-O   (2005-08-04 14:25) [2]

>> p:="-1.00  (Glims)";  <<< Как можно отделить -1 от (Glims)?
>что значит "отделить" ? кастрировать что ли ?)

Да, имеется в виду как создать поиск в переменной где он будет брать значения до пробела или допустим после него?
P.S. Даже не могу выразить свою благодарность. Мучаюсь 2 недели с OLEvariant.


 
Alexey_T-O   (2005-08-04 14:46) [3]

>rez:array [1..100,1..2] of Olevariant

Все равно не работает. Также ругается.


 
Fay ©   (2005-08-04 14:52) [4]

Digitman ©   (04.08.05 14:03) [1]
>> Olevariant !!
Не критично в д.сл.


 
Digitman ©   (2005-08-04 15:03) [5]


> Fay ©   (04.08.05 14:52) [4]


> Не критично в д.сл.


Да, не критично, но когда-либо обязательно "выстрелит".


> Alexey_T-O   (04.08.05 14:46) [3]


> выскакивает ошибка "Invalid variant operations"


при попытке исполнения КАКОЙ конкретно строчки упомянутого кода ?


 
Fay ©   (2005-08-04 15:06) [6]

2 Digitman ©   (04.08.05 15:03) [5]
При сравнении строки  с null, судя по всему.
If rez[i,1]=p then


 
Alexey_T-O   (2005-08-04 15:22) [7]

ошибка вылазит при сравнении If rez[i,1]=p then А как обойти это нулевое значение?


 
Leonid Troyanovsky ©   (2005-08-04 15:25) [8]


> Alexey_T-O   (04.08.05 14:00)  

>   rez[i,1]:=x.worksheets[1].Cells[i,1];


Может .Value?
См. VBA Help.

--
Regards, LVT.


 
Fay ©   (2005-08-04 15:28) [9]

2 Alexey_T-O   (04.08.05 15:22) [7]
Да хоть так
If (VarIsNull(rez[i,1])) then
 rez[i,1]=p then showmessage("OK")


 
Digitman ©   (2005-08-04 15:28) [10]


> как обойти это нулевое значение?


его не надо обходить.

if (TVarData(rez[i,1]).VType = TVarData(p).VType) and (rez[i,1]=p) then ...


 
Alexey_T-O   (2005-08-04 17:12) [11]

if (TVarData(rez[,1]).VType = TVarData(p).VType) and (rezz=p) then
  showmessage(rez);
ошибка пропала, но showmessage выводит пустое окно, в любом случае равно rez = p или неравно.


 
Digitman ©   (2005-08-04 17:17) [12]

сие поведение сильно зависит от состояния опции "Свойств проекта"

Complete Boolean Eval = ??

мой расчет был направлен нат True..


 
Alexey_T-O   (2005-08-04 17:37) [13]

var
 x:variant;
 rezz:olevariant;
 p:Variant;
begin
 x:=CreateOleObject("Excel.Application");
 x.workbooks.open(ExtractFilePath(ParamStr(0)) +"test.xls");
 x.worksheets[1].Select;
  rezz:=x.worksheets[1].Cells[1,1];
 x.quit;
 x:=Unassigned;
 p:="123";
  if (TVarData(rezz).VType = TVarData(p).VType) and (rezz=p) then showmessage(rezz);
 
end;

Упрощаю вариант. в test.xls в позиции 1,1 пишу "123". Неработает. Complete Boolean Eval=True.


 
Digitman ©   (2005-08-04 17:44) [14]


> мой расчет был направлен на True..


тьфу ты !
пардон) на False, конечно же ..

иными словами, если условие

TVarData(rez[,1]).VType = TVarData(p).VType

ложно, то нехрена проверять следующее за and условие ...

трассировка пошаговая ЧТО показывает ?


 
Alexey_T-O   (2005-08-04 17:55) [15]

показывает ошибку "Invalid variant operations"
значения rezz=$0015ccdc а p=123 соответственно.


 
Alexey_T-O   (2005-08-04 18:01) [16]

Поправил. Ошибку не выдает. Сравнение на работает а при попытке showmessage(rezz) ругается что несоответствие dispatch и string.
можно както перевести Dispatch в String? И что такое Dispatch?


 
Digitman ©   (2005-08-04 18:03) [17]

так..

детализируем (учимся отладке) и меняем текст :

if (TVarData(rez[i,1]).VType = TVarData(p).VType) then //что видим здесь (*) ?
if rez[i,1]=p then   // что видим здесь, при условии что (*)=True


 
Alexey_T-O   (2005-08-05 10:24) [18]

if (TVarData(rez[i,1]).VType = TVarData(p).VType) then тут в rez и p лежит Unassigned. А до if rez[i,1]=p then так и не доходит.
А при Complete true rez = $0015B4FC а p=1 и до второй проверки недоходит.


 
Digitman ©   (2005-08-05 10:38) [19]


> тут в .. p лежит Unassigned


да быть того не может !

при этом присвоении

p:="-1.00  (Glims)";

VType тут же станет равным varString и более нигде, судя по твоему коду, не меняется

а ниже по тексту ты делаешь проверку

If rez[i,1]=p then

которая при "тут в rez .. лежит Unassigned" , разумеется, приведет к исключению "Invalid variant operations"


 
Digitman ©   (2005-08-05 11:25) [20]

x:=CreateOleObject("Excel.Application");
 try
   x.workbooks.open(ExtractFilePath(ParamStr(0)) +"test.xls");
   x.worksheets[1].Select;
   rezz:=x.worksheets[1].Cells[1,1];
 p:="1";
 if rezz.Value = p then showmessage(rezz.Value);

 finally
   x.quit;
   x:=Unassigned;
 end;


 
evvcom ©   (2005-08-05 12:23) [21]

и rezz:=Unassigned; в finally, а то не отпустится excel


 
Digitman ©   (2005-08-05 12:30) [22]


> evvcom ©   (05.08.05 12:23) [21]


угу.. упустил .. важное замечание


 
Alexey_T-O   (2005-08-05 13:17) [23]

Ураа. Работает идеально. Спасибо, всем огромное.



Страницы: 1 вся ветка

Текущий архив: 2005.08.28;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.028 c
1-1123159429
Хрюндель
2005-08-04 16:43
2005.08.28
Памогите перевести такой код из Basic в Delfi


14-1122549507
Андрей Жук
2005-07-28 15:18
2005.08.28
Три вещи, без которых нельзя прожить (не моё)


1-1123428673
Eraser
2005-08-07 19:31
2005.08.28
Ошибка в коде. Порча данных


1-1123482945
Санек
2005-08-08 10:35
2005.08.28
Создание самораспаковывающегося файла


4-1121333131
Pig Pen
2005-07-14 13:25
2005.08.28
Полупрозрачная форма