Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/54: Рейтинг темы: голосов - 54, средняя оценка - 4.76
2 / 2 / 0
Регистрация: 18.01.2013
Сообщений: 19

Delphi Поиск текста в Excel

18.01.2013, 13:55. Показов 11865. Ответов 31

Студворк — интернет-сервис помощи студентам
Добрый день, я нуждаюсь в помощи с софтом.

Cуть программы:

Имеется приличного размера xls документ (ниже прикреплен аттач) ЛИСТ1
Формата имя/фамилия и тд .
Нужно что бы при поиске определенного текста в xls документа (по 1-2 критериям)
выводилась информация в таблицу StringGrid

использовал вариацию
Delphi
1
2
3
4
5
6
7
    begin
        A:=Excel.Range['A'+inttostr(i)];
        B:=Excel.Range['B'+inttostr(i)];
         if (A=Edit1.Text) and (B=Edit2.Text) then
          begin
            C:=Excel.Range['C'+inttostr(i)];
            ListBox3.Items.Add(C);
очень медленно тащит,в частности просто зависает. да и вывод только 1 ячейки ,а нужна строка.

Искал по форуму похожие темы,видел решение но не те,везде вывод координат
аля "Поиск данных на листе Excel" найдено cell[1:8]

Мне нужно, что бы можно было искать допустим
искать либо пара имя и фамилия
edit1.text:='фамилия'
edit2.text:='Имя'
и возможность сингл (только по фамилии)
и все результаты выводились в таблице stringgrid

Прошу знающих людей помочь с проблемкой.
Вложения
Тип файла: rar Exceeel.rar (47.9 Кб, 48 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.01.2013, 13:55
Ответы с готовыми решениями:

Delphi 7 + Excel: Поиск по ячейкам
Есть огромный фаил .xlsx, с 58000+ строками Примерно как выглядит: А B C 4 1 текст 4 2 текст 7 1 текст ...

поиск по книге excel в delphi
Други, подскажите как реализовать поиск ячейки по всей книге excel в delphi? Сломал ноги. Не могу найти...

Поиск в Excel по листам - Delphi
Здравствуйте, мне срочно нужна помощь! Мне нужно написать программу, которая искала бы при вводе в Edit имени в листах Excel совпадения и...

31
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
19.01.2013, 19:14
Студворк — интернет-сервис помощи студентам
Можно пока, например, так сделать. Под таблицей расположить Memo1 : TMemo. И полный текст ячеек, на которые указывает указатель мыши выводить в этот Мемо. Для этого надо создать обработчик события OnMouseMove для таблицы и его код оформить так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
  Col, Row : Integer;
  Sg : TStringGrid;
begin
  Sg := Sender as TStringGrid;
  Sg.MouseToCell(X, Y, Col, Row);
  if
    (Col >= 0) and (Col < Sg.ColCount)
    and (Row >= 0) and (Row < Sg.RowCount)
  then
    Memo1.Text := Sg.Cells[Col, Row];
end;
Добавлено через 3 минуты
Можно и многострочный текст выводить в ячейки таблицы. Но для этого понадобится самостоятельно реализовать прорисовку ячеек (в обработчике события OnDrawCell). В этом обработчике надо будет раскладывать текст по строкам, вычислять его длину и высоту и т. п. Так что лучше наверное пока текст выводить в Мемо.
1
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
19.01.2013, 19:20
Можно Hint использовать.
1
2 / 2 / 0
Регистрация: 18.01.2013
Сообщений: 19
19.01.2013, 19:25  [ТС]
Цитата Сообщение от Mawrat Посмотреть сообщение
Можно пока, например, так сделать. Под таблицей расположить Memo1 : TMemo. И полный текст ячеек, на которые указывает указатель мыши выводить в этот Мемо. Для этого надо создать обработчик события OnMouseMove для таблицы и его код оформить так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
  Col, Row : Integer;
  Sg : TStringGrid;
begin
  Sg := Sender as TStringGrid;
  Sg.MouseToCell(X, Y, Col, Row);
  if
    (Col >= 0) and (Col < Sg.ColCount)
    and (Row >= 0) and (Row < Sg.RowCount)
  then
    Memo1.Text := Sg.Cells[Col, Row];
end;
Добавлено через 3 минуты
Можно и многострочный текст выводить в ячейки таблицы. Но для этого понадобится самостоятельно реализовать прорисовку ячеек (в обработчике события OnDrawCell). В этом обработчике надо будет раскладывать текст по строкам, вычислять его длину и высоту и т. п. Так что лучше наверное пока текст выводить в Мемо.
Спасибо,попробывал,неплохое решение...
Пробывал перенос текста с расширением ячейки,получается какаято белеберда)
Если все же у кого появятся мысли,буду рад выслушать
0
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
19.01.2013, 19:25
Цитата Сообщение от gorfil Посмотреть сообщение
Можно Hint использовать.
Да, можно через Hint текст показывать. Для этого надо установить ShowHint = True для таблицы и для всех родительских элементов (во всей цепочке связей через Parent).
0
2 / 2 / 0
Регистрация: 18.01.2013
Сообщений: 19
19.01.2013, 19:26  [ТС]
Цитата Сообщение от gorfil Посмотреть сообщение
Можно Hint использовать.
Будь добр привести пример на основе данного проекта.
0
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
19.01.2013, 19:41
Цитата Сообщение от k1nd Посмотреть сообщение
Пробывал перенос текста с расширением ячейки,получается какаято белеберда)
Если все же у кого появятся мысли,буду рад выслушать
Здесь всё сложнее, на самом деле. Дело в том, что если мы расширяем какую-то ячейку вниз (увеличиваем её высоту), то надо соответственно увеличить вертикальный размер всех ячеек в этой строке. Вернее так - для какой-то ячейки запустился обработчик события OnDrawCell. В нём мы должны определить к номер строки таблицы в которой находится эта ячейка и для этой строки перебрать все ячейки. Для каждой ячейки надо вычислить высоту. Из этих высот выбрать наибольшую. И вот эту наибольшую высоту следует применить при прорисовке ячейки. Эту работу можно оптимизировать. - Для каждой строки таблицы можно хранить уже вычисленную наибольшую высоту. Если в ячейку заносится новый текст, то сведения о наибольшей высоте в строке должны обновляться.

Добавлено через 1 минуту
Использование Hint:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
  Col, Row : Integer;
  Sg : TStringGrid;
begin
  Sg := Sender as TStringGrid;
  Sg.MouseToCell(X, Y, Col, Row);
  if
    (Col >= 0) and (Col < Sg.ColCount)
    and (Row >= 0) and (Row < Sg.RowCount)
  then
    Sg.Hint := Sg.Cells[Col, Row];
end;
Ещё раз напомню - чтобы подсказки (Hints) показывались, надо для таблицы и для всех родительских элементов (связанных через свойство Parent) установить свойство:
Delphi
1
ShowHints := True;
Добавлено через 1 минуту
У меня, кстати, подсказки часто не работают. Это связано с глюками в Windows.

Добавлено через 2 минуты
Даже лучше сделать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
  Col, Row : Integer;
  Sg : TStringGrid;
begin
  Sg := Sender as TStringGrid;
  Sg.MouseToCell(X, Y, Col, Row);
  if
    (Col >= 0) and (Col < Sg.ColCount)
    and (Row >= 0) and (Row < Sg.RowCount)
  then
    Sg.Hint := Sg.Cells[Col, Row]
  else
    Sg.Hint := '';
end;
Также следует подправить и для случая с Мемо.
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
19.01.2013, 19:50
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
var
  ACol, ARow: Longint;
begin
  StringGrid1.MouseToCell(X, Y, ACol, ARow);
  if (ACol <> -1) or (ARow <> -1) then
    StringGrid1.Hint := StringGrid1.Cells[ACol, ARow];
end;
При необходимости можно в if указать столбец, ячейки которого должны отображаться в Хинте.
2
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
19.01.2013, 19:55
gorfil, только надо ещё добавить проверку на предмет того, что индексы строки и столбца должны быть меньше RowCount и ColCount, соответственно.
1
2 / 2 / 0
Регистрация: 18.01.2013
Сообщений: 19
19.01.2013, 19:56  [ТС]
Всем спасибо (: решил остановится на memo практично и удобно.
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
19.01.2013, 19:58
Цитата Сообщение от Mawrat Посмотреть сообщение
gorfil, только надо ещё добавить проверку на предмет того, что индексы строки и столбца должны быть меньше RowCount и ColCount, соответственно.
Mawrat, а разве они могут быть больше? Я думал, что MouseToCell возвращает либо индексы ячейки/столбца, либо -1.
2
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
19.01.2013, 20:06
Могут - когда указатель мыши попадает в области таблицы ниже самой нижней строки.

Добавлено через 1 минуту
А хотя нет. Я не прав. Сейчас проверил - даже если курсор в нижней части таблицы оказывается, за пределами строк - тогда всё равно индексы = -1.
1
2 / 2 / 0
Регистрация: 18.01.2013
Сообщений: 19
20.01.2013, 13:19  [ТС]
Приложил готовый проект, возможно кому-нибудь пригодится .
Благодарности Mawrat, gorfil

На этом можно тему закрыть.
Вложения
Тип файла: rar d.rar (127.2 Кб, 40 просмотров)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.01.2013, 13:19

Поиск и замена текста в Excel
Доброго времени суток! такая задача возникла: искать слово в книге Excel, которое в edit и менять его на текст другого edita. Что я...

Поиск текста в столбце в excel
Всем здравствуйте, Помогите пожалуйста с решением вопроса. Необходимо найти в Таблице 2 в столбце Назначение платежа текст из...

Delphi+Excel. Разный формат текста в одной ячейки
Всем доброго времени суток! Мне нужно через Delphi программно в Excel вписать в ячейку текст с разым форматом. Например первое слово в...

Delphi+Excel поиск максимума по модулю
Доброго времени суток! Есть программа на Delphi, которая использует числовые значения величин из результатов расчета программного...

Delphi Как выполнить поиск в Excel
Помогите пожалуйста составить программу в Delphi. Нужна простая программа с поиском. дан файл в Excel. в поиске написать слова и программа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru