lazarus + openoffice
Модератор: Модераторы
выложите ваш код. щас под линукс загружусь (OpenOffice на работе только там) и попробую по ковырят...
Код: Выделить всё
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 14:45:32, всего редактировалось 2 раза.
sant
Не ну я так не играю
Мне на самом деле лень разбираться, что за модули подключать и искать как сервер OpenOffice называется. Я с ним не работал.
Так, что по возможности если хотите чтобы я вам помог привидите нормальный код, который можно сразу запустить!
Не ну я так не играю
Так, что по возможности если хотите чтобы я вам помог привидите нормальный код, который можно сразу запустить!
Написал полный код лежащий выше!
Блин. Чёта я туплю... Вы же используете COM для доступу к OpenOffice
Какая тогда реч мощет идти о Linux 
а так будет работать?
Код: Выделить всё
sss:='file:///c|/1.odt';
Document := Desktop.LoadComponentFromURL(variant(sss),'_blank', 0, LoadParams);Какую версию OpenOffice используете? У меня объект com.sun.star.frame.Desktop отсутствует 
xcod писал(а):а так будет работать?Код: Выделить всё
sss:='file:///c|/1.odt';
Document := Desktop.LoadComponentFromURL(variant(sss),'_blank', 0, LoadParams);
Огромное спасибо! Так Все работает! Может кому-то понадобиться!
Добавлено спустя 1 час 49 минут 22 секунды:
Код: Выделить всё
instext:='работает';
Bookmark.setString(instext);
почему-то выводит квадраты во Writer (OpenOffice)
как поправить ?
************************************************************************************************************************
как я понимаю по умолчанию lazarus работает с utf-8 как нормально записать строчку
в open office writer?
Подскажите,что не так?
************************************************************************************************************************
как я понимаю по умолчанию 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 писал(а):************************************************************************************************************************
как я понимаю по умолчанию lazarus работает с utf-8 как нормально записать строчку
в open office writer?
Подскажите,что не так?
ну попробуйте с кодировками поиграться типо
Код: Выделить всё
Bookmark.setString(UTF8toAnsi(instext))sant
Скорее всего OO работает со строками в Unicode как и все COM Автоматизаторы. UTF8Decode
Скорее всего OO работает со строками в Unicode как и все COM Автоматизаторы. UTF8Decode
UTF8Decode и UTF8toAnsi и многие комбинации не помогают,
может кто сталкивался и знает точно то - что необходимо.
может кто сталкивался и знает точно то - что необходимо.
Какие типы у параметров функции?
Код: Выделить всё
Desktop.LoadComponentFromURL('file:///c|/1.odt','_blank', 0, LoadParams);Все заработало!
Код: Выделить всё
Bookmark:=BookmarksSupplier.getByName(UTF8Decode(b_text)).getAnchor;
Bookmark.setString(UTF8Decode(i_text));
Код: Выделить всё
PrintPar := VarArrayCreate([0, 2], varVariant);
PrintPar[0]:= MakePropertyValue('RangeText','2');
PrintPar[1]:= MakePropertyValue('Copies','1');
PrintPar[2]:= MakePropertyValue('Collate','true');
Document.Print(PrintPar);
Почему-то печатаются все страницы, может кто сталкивался.
А хотелось бы печатать определенные.
