Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Технологии
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.08.2012, 19:19
Аватар для Thrasher
Thrasher Thrasher вне форума
Illuminati
 
Регистрация: 06.03.2008
Адрес: Крым, г. Симферополь
Сообщения: 348
Репутация: 8808
По умолчанию Поиск текста в Excel

Никак не могу понять как сделать поиск в Excel? Нужно приаттачиться к уже открытому документу и там уже искать. но какого-то у меня постоянно возникает Exeption, что запрос отклонён. Кучу кода нарыл и всё везде разное. Про то как вставить, скопировать - полно, а вменяемого кода про поиск - нигде.
__________________
Хорошо написанная программа не требует документации
ICQ 9-184-668.
Ответить с цитированием
  #2  
Старый 08.08.2012, 19:59
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Вариант с копированием активной области и поиске в ней рассматривал?
Если нужно, завтра могу дать вам пример. Смысл такой, берется вся область с данными (пустые столбцы и строки вокруг области данных отсекаются), передается в двумерный массив OleVariant, оттуда приводится к нужному типу, ну и делайте чо хотите с этими данными.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 08.08.2012 в 20:49.
Ответить с цитированием
  #3  
Старый 09.08.2012, 09:44
Аватар для Thrasher
Thrasher Thrasher вне форума
Illuminati
 
Регистрация: 06.03.2008
Адрес: Крым, г. Симферополь
Сообщения: 348
Репутация: 8808
По умолчанию

Боюсь, что ситуация намного хуже - поиск должен происходить именно в Excel. Т.е. Чтобы переходило на найденную ячейку.
__________________
Хорошо написанная программа не требует документации
ICQ 9-184-668.
Ответить с цитированием
  #4  
Старый 09.08.2012, 10:03
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ну тогда макросы.
Для справки, через Ole объект тоже можно выделить ячейку, да короче все что хотите можно. Тем паче, что этот товарищ выдает диапазон.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 09.08.2012, 10:15
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Thrasher
Никак не могу понять как сделать поиск в Excel? Нужно приаттачиться к уже открытому документу и там уже искать. но какого-то у меня постоянно возникает Exeption, что запрос отклонён. Кучу кода нарыл и всё везде разное. Про то как вставить, скопировать - полно, а вменяемого кода про поиск - нигде.
Всё нормально работает. Пример:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ExcelApplication1.ConnectKind:=ckRunningInstance;
  ExcelApplication1.Connect;
  ExcelApplication1.Visible[LOCALE_USER_DEFAULT]:=True;

  ExcelWorkbook1.ConnectKind:=ckRunningInstance;
  ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Open('E:\Test\111.xls',
    EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
    EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
    EmptyParam, EmptyParam, LOCALE_USER_DEFAULT));

  ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Sheets[1] as _WorkSheet);

  ExcelWorksheet1.Cells.Find('4073', ExcelApplication1.ActiveCell, xlFormulas,
    xlPart, xlByRows, xlNext, False, EmptyParam, False).Activate;
end;
Ответить с цитированием
  #6  
Старый 10.08.2012, 12:34
Аватар для Thrasher
Thrasher Thrasher вне форума
Illuminati
 
Регистрация: 06.03.2008
Адрес: Крым, г. Симферополь
Сообщения: 348
Репутация: 8808
По умолчанию

Как объяснил, так и ответили

Есть открытый документ в Экселе. К нему надо присоединиться. И потом искать. Расположение у него - неизвестно, поскольку идет работа через сетевое хранилище и сервер каждый раз выгружает файлы в разные папки. В заголовке - только имя файла. Вот как подконнектиться именно к открытому документу - вот вопрос.
__________________
Хорошо написанная программа не требует документации
ICQ 9-184-668.
Ответить с цитированием
  #7  
Старый 11.08.2012, 21:58
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Thrasher
Как объяснил, так и ответили

Есть открытый документ в Экселе. К нему надо присоединиться. И потом искать. Расположение у него - неизвестно, поскольку идет работа через сетевое хранилище и сервер каждый раз выгружает файлы в разные папки. В заголовке - только имя файла. Вот как подконнектиться именно к открытому документу - вот вопрос.
Нормальным способом я не знаю как это можно сделать. Но можно обходным.
Итак. Нам известно имя файла и что этот файл открыт сейчас в Excel-е, но неизвестен путь к этому файлу.
  1. В Excel-е нельзя открыть два файла с одинаковым именем, даже если они находятся в разных папках и вообще не имеют никакого отношения друг к другу (кто не верит, может попытаться открыть два разных, но одноимённых файла и почитать, что по этому поводу скажет Excel);
  2. На сайте rouse.drkb.ru есть исходник "Список открытых файлов", с помощью которого можно узнать какие файлы (с полными путями) в каких приложениях открыты - уже можем узнать полный путь к нашему файлу (который открыт в Excel);
  3. Возвращаемся к исходнику который я предложил выше. В нём заменяем 'E:\Test\111.xls' на то, что нашли в предыдущем шаге.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Thrasher (13.08.2012)
  #8  
Старый 13.08.2012, 10:47
Аватар для Thrasher
Thrasher Thrasher вне форума
Illuminati
 
Регистрация: 06.03.2008
Адрес: Крым, г. Симферополь
Сообщения: 348
Репутация: 8808
По умолчанию

Бинго!

Совсем голова перестала варить.. Сработало)
__________________
Хорошо написанная программа не требует документации
ICQ 9-184-668.
Ответить с цитированием
  #9  
Старый 13.09.2012, 06:00
Ботаник Ботаник вне форума
Прохожий
 
Регистрация: 04.10.2009
Сообщения: 13
Репутация: 10
По умолчанию

Здравствуйте. А как присоединиться к еще не сохраненному документу? Тоесть суть в чем, ABBYY Screenshot Reader делает скрин области на экране, распознает там текст и передает в Exel. Вот мне нужно как-то присоединиться из своей программы и выбрать там нужные данные. Но документ то не сохранен на диск. В заголовке Exel появляется наподобие tmpb9691, только знаки после tmp разные каждый раз, но в Списке открытых файлов по такому имени ничего не находит.
Возможно както прочитать из уже запущенного Exel, если документ еще не был сохранен на диск?
Ответить с цитированием
  #10  
Старый 13.09.2012, 06:55
Ботаник Ботаник вне форума
Прохожий
 
Регистрация: 04.10.2009
Сообщения: 13
Репутация: 10
По умолчанию

соединился...

Uses ComObj;
var Xl:Variant;
....
try
XL:=GetActiveOleObject('Excel.Application');
.......
XL.visible:=true;
Except
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:54.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter