unit Unit1;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs, comobj,
Vcl.StdCtrls;
type
TForm1 =
class(TForm)
e1: TEdit;
M1: TButton;
procedure e1Change(Sender: TObject);
procedure M1Click(Sender: TObject);
private
protected
public
end;
TOLE_OpenOffice =
class(TObject)
private
{ Private-Deklarationen }
// Da OpenOffice Pfadangaben im Unixstyle haben will werden Backslashes umgewandelt
function ToOOPfad(Pfad:
String):
String;
protected
// Das OLE-Objekt, die Desktopinstanz und das Dokument selbst.
Service, Desktop, Document : Variant;
public
{ Public-Deklarationen }
// Erstellt ein OLE Objekt;
function Connect: boolean;
// Oeffnet eine neues Dokument
function Open:boolean;
OVERLOAD;
// Laden eines forhandenen Dokuments
function Open(datei:
string):boolean;
OVERLOAD;
// Ein Bookmarkfeld ersetzen ( Nicht Case Sensitiv)
function ErsetzeBookmark(
name,inhalt:
String):boolean;
end;
var
Form1: TForm1;
// Zugriffsforumular
TOffice : TOLE_OpenOffice;
// Open Office Zugriffsobjekt
{$R *.dfm}
implementation
function TOLE_OpenOffice.Connect:boolean;
var
rueckgabe : boolean;
begin
try
Service := CreateOleObject('
com.sun.star.ServiceManager');
Desktop := Service.createInstance('
com.sun.star.frame.Desktop');
rueckgabe := true;
except
rueckgabe := false;
end;
result := rueckgabe;
end;
function TOLE_OpenOffice.Open:boolean;
var
rueckgabe : boolean;
begin
try
Document := Desktop.LoadComponentFromURL(
'
private:factory/swriter',
'
_blank',
0,
VarArrayCreate([0, - 1], varVariant));
rueckgabe := true;
except
rueckgabe := false;
end;
result := rueckgabe;
end;
function TOLE_OpenOffice.Open(datei:
string):boolean;
var
rueckgabe : boolean;
begin
datei := ToOOPfad(datei);
try
Document := Desktop.LoadComponentFromURL(
datei,
'
_blank',
0,
VarArrayCreate([0, - 1], varVariant));
rueckgabe := true;
except
rueckgabe := false;
end;
result := rueckgabe;
end;
function TOLE_OpenOffice.ToOOPfad(Pfad:
String):
String;
var
rueckgabe :
string;
i : integer;
begin
rueckgabe := '
file:///';
while (POS('
\',pfad)>0)
do
begin
i := POS('
\',pfad);
delete(pfad,i,1);
Insert('
/',pfad,i);
end;
rueckgabe := rueckgabe + pfad;
result := rueckgabe;
end;
function TOLE_OpenOffice.ErsetzeBookmark(
name,inhalt:
String):boolean;
var
objtext, tc, bm, li : Variant;
i : integer;
rueckgabe : boolean;
begin
rueckgabe := false;
try
objText := Document.getText;
tc := objText.createTextcursor;
li := Document.Bookmarks.getElementNames;
for i := VarArrayLowBound(li,1)
to VarArrayHighBound(li,1)
do
begin
if (uppercase(li[i]) = uppercase(
name))
then
begin
bm := Document.Bookmarks.getbyName(li[i]);
tc := Document.Text.createTextCursorByRange(bm.Anchor);
tc.
string := inhalt;
rueckgabe := true;
end;
end;
except
rueckgabe := false;
end;
result := rueckgabe;
end;
procedure TForm1.e1Change(Sender: TObject);
var str_tmp :
string;
begin
str_tmp := e1.Text;
end;
procedure TForm1.M1Click(Sender: TObject);
var str_tmp :
string;
bool_file : Boolean;
begin
str_tmp := e1.Text;
bool_file := TOffice.Connect;
// bool_file := TOffice.Open(str_tmp);
end;
end.