lazarus + openoffice

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

sant
новенький
Сообщения: 23
Зарегистрирован: 23.11.2009 20:52:42

lazarus + openoffice

Сообщение sant »

Помогите пожалуйста!
Хочу под win xp связать программу написанную под lazarus c openoffice.
Например есть шаблон под writer, как установить с наим связь и вписать необходимые данные.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

sant
Вот это посмотрите http://uno-pas-bridge.sourceforge.net/
sant
новенький
Сообщения: 23
Зарегистрирован: 23.11.2009 20:52:42

Сообщение sant »

Mr.Smart писал(а):sant
Вот это посмотрите http://uno-pas-bridge.sourceforge.net/

не совсем понятно! можно на пальцах объяснить ....

-установка связи,
-открытие
-запись в необходимое место,
-закрыть...
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Там есть пример приложения.

Добавлено спустя 19 минут 48 секунд:
Посмотрите здесь
http://freepascal.ru/forum/viewtopic.php?f=24&t=2585
http://freepascal.ru/forum/viewtopic.php?f=5&t=2977

п.с. А вообще перед тем как задать вопрос поищите по форуму :wink:

Добавлено спустя 5 минут 20 секунд:
Вот ещё http://freepascal.ru/forum/viewtopic.php?f=24&t=4270 может чем поможет.
sant
новенький
Сообщения: 23
Зарегистрирован: 23.11.2009 20:52:42

Сообщение sant »

Код: Выделить всё

try
    Server := CreateOleObject(ServerName);
  except
    ShowMessage('Не установлен OpenOffice');
    Exit;
  end;
  Desktop := Server.CreateInstance('com.sun.star.frame.Desktop');
  LoadParams := VarArrayCreate([0, -1], varVariant);

   {Open document}
  sss:='';
  sss:=ExtractFilePath(ParamStrUTF8(0));
  sss:= StringReplace(sss, ':', '|', [rfReplaceAll, rfIgnoreCase]);
  sss:= StringReplace(sss, '\', '/', [rfReplaceAll, rfIgnoreCase]);
  sss:='file:///'+sss+'anketa.odt';
  //sss:='file:///c|/1.odt';
  try
    Document := Desktop.LoadComponentFromURL('file:///c|/1.odt','_blank', 0, LoadParams);
  except
  begin
    ShowMessage('Ошибка файла!'+#13#10+sss);
    Exit;
  end;
  end;
  //Document := Desktop.LoadComponentFromURL(sss,'_blank', 0, LoadParams);

  TextCursor := Document.Text.CreateTextCursor;

   {Insert existing document}  //Substitute your path and doc
  BookmarksSupplier:=Document.getBookmarks;
  Bookmark:=BookmarksSupplier.getByName('a1').getAnchor;
  instext:=Utf8ToAnsi(работает);
  Bookmark.setString(instext);

Server:= Unassigned;


Не получается через переменную sss: string передать строку, в которой записан петь к файлу.
Работает: Document := Desktop.LoadComponentFromURL('file:///c|/1.odt','_blank', 0, LoadParams);
Не работает: Document := Desktop.LoadComponentFromURL(sss,'_blank', 0, LoadParams);
Система - xp + lazarus 0.9.28 + openoffice 3.1.0

Что делаю не так?
Последний раз редактировалось sant 18.12.2009 10:19:49, всего редактировалось 1 раз.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

sant
Для начала воспользуйтесь тегом [code]. И отформатируйте свой пост!
sant
новенький
Сообщения: 23
Зарегистрирован: 23.11.2009 20:52:42

Сообщение sant »

исправлено. Просьба помочь!
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

  • 1 Приведите имя каталога в котором у вас лежит ваша программа (.exe);
  • 2 Посмотрите значение, которое получилось в переменной sss после преобразований.
sant
новенький
Сообщения: 23
Зарегистрирован: 23.11.2009 20:52:42

Сообщение sant »

в том-то и дело если так (все работает):

Код: Выделить всё

Document := Desktop.LoadComponentFromURL('file:///c|/1.odt','_blank', 0, LoadParams);


ежели так (не работает):

Код: Выделить всё

sss:='file:///c|/1.odt','_blank';
Document := Desktop.LoadComponentFromURL(sss,'_blank', 0, LoadParams);
Аватара пользователя
AbakAngelSoft
постоялец
Сообщения: 273
Зарегистрирован: 06.08.2008 19:28:26
Откуда: Краснодар
Контактная информация:

Сообщение AbakAngelSoft »

Код: Выделить всё

sss:='file:///c|/1.odt','_blank';

Вот так и не будет работать вы строке передаете две строки через запятую. компилятор разве не ругается?
sant
новенький
Сообщения: 23
Зарегистрирован: 23.11.2009 20:52:42

Сообщение sant »

ежели так (не работает):

Код: Выделить всё

    sss:='file:///c|/1.odt';
    Document := Desktop.LoadComponentFromURL(sss,'_blank', 0, LoadParams);
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

sant
Появляется ли какая ошибка? Напишите текст ошибки если не трудно :wink:
sant
новенький
Сообщения: 23
Зарегистрирован: 23.11.2009 20:52:42

Сообщение sant »

Код: Выделить всё

Project project.exe raised exeption class 'EOleExeption' with message:
InterfaceOleWrapper_Impl::Invoke :
[automation bridge]UnoConversionUtilities<T>::createOleObjectWrapper
The Variant does not contain an object type!

Отладчик выдает данное исключение.

Предпологаю что-то не так с кодировкой, такое может быть?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

sant
Это проблемы с преобразованием из типа String в Variant. Объявите переменную ssss как Variant.

Добавлено спустя 1 минуту 5 секунд:
И подключите модуль для работы с Вариантами variants.
sant
новенький
Сообщения: 23
Зарегистрирован: 23.11.2009 20:52:42

Сообщение sant »

дело в том, что не создается Document := Desktop.LoadComponentFromURL(sss,'_blank', 0, LoadParams);
sss делал variant
sss - const, ничего не помогает,
а если явно написать Document := Desktop.LoadComponentFromURL('file:///c|/1.odt','_blank', 0, LoadParams);работает
Ответить