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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2011, 11:45   #1
Smerch66
Пользователь
 
Регистрация: 22.03.2010
Сообщений: 33
По умолчанию БЫСТРЫЙ поиск в Excel средствами Delphi

Добрый день уважаемые специалисты. Столкнулся с трудностью:
Открываю файл Excel:
Код:
Excel1:=CreateOleObject('Excel.Application');
Excel1.Workbooks.Open[OpenDialog1.Files[0],0,True];
Теперь нужно произвести быстрый поиск в этом файле. Причём на выходе этого поиска мне нужно получить номер столбца и номер строки ячейки, в которой был найден искомый текст.
Метод перебором (то есть с помощью цикла) не подходит, т.к. он очень медленный.
А такой метод:
Код:
Excel1.Cells.Find('12345абвг');
Даёт на выходе судя по всему ссылку в 16-ричном виде на эту ячейку.

А вот как получить номер строки и столбца ума не приложу Очень нужна ваша помощь.
Smerch66 вне форума Ответить с цитированием
Старый 28.01.2011, 11:58   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Ну, если Excel-файл очень большой, я пробовал такой вариант:
Использую какой-нибудь компонент с таблицей в памяти в которую можно обращаться sql-запросами. Обычно использую SqlMemTable от AidAim (он, кстати, бесплатный). Одним махом переношу весь Excel-файл в таблицу в памяти. Номера строк и столбцов в моей таблице идентичны номерам из Excel-файла. И далее средствами sql делаю что хочу. Изменения, поиск и т.п...
А в данном случае можно имена полей задать как [A..Z]. Получится то, что надо.
_SERGEYX_ вне форума Ответить с цитированием
Старый 28.01.2011, 12:11   #3
Smerch66
Пользователь
 
Регистрация: 22.03.2010
Сообщений: 33
По умолчанию

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
Ну, если Excel-файл очень большой, я пробовал такой вариант:
Использую какой-нибудь компонент с таблицей в памяти в которую можно обращаться sql-запросами. Обычно использую SqlMemTable от AidAim (он, кстати, бесплатный). Одним махом переношу весь Excel-файл в таблицу в памяти. Номера строк и столбцов в моей таблице идентичны номерам из Excel-файла. И далее средствами sql делаю что хочу. Изменения, поиск и т.п...
А в данном случае можно имена полей задать как [A..Z]. Получится то, что надо.
С переносом в память Delphi хороший вариант, но я не умею вобще работать с базами данных в Delphi и смутно даже понимаю что такое sql.
А что значит "имена полей задать как [A..Z]"? Эта фраза относится опять же к переносу Excel в Delphi?
А если в память переносить, то можно ли с помощью этого компонента например одновременно 5 документов открыть? И где можно найти инструкцию и команды по работе с SqlMemTable? А поиск в этом компоненте тоже перебором производить, чтобы на выходе у меня был номер строки и столбца?

Последний раз редактировалось Smerch66; 28.01.2011 в 12:18.
Smerch66 вне форума Ответить с цитированием
Старый 28.01.2011, 12:59   #4
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
я не умею вобще работать с базами данных в Delphi и смутно даже понимаю что такое sql
Это не айс. Учим матчасть.
Цитата:
А что значит "имена полей задать как [A..Z]"?
Если структура Exel файла известна заранее, то можно сразу создать поля с именами A,B,C,D... Если неизвестна - создаем массив [A..Z] of char и динамически создаем поля с этими именами.
Цитата:
одновременно 5 документов открыть
Нельзя. 5 таблиц понадобится.
Цитата:
можно найти инструкцию
Там то же самое, что и в любой другой таблице.
Цитата:
А поиск в этом компоненте тоже перебором производить, чтобы на выходе у меня был номер строки и столбца?
Sql-запросами. Создаем автоинкрементное поле и его значение всегда будет равно номеру строки excel-файла.
_SERGEYX_ вне форума Ответить с цитированием
Старый 28.01.2011, 15:25   #5
Smerch66
Пользователь
 
Регистрация: 22.03.2010
Сообщений: 33
По умолчанию

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
Нельзя. 5 таблиц понадобится.
Ну то есть 5 компонент на форме разместим, и каждая будет отвечать за свою таблицу?
Smerch66 вне форума Ответить с цитированием
Старый 28.01.2011, 15:33   #6
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Угу. И даже можно их связать по индексам.
_SERGEYX_ вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
быстрый поиск в таблице Наталья89 Microsoft Office Excel 2 22.12.2010 22:47
Быстрый поиск текстуры по имени Alex Cones Общие вопросы Delphi 5 06.11.2010 17:52
Быстрый поиск в таблице k1r1ch Общие вопросы Delphi 7 07.07.2009 14:57
Быстрый поиск в AIMP2 Altera Софт 1 01.12.2008 06:39
Быстрый поиск по индексу valerij Microsoft Office Excel 1 21.04.2008 11:04