Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2013, 06:39   #1
VinDiz
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 54
Лампочка

Возникла проблема с типами при попытках сравнить выбранный элемент комбобокса с каким то диапазоном ячеек эксель (к примеру 'В2:В15'), пробовал и циклом и в массив закинуть этот диапазон а потом сравнивать, сгладить типы не вышло вот мой "брусок"
Код:
procedure TForm3.Button1Click(Sender: TObject);
   var A, B, C: string;
   D: array[0..250] of string;
   Rows, Cols, i,j: integer;
   sh,XS,wb, FData: olevariant;
   begin
    XS:= CreateOleObject('Excel.Application');
    wb:=XS.Workbooks.Open('C:\Documents and Settings\Admin\Рабочий стол\NKI\КПЗ\программа1\Database.xlsx',0,false);  // не отображается таблица
    sh := wb.WorkSheets[1]; // Pervaya vkladka
    //Rows:=sh.UsedRange.Rows.Count;
    //Cols:=sh.UsedRange.Columns.count;
    //FData:=sh.UsedRange.Value;
    //D:= sh.cell['B2:B15'];
     //for i := 2 to 2 do
     // for j := 2 to 25 do
    D:=sh.range('B2:B4'); //FData[i,j+1];
    B:=combobox2.text;
      if B = D then
         memo1.Text:= ('Раён:    ' +combobox1.text + #13#10 + 'Улица:    ' +B + #13#10+ 'Количество комнат:    ' +combobox3.Text + #13#10 + 'Примерная цена:   ' + combobox4.text)
               else showmessage ('No variant');
    XS.Quit;
    VarClear(xs);
end;
и еще подскажите как сразу с диапазона ячеек вывести содержимое в мемо

Последний раз редактировалось Stilet; 05.01.2013 в 12:18.
VinDiz вне форума Ответить с цитированием
Старый 05.01.2013, 12:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что ты творишь?
Что в этих ячейках? Почему сравниваешь именно с диапазоном?
вообще насколько я помню лучше использовать не Range а Cell, дабы в цикл обращаться к ячейкам:
Код:
b:=true;
for i:=2 to 4 do
 if sh.cell[2,i]<>combobox2.text then begin b:=false;break;end;
if b then memo1.Text:= ('Раён:    ' +combobox1.text + #13#10 + 'Улица:    ' +B...
Где b:Boolean
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.01.2013, 20:26   #3
VinDiz
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 54
По умолчанию

у меня в комбобоксе на каждем итеме слово, по выбору слова в итеме, на кнопке при нажатие долно это слово искатся в этом диапозоне....пробовал цыклить но некогда масив слов не цыклил
Щас протестю
VinDiz вне форума Ответить с цитированием
Старый 05.01.2013, 20:42   #4
Xardas
Сисадмин
Форумчанин
 
Аватар для Xardas
 
Регистрация: 28.12.2007
Сообщений: 320
По умолчанию

Если известен диапазон, то можно, используя range, "засунуть" значения из ячеек диапазона в массив. Примерно так:

Код:
var
   mas, sheet : variant; //переменная под массив типа variant 
......

begin
.....
mas := Sheet.Range['A1:Z100'].value;
......
end;
А потом можно работать с переменной mas как с двумерным массивом:

Код:
for i := 1 to ...
  for j := 1 to ...
     что-то делаем с mas[i, j], например, как Вы просили в Memo: Memo.Lines.Add(mas[i,j])

Последний раз редактировалось Xardas; 05.01.2013 в 20:51.
Xardas вне форума Ответить с цитированием
Старый 08.01.2013, 02:53   #5
VinDiz
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 54
По умолчанию

Спасибо! С типом проблему уладил!
VinDiz вне форума Ответить с цитированием
Старый 08.01.2013, 10:22   #6
VinDiz
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 54
По умолчанию

подскажите что тут неправильно? Файл заполнен данными и совпадения есть, а при компиляции постоянно срабатывает что нету совпадений по условию
Код:
 mass := sh.Range['B2:B100'].value;
      b:= true;
      for j:=1 to 10 do  begin
      if combobox2.Text <> mass[2,j].value then  begin b:= false;  showmessage // в этой строке пишет ошибку ('Variant ne naiden'); break; end;//
      if b then memo1.Text:= ('Раён:    ' +combobox1.text + #13#10 + 'Улица:    ' +combobox2.Text + #13#10+ 'Количество комнат:    ' +combobox3.Text + #13#10 + 'Примерная цена:   ' + combobox4.text) ;
VinDiz вне форума Ответить с цитированием
Старый 08.01.2013, 13:49   #7
VinDiz
Пользователь
 
Регистрация: 14.01.2012
Сообщений: 54
По умолчанию

вот что у меня получилось
Код:
procedure TForm3.Button1Click(Sender: TObject);
   var  sh,XS,wb, mass, sheet: olevariant;
   j: integer; b: boolean;
   begin
    XS:= CreateOleObject('Excel.Application');
    wb:=XS.Workbooks.Open('C:\Documents and Settings\Admin\Рабочий стол\NKI\КПЗ\программа1\Database1.xlsx',0,false);  // не отображается таблица
    sh := wb.WorkSheets[1]; // Pervaya vkladka
    mass := sh.range['B2:B100'].value;
    b:= true;
      for j:=2 to 100 do
      begin
        if combobox2.Text <> sh.cell[2,j].value then
          begin
            b:= false;  showmessage ('Variant ne naiden'); break;
          end;
        if b then memo1.Text:= ('Раён:    ' +combobox1.text + #13#10 + 'Улица:    ' +combobox2.Text + #13#10+ 'Количество комнат:    ' +combobox3.Text + #13#10 + 'Примерная цена:   ' + combobox4.text) ;
          end;
    XS.Quit;
    VarClear(xs);
end;
попробовал двумя способами в том что изложен выбивает ошибку про invalid cell
а в том что изложил Владимир тоже выбивает ошибку Мешал их у меня все работало без ошибки даже при нажатии на выполнение поиска но в заполненной БД не читало а делало вид как будто там нету совпадения..... как быть?
VinDiz вне форума Ответить с цитированием
Старый 08.01.2013, 14:31   #8
Xardas
Сисадмин
Форумчанин
 
Аватар для Xardas
 
Регистрация: 28.12.2007
Сообщений: 320
По умолчанию

Обращаетесь к ячейкам неправильно и в первом варианте к элементам массива тоже. У Вас данные расположены в столбце, то есть при проходе в цикле меняется строка, а столбец остается: cells[j,2] или mass[j,2]
Xardas вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ComboBox ID элемента .scu C# (си шарп) 1 20.07.2012 19:17
Проблема с диапазоном ячеек в Excel. a1bert Microsoft Office Excel 12 04.01.2012 15:12
Сравнивание ячеек двух таблиц Rainkhz Общие вопросы Delphi 2 29.05.2010 19:16
работа с диапазоном ячеек? panzergto Microsoft Office Excel 4 01.04.2010 21:25
добавление элемента в ComboBox Tapapax Общие вопросы .NET 2 09.11.2009 22:48