unit OO_Handling;
// Eine kleine Klasse zum einfachsten Handling von OpenOffice Dokumenten
// Sollte noch um viele Funktionen erweiterbar sein
// hab mal erst nur die Wichtigsten eingebaut
// Diese Funktionen funktionieren auch mit Word .dot Files,
// Das ersetzen geht sogar mit OpenOffice schneller als mit Word selbst.
interface
uses Windows, SysUtils, comobj, Classes;
type TOLE_OpenOffice =
class(TObject)
private
p_Doc_Type :
String;
// Da OpenOffice Pfadangaben im Unixstyle haben will werden Backslashes umgewandelt
function ToOOPfad(Pfad:
String):
String;
procedure Setze_Doc_Type(s:
string);
protected
// Das OLE-Objekt, die Desktopinstanz und das Dokument selbst.
Service, Desktop, Document : Variant;
public
// Erstellt ein OLE Objekt;
function Connect: boolean;
// Oeffnet eine neues Dokument
function Open:boolean;
OVERLOAD;
// Laden eines vorhandenen Dokuments
function Open(datei:
string):boolean;
OVERLOAD;
// Ein Bookmarkfeld ersetzen ( Nicht Case Sensitiv)
function ErsetzeBookmark(
name,inhalt:
String):boolean;
// Liste von allen Bookmarks als Stringlist;
function HoleBookmarks:TStringlist;
function HoleZellinhalt(sheet,zelle:
String):
String;
OVERLOAD;
function HoleZellinhalt(sheet:
string;xpos,ypos:integer):
String;
OVERLOAD;
function SchreibeZellinhalt(sheet,zelle,inhalt:
String):boolean;
OVERLOAD;
function SchreibeZellinhalt(sheet:
string;xpos,ypos:integer;inhalt:
String):boolean;
OVERLOAD;
// Destruktor
destructor Destroy;
OVERRIDE;
property Doc_Type:
String read p_Doc_Type
write Setze_Doc_Type;
end;
implementation
destructor TOLE_OpenOffice.Destroy;
begin
Service := Unassigned;
inherited Destroy;
end;
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;
setze_Doc_Type('
dummy');
except
rueckgabe := false;
end;
result := rueckgabe;
end;
procedure TOLE_OpenOffice.Setze_Doc_Type(s:
string);
var rueckgabe:
String;
begin
rueckgabe := '
';
if (Document.SupportsService('
com.sun.star.sheet.SpreadsheetDocument'))
then
rueckgabe := '
scalc';
if (Document.SupportsService('
com.sun.star.text.TextDocument'))
then
rueckgabe := '
swriter';
if (Document.SupportsService('
com.sun.star.drawing.DrawingDocument'))
then
rueckgabe := '
sdraw';
if (Document.SupportsService('
com.sun.star.formula.FormulaProperties'))
then
rueckgabe := '
smath';
if (rueckgabe = '
')
then
rueckgabe := '
unknown';
p_Doc_Type:= rueckgabe;
// 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;
setze_Doc_Type('
dummy');
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;
function TOLE_OpenOffice.HoleBookmarks:TStringlist;
var liste : TStringlist;
i : integer;
li : Variant;
begin
liste := TStringlist.create;
liste.Clear;
li := Document.Bookmarks.getElementNames;
for i := VarArrayLowBound(li,1)
to VarArrayHighBound(li,1)
do
begin
liste.add(li[i]);
end;
result := liste;
end;
function TOLE_OpenOffice.HoleZellinhalt(sheet,zelle:
String):
String;
var sh,bm : Variant;
begin
sh := Document.Sheets.getByName(sheet);
bm := sh.getCellRangebyName(zelle);
result := bm.getString;
end;
function TOLE_OpenOffice.HoleZellinhalt(sheet:
String;xpos,ypos:integer):
String;
var sh,bm : Variant;
begin
sh := Document.Sheets.getByName(sheet);
bm := sh.getCellbyPosition(xpos,ypos);
result := bm.getString;
end;
function TOLE_OpenOffice.SchreibeZellinhalt(sheet,zelle,inhalt:
String):boolean;
var sh,bm,tc : Variant;
begin
sh := Document.Sheets.getByName(sheet);
bm := sh.getCellRangebyName(zelle);
bm.setString(inhalt);
end;
function TOLE_OpenOffice.SchreibeZellinhalt(sheet:
String;xpos,ypos:integer;inhalt:
String):boolean;
var sh,bm,tc : Variant;
begin
sh := Document.Sheets.getByName(sheet);
bm := sh.getCellbyPosition(xpos,ypos);
bm.setString(inhalt);
end;
end.