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

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

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2012, 21:37   #1
Russon2007
Пользователь
 
Регистрация: 15.11.2011
Сообщений: 16
По умолчанию Процедура поиска в StringGrid

Есть таблица в StringGrid , в ней внесены данные (по наработке деталей). Каждый месяц я вношу наработку детали програмно (записана формула на ячейке). При достижении срока експлуатации мне выдает ЗАМЕНА или РЕМОНТ даной детали. Теперь вопрос: как мне сделать так чтобы при нажатии на кнопку у меня выбирались значения ЗАМЕНА из StringGrid и выводились в Ворд или Ексель те детали которые должны бать заменены, не плохо былобы сделать при этом заголовок, например „замен деталей”(аналогично сделать процедуру и с ремонтом детали)?
Russon2007 вне форума Ответить с цитированием
Старый 09.05.2012, 12:31   #2
Russon2007
Пользователь
 
Регистрация: 15.11.2011
Сообщений: 16
По умолчанию

И что, никто незнает?
Russon2007 вне форума Ответить с цитированием
Старый 09.05.2012, 14:08   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а что тут знать то?!
перебирайте строчки в цикле. Находите те, где в нужном столбце находится определённый текст. Эти строчки выводите хоть в Word, хоть в Excel.
Что именно у Вас не получается?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.05.2012, 16:53   #4
Russon2007
Пользователь
 
Регистрация: 15.11.2011
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а что тут знать то?!
перебирайте строчки в цикле. Находите те, где в нужном столбце находится определённый текст. Эти строчки выводите хоть в Word, хоть в Excel.
Что именно у Вас не получается?
как грамотно сделать так, что-бы выводились в ворд только те строки, в которых совпал текст при поиске? Заранее благодарен
я имею ввиду програмно...(выборка нужного и вывод в ворд)

Последний раз редактировалось Russon2007; 13.05.2012 в 16:59.
Russon2007 вне форума Ответить с цитированием
Старый 13.05.2012, 17:43   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А как ты пробовал?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.05.2012, 18:25   #6
Russon2007
Пользователь
 
Регистрация: 15.11.2011
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А как ты пробовал?
у меня есть таблица 6 столбцов и 40-к строк... в столбце №5 определяется "Замена детали" (забита формула, поставлено условие, когда условие выполняется - выводит слово ЗАМЕНА) ..аналогично и с РЕМОНТ В 6-М столбце.
Для вывода в ворд (выводит все что в StringGrid), а я немогу никак сделать так что-бы выводились только те строки, в которых есть слово "Замена" или "РЕМОНТ".
Я только начинаю программировать и не все получается (((
Код:
var
  W, Table: Variant;
  Row, Col, i, j: Integer;
begin
  W := CreateOleObject('Word.Application');
  W.Documents.Add;
  W.ActiveDocument.Tables.Add(W.ActiveDocument.Range,
  StringGrid1.RowCount, StringGrid1.ColCount);
  Table := W.ActiveDocument.Tables.Item(1);
  Table.Style := 'Сетка таблицы';
  for i := 0 to StringGrid1.RowCount - 1 do
    for j := 0 to StringGrid1.ColCount - 1 do
      Table.Cell(i + 1, j + 1).Range.Text := StringGrid1.Cells[j, i];
  W.Visible := True;
end;

Последний раз редактировалось Stilet; 13.05.2012 в 21:35.
Russon2007 вне форума Ответить с цитированием
Старый 13.05.2012, 18:35   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Хорошо, что хотя бы ищете код в интернете и пытаетесь "прикрутить".
Сначала "пройдитесь" по всему стринггриду и посчитайте количество строк для вывода (сравниваете strgrid.cells[K,i] c 'ЗАМЕНА', где K - требуемый столбец).
Затем заносите полученное количество W.ActiveDocument.Tables.Add(W.Activ eDocument.Range,количество+1, StringGrid1.ColCount);
(+1 для шапки таблицы)
Затем заносите 0 строку (шапку) в документ, с помощью цикла по строке:
Код:
for j := 0 to StringGrid1.ColCount - 1 do
Table.Cell(1, j + 1).Range.Text := StringGrid1.Cells[j, 0];
Затем идете циклом по всем строкам и опять же проверяете условие:
Код:
count:=1;
for i := 1 to StringGrid1.RowCount - 1 do
  if strgrid.cells[4,i]='ЗАМЕНА' then
  begin
    for j := 0 to StringGrid1.ColCount - 1 do
      Table.Cell(count, j + 1).Range.Text := StringGrid1.Cells[j, i];
    inc(count);
  end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 13.05.2012 в 18:40.
BDA на форуме Ответить с цитированием
Старый 13.05.2012, 21:03   #8
Russon2007
Пользователь
 
Регистрация: 15.11.2011
Сообщений: 16
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Хорошо, что хотя бы ищете код в интернете и пытаетесь "прикрутить".
Сначала "пройдитесь" по всему стринггриду и посчитайте количество строк для вывода (сравниваете strgrid.cells[K,i] c 'ЗАМЕНА', где K - требуемый столбец).
Затем заносите полученное количество W.ActiveDocument.Tables.Add(W.Activ eDocument.Range,количество+1, StringGrid1.ColCount);
(+1 для шапки таблицы)
Затем заносите 0 строку (шапку) в документ, с помощью цикла по строке:
Код:
for j := 0 to StringGrid1.ColCount - 1 do
Table.Cell(1, j + 1).Range.Text := StringGrid1.Cells[j, 0];
Затем идете циклом по всем строкам и опять же проверяете условие:
Код:
count:=1;
for i := 1 to StringGrid1.RowCount - 1 do
  if strgrid.cells[4,i]='ЗАМЕНА' then
  begin
    for j := 0 to StringGrid1.ColCount - 1 do
      Table.Cell(count, j + 1).Range.Text := StringGrid1.Cells[j, i];
    inc(count);
  end;
У меня мало знаний (((( Но я хочу научиться... Я немного понял, но не все... посмотрите, что надо сдесь прописать, плиз...
Код:
procedure TForm10.Button6Click(Sender: TObject);
var
  W, Table: Variant;
  Row, Col, i, j, k, count: Integer;

begin

    with StringGrid1 do
      k:=1;
     for i:=1 to StringGrid1.RowCount - 1 - 1 do

   stringgrid1.Cells[8,i]:='Замена';
   stringgrid1.Cells[6,i]:='Ремонт';

    W.ActiveDocument.Tables.Add(W.ActiveDocument.Range,k+1,
    StringGrid1.ColCount);


         for j := 0 to StringGrid1.ColCount - 1 do
Table.Cell(1, j + 1).Range.Text := StringGrid1.Cells[j, 0];

count:=1;
for i := 1 to StringGrid1.RowCount - 1 do
  if (stringgrid1.Cells[8,i]:='ЗАМЕНА') or (stringgrid1.Cells[6,i]:='РЕМОНТ')  then
  begin
    for j := 0 to StringGrid1.ColCount - 1 do
      Table.Cell(count, j + 1).Range.Text := StringGrid1.Cells[j, i];
    inc(count);
  end;

  W := CreateOleObject('Word.Application');
  W.Documents.Add;
  W.ActiveDocument.Tables.Add(W.ActiveDocument.Range,
  StringGrid1.RowCount, StringGrid1.ColCount);
  Table := W.ActiveDocument.Tables.Item(1);
  Table.Style := 'Сетка таблици';
  for i := 0 to StringGrid1.RowCount - 1 do
    for j := 0 to StringGrid1.ColCount - 1 do
      Table.Cell(i + 1, j + 1).Range.Text := StringGrid1.Cells[j, i];
  W.Visible := True;
end;
From Stilet: Код попрошу оформлять по правилам спецтегом по кнопке # в редакторе поста!

Последний раз редактировалось Stilet; 13.05.2012 в 21:36. Причина: поправка
Russon2007 вне форума Ответить с цитированием
Старый 13.05.2012, 21:37   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
if (stringgrid1.Cells[8,i]='ЗАМЕНА') or (stringgrid1.Cells[6,i]='РЕМОНТ')  then
Это для начала.
А вообще нужно приводить тексты ошибок, если хочешь чему-то научиться.

И твой первый цикл полагаю должен выглядеть так:
Код:
     for i:=1 to StringGrid1.RowCount - 1 - 1 do begin

   stringgrid1.Cells[8,i]:='Замена';
   stringgrid1.Cells[6,i]:='Ремонт';
end;
Или поясни для чего он тебе
I'm learning to live...

Последний раз редактировалось Stilet; 13.05.2012 в 21:39.
Stilet вне форума Ответить с цитированием
Старый 13.05.2012, 21:42   #10
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
procedure TForm10.Button6Click(Sender: TObject);
var
  W, Table: Variant;
  i, j, k: Integer;

begin
  k := 0;
  with StringGrid1 do
  begin
    for i := 1 to RowCount - 1 do
      if (Cells[8, i] = 'ЗАМЕНА') or (Cells[6, i] = 'РЕМОНТ') then
        inc(k);
    
    for j := 0 to ColCount - 1 do
      Table.Cell(1, j + 1).Range.Text := Cells[j, 0];
    
    W := CreateOleObject('Word.Application');
    W.Documents.Add;
    W.ActiveDocument.Tables.Add(W.ActiveDocument.Range, k + 1, ColCount);
    Table := W.ActiveDocument.Tables.Item(1);
    Table.Style := 'Сетка таблици';
    k := 1;
    for i := 1 to RowCount - 1 do
      if (Cells[8, i] = 'ЗАМЕНА') or (Cells[6, i] = 'РЕМОНТ') then
      begin
        for j := 0 to ColCount - 1 do
          Table.Cell(k, j + 1).Range.Text := Cells[j, i];
        inc(k);
      end;
    W.Visible := True;
  end;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 13.05.2012 в 21:45.
BDA на форуме Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
хранимая процедура поиска в ibexpert malya Помощь студентам 11 17.03.2012 00:08
Процедура поиска(Pascal) tarakanet Помощь студентам 17 23.01.2012 21:53
Процедура поиска значений Bur Microsoft Office Excel 8 10.05.2011 18:53
процедура поиска PlayHard Помощь студентам 0 15.05.2010 10:46
Процедура поиска и копирования frodor999 Помощь студентам 1 06.12.2009 15:29