Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 542

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Немного расширю свой вопрос № 5530
Подскажите как реализовать поиск в файле EXCEL (см.вложение).
Задача следующая.
Необходимо выполнить поиск по ФИО (берется из Edit) и в случае нахождения (например Петров Петр Петрович) скопировать в SrtringGrid:
1. Все что находится правее ячеек Основной режим/Сверхурочно/Итого (серая заливка)- в первый SrtringGrid.
2. Все что находится ниже ячеек Наименование/дата списания/кол-во/Примечание (серая заливка)- - во второй SrtringGrid.
С открытием файла Excel проблем нет...
Проблема с поиском и выводом найденного в SrtringGrid

Заранее благодарен
Al_Sha

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Al_Sha Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Al_Sha (статус: Посетитель)
Вопрос отправлен: 30 июля 2011, 06:42
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Шичко Игорь

Здравствуйте, Al_Sha!
Предлагаю общий вариант решения задачи.
Предполагается:
- данных по одному и тому же сотруднику может быть несколько на одном листе
- ищется точное совпадение фамилии, имени и отчества

Код и описание - в приложении
Вопросы пишите в форум

Приложение:
  1. uses
  2. ..., ComObj,...;
  3.  
  4.  
  5. dan1 = record
  6. osn: real;
  7. sv: real;
  8. itog: real;
  9. end;
  10. dan2 = record
  11. naim: string;
  12. kol: integer;
  13. d_spis: TDate;
  14. prim: string;
  15. end;
  16. TForm1 = class(TForm)
  17. Button1: TButton;
  18. Edit1: TEdit;
  19. StringGrid1: TStringGrid;
  20. StringGrid2: TStringGrid;
  21. ...
  22.  
  23. procedure TForm1.Button1Click(Sender: TObject);
  24. var
  25. Ex, WorkBook, Sheet: variant;
  26. i, row_tek, row_all, kol_1, kol_2: integer;
  27. a1:array of dan1;
  28. a2:array of dan2;
  29.  
  30. begin
  31. kol_1:= 0; kol_2:= 0;
  32.  
  33. StringGrid1.RowCount:= kol_1 + 1;
  34. StringGrid2.RowCount:= kol_2 + 1;
  35. Ex:= CreateOleObject('Excel.Application');
  36. Ex.Visible:= True;
  37.  
  38. Sheet:= WorkBook.ActiveSheet;
  39.  
  40. for i:= 1 to row_all do
  41. begin
  42.  
  43. begin
  44.  
  45.  
  46. a1[kol_1 - 1].sv:= Sheet.Range['d' + inttostr(i + 9)].value;
  47. a1[kol_1 - 1].itog:= Sheet.Range['d' + inttostr(i + 10)].value;
  48. StringGrid1.RowCount:= kol_1 + 1;
  49.  
  50. StringGrid1.Cells[1, StringGrid1.RowCount -1]:= FloatToStr(a1[kol_1 - 1].sv);
  51. StringGrid1.Cells[2, StringGrid1.RowCount -1]:= FloatToStr(a1[kol_1 - 1].itog);
  52. row_tek:= i + 14;
  53.  
  54. begin
  55. kol_2:= kol_2 + 1; SetLength(a2, kol_2);
  56. try
  57.  
  58. a2[kol_2 - 1].d_spis:= StrToDate(VarToStr(Sheet.Range['d' + inttostr(row_tek)].value));
  59. a2[kol_2 - 1].kol:= StrToInt(VarToStr(Sheet.Range['e' + inttostr(row_tek)].value));
  60. a2[kol_2 - 1].prim:= Sheet.Range['f' + inttostr(row_tek)].value;
  61. except
  62. end;
  63. StringGrid2.RowCount:= kol_2 + 1;
  64.  
  65. StringGrid2.Cells[1, StringGrid2.RowCount -1]:= DateToStr(a2[kol_2 - 1].d_spis);
  66. StringGrid2.Cells[2, StringGrid2.RowCount -1]:= IntToStr(a2[kol_2 - 1].kol);
  67. StringGrid2.Cells[3, StringGrid2.RowCount -1]:= a2[kol_2 - 1].prim;
  68. row_tek:= row_tek + 1;
  69. end;
  70.  
  71.  
  72. end;
  73. end;
  74.  
  75.  
  76. end;
  77.  


Ответ отправил: Шичко Игорь (статус: 9-ый класс)
Время отправки: 30 июля 2011, 11:20
Оценка за ответ: 5

Комментарий к оценке: спасибо...

Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 2 августа 2011, 15:09; участников в обсуждении: 2.
Шичко Игорь

Шичко Игорь (статус: 9-ый класс), 30 июля 2011, 10:41 [#1]:

Al_Sha:

Вопрос: на каждом листе отдельно взятая фамилия встречается только один раз (как в Вашем примере) или может встречаться много раз? От этого зависит алгоритм для применения в проекте.
Al_Sha

Al_Sha (статус: Посетитель), 30 июля 2011, 18:29 [#2]:

Да, на каждом листе отдельно взятая фамилия встречается только один раз.

С уважением
Al_Sha
Шичко Игорь

Шичко Игорь (статус: 9-ый класс), 30 июля 2011, 22:42 [#3]:

Al_Sha:

В принципе я привел общий алгоритм, поэтому можно использовать.
Al_Sha

Al_Sha (статус: Посетитель), 2 августа 2011, 15:09 [#4]:

Спасибо за столь изящный и работоспособный код...

С уважением
Al_Sha

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 16 ноября 2024, 15:56
Выполнено за 0.03 сек.