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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2014, 22:29   #1
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию Поиск и замена текста в OpenOffice

Стоит такая задача:
1. Нужно подключиться к открытому на данный момент документу (в OpenOffice Writer)
2. В открытом документе нужно найти определенные слова (Например Ф.И.О, Адрес, индекс и т.д.)
3. Открыть шаблон документа (Например Почтовый конверт)
4. Вставить в шаблон то что вытащили из документа к которому подключались

Для Word я все сделал, Но столкнулся с проблемой того, что у половины пользователей стоит OpenOffice потому нужно как-то решать задачу.

С подключением к открытому в Word документу нет никаких проблем:
Код:
wdApp := GetActiveOleObject('Word.Application');
а вот в OpenOffice такой финт не проходит:
Код:
wdApp := GetActiveOleObject('com.sun.star.ServiceManager');
Выдает:
First chance exception at $7C812AFB. Exception class EOleSysError with message 'Операция недоступна'. Process Dogovor.exe (4024)

Подскажите пожалуйста как мне решить задачу.
Если проще, то как получить данные из открытого документа на данный момент и записать их в нужный, заготовленный зарание шаблон.
Смотреть фильмы HD Фильмы для планшетов
demiancz вне форума Ответить с цитированием
Старый 26.04.2014, 09:52   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Выдает:
Именно на этой строке?
Проведи поиск в реестре по строке com.sun.star.ServiceManager - найдет ли хоть одну ветку с классом?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.04.2014, 11:06   #3
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию

Да такая строка в реестре есть.
Смотреть фильмы HD Фильмы для планшетов
demiancz вне форума Ответить с цитированием
Старый 26.04.2014, 11:42   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну а падение происходит именно на той строке. что ты выложил?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.04.2014, 13:06   #5
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию

Падение происходит в System.Win.ComObj в
Код:
procedure OleError(ErrorCode: HResult);
begin
  raise EOleSysError.Create('', ErrorCode, 0);
end;
Смотреть фильмы HD Фильмы для планшетов
demiancz вне форума Ответить с цитированием
Старый 26.04.2014, 13:19   #6
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию

Нашел пример как создать новый докумен в OpenOffice
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
StarOffice, StarDesktop, Document: variant;
begin
StarOffice:=CreateOleObject('com.sun.star.ServiceManager');
StarDesktop := StarOffice.createInstance('com.sun.star.frame.Desktop');
Document := StarDesktop.LoadComponentFromURL('private:factory/swriter', '_blank', 0, VarArrayCreate([0, -1], varVariant));
end;
При нажатии на кнопку создается новый документ. Все работает. А вот как подключиться к уже открытому - не знаю.
Смотреть фильмы HD Фильмы для планшетов
demiancz вне форума Ответить с цитированием
Старый 26.04.2014, 14:01   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как подключиться к уже открытому
CreateOleObject заменяется на GetActiveOleObject
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.04.2014, 15:49   #8
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию

Так я и меняю. И выскакивает та ошибка, которая описана выше.
Смотреть фильмы HD Фильмы для планшетов
demiancz вне форума Ответить с цитированием
Старый 26.04.2014, 16:19   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хм... Тогда не скажу.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.04.2014, 16:38   #10
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию

Нашел вариант как открыть шаблон:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
// Открытие шаблона
  StarOffice:=CreateOleObject('com.sun.star.ServiceManager');
  StarDesktop:=StarOffice.CreateInstance('com.sun.star.frame.Desktop');
  Document:=StarDesktop.LoadComponentFromURL('file:///'+ExtractFilePath(paramstr(0))+'/dogovor1.doc','_blank',0,VarArrayCreate([0,-1],varVariant));
end;
С подключение к открытому документу проблема остается, так как этот документ не сохранен и имени его я не знаю (оно постоянно изменяется).
Смотреть фильмы HD Фильмы для планшетов
demiancz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск и замена текста в Memo demiancz Общие вопросы Delphi 2 04.05.2013 21:10
Макрос, поиск и замена текста duhamuk Microsoft Office Word 4 15.07.2011 19:40
Поиск и замена текста Jantar Общие вопросы Delphi 10 26.07.2010 08:26
Поиск и замена текста в файле VAbramyak Общие вопросы Delphi 3 04.04.2007 20:20
поиск и замена текста в RichEdit Vasya Помощь студентам 11 16.03.2007 06:48