lazarus + openoffice

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

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

Re: lazarus + openoffice

Сообщение Mr.Smart » 18.12.2009 13:43:18

выложите ваш код. щас под линукс загружусь (OpenOffice на работе только там) и попробую по ковырят...
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: lazarus + openoffice

Сообщение sant » 18.12.2009 13:48:33

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

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, EditBtn, MaskEdit, ComObj, Variants, LCLProc;   
var
  Form1: TForm1;
  Server: Variant;
  Desktop    : Variant;
  LoadParams : Variant;
  Document   : Variant;
  TextCursor : Variant;
  BookmarksSupplier: Variant;
  Bookmark: Variant;

  instext: string;
  sss: Variant;   
const
  ServerName = 'com.sun.star.ServiceManager';


implementation

{ TForm1 }   
procedure TForm1.Button1Click(Sender: TObject);

begin
  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+'1.odt';
}
  sss:='';
  sss = 'file:///c|/1.odt';

Document := Desktop.LoadComponentFromURL(sss,'_blank', 0, LoadParams);

{
  TextCursor := Document.Text.CreateTextCursor;

  BookmarksSupplier:=Document.getBookmarks;
  Bookmark:=BookmarksSupplier.getByName('a1').getAnchor;
  instext:='работает';
  Bookmark.setString(instext);
}
//Document.Close(True);
//Document:=Unassigned;
Server:= Unassigned;
end;


Хочу открыть документ лежащий в директории программы и по определенной метке вписать строчку.
Да, строчки вписываются квадратиками!
Последний раз редактировалось sant 18.12.2009 15:45:32, всего редактировалось 2 раз(а).
sant
новенький
 
Сообщения: 23
Зарегистрирован: 23.11.2009 21:52:42

Re: lazarus + openoffice

Сообщение Mr.Smart » 18.12.2009 13:53:36

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

Re: lazarus + openoffice

Сообщение sant » 18.12.2009 13:59:59

Написал полный код лежащий выше!
sant
новенький
 
Сообщения: 23
Зарегистрирован: 23.11.2009 21:52:42

Re: lazarus + openoffice

Сообщение Mr.Smart » 18.12.2009 14:07:21

Блин. Чёта я туплю... Вы же используете COM для доступу к OpenOffice :oops: Какая тогда реч мощет идти о Linux :oops:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: lazarus + openoffice

Сообщение xcod » 18.12.2009 14:27:57

а так будет работать?
Код: Выделить всё
sss:='file:///c|/1.odt';
Document := Desktop.LoadComponentFromURL(variant(sss),'_blank', 0, LoadParams);
xcod
постоялец
 
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Re: lazarus + openoffice

Сообщение Mr.Smart » 18.12.2009 14:36:01

Какую версию OpenOffice используете? У меня объект com.sun.star.frame.Desktop отсутствует :(
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: lazarus + openoffice

Сообщение sant » 18.12.2009 15:53:15

xcod писал(а):а так будет работать?
Код: Выделить всё
sss:='file:///c|/1.odt';
Document := Desktop.LoadComponentFromURL(variant(sss),'_blank', 0, LoadParams);


Огромное спасибо! Так Все работает! Может кому-то понадобиться!

Добавлено спустя 1 час 49 минут 22 секунды:
Код: Выделить всё
  instext:='работает';
  Bookmark.setString(instext);

почему-то выводит квадраты во Writer (OpenOffice)
как поправить ?
sant
новенький
 
Сообщения: 23
Зарегистрирован: 23.11.2009 21:52:42

Re: lazarus + openoffice

Сообщение sant » 21.12.2009 10:43:50

************************************************************************************************************************
как я понимаю по умолчанию lazarus работает с utf-8 как нормально записать строчку
в open office writer?
Подскажите,что не так?

Код: Выделить всё
  BookmarksSupplier:=Document.getBookmarks;
  Bookmark:=BookmarksSupplier.getByName('a1').getAnchor;
  instext:='работает';
  Bookmark.setString(instext);

************************************************************************************************************************
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, EditBtn, MaskEdit, ComObj, Variants, LCLProc;   
var
  Form1: TForm1;
  Server: Variant;
  Desktop    : Variant;
  LoadParams : Variant;
  Document   : Variant;
  TextCursor : Variant;
  BookmarksSupplier: Variant;
  Bookmark: Variant;

  instext: string;
  sss: Variant;   
const
  ServerName = 'com.sun.star.ServiceManager';


implementation

{ TForm1 }   
procedure TForm1.Button1Click(Sender: TObject);

begin
  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+'1.odt';

Document := Desktop.LoadComponentFromURL(variant(sss),'_blank', 0, LoadParams);

  TextCursor := Document.Text.CreateTextCursor;

  BookmarksSupplier:=Document.getBookmarks;
  Bookmark:=BookmarksSupplier.getByName('a1').getAnchor;
  instext:='работает';
  Bookmark.setString(instext);

Server:= Unassigned;
end;
sant
новенький
 
Сообщения: 23
Зарегистрирован: 23.11.2009 21:52:42

Re: lazarus + openoffice

Сообщение xcod » 21.12.2009 11:04:11

sant писал(а):************************************************************************************************************************
как я понимаю по умолчанию lazarus работает с utf-8 как нормально записать строчку
в open office writer?
Подскажите,что не так?


ну попробуйте с кодировками поиграться типо
Код: Выделить всё
Bookmark.setString(UTF8toAnsi(instext))
xcod
постоялец
 
Сообщения: 108
Зарегистрирован: 07.08.2009 12:37:23

Re: lazarus + openoffice

Сообщение Mr.Smart » 21.12.2009 11:32:05

sant
Скорее всего OO работает со строками в Unicode как и все COM Автоматизаторы. UTF8Decode :wink:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: lazarus + openoffice

Сообщение sant » 21.12.2009 17:39:07

UTF8Decode и UTF8toAnsi и многие комбинации не помогают,
может кто сталкивался и знает точно то - что необходимо.
sant
новенький
 
Сообщения: 23
Зарегистрирован: 23.11.2009 21:52:42

Re: lazarus + openoffice

Сообщение sign » 21.12.2009 20:51:23

Какие типы у параметров функции?
Код: Выделить всё
Desktop.LoadComponentFromURL('file:///c|/1.odt','_blank', 0, LoadParams);
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: lazarus + openoffice

Сообщение sant » 23.12.2009 11:41:43

Все заработало!
Код: Выделить всё
  Bookmark:=BookmarksSupplier.getByName(UTF8Decode(b_text)).getAnchor;
  Bookmark.setString(UTF8Decode(i_text));
sant
новенький
 
Сообщения: 23
Зарегистрирован: 23.11.2009 21:52:42

Re: lazarus + openoffice

Сообщение sant » 30.12.2009 11:38:12

Код: Выделить всё
PrintPar := VarArrayCreate([0, 2], varVariant);
  PrintPar[0]:= MakePropertyValue('RangeText','2');
  PrintPar[1]:= MakePropertyValue('Copies','1');
  PrintPar[2]:= MakePropertyValue('Collate','true');
  Document.Print(PrintPar);

Почему-то печатаются все страницы, может кто сталкивался.
А хотелось бы печатать определенные.
sant
новенький
 
Сообщения: 23
Зарегистрирован: 23.11.2009 21:52:42

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 33

Рейтинг@Mail.ru