Форум: "Основная";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];
ВнизПроблема с переменной Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.038 c