type
TOOTest =
class(TForm)
OpenDialog1: TOpenDialog;
procedure FormCreate(Sender: TObject);
public
OOSrvMgr: Variant;
// ServiceManager
OOfficeApp: Variant;
// XDesktop
OODispHlp: Variant;
// DispatchHelper
OODokument: Variant;
procedure ReplaceTables;
procedure ReplaceText(XText: Variant);
function GetCountInString(sAllText, sSearch:
String): Integer;
end;
implementation
procedure TOOTest.FormCreate(Sender: TObject);
var
sURLLocation:
String;
begin
// Vorbereitung
OOSrvMgr := CreateOleObject('
com.sun.star.ServiceManager');
OOfficeApp := OOSrvMgr.CreateInstance('
com.sun.star.frame.Desktop');
OODispHlp := OOSrvMgr.CreateInstance('
com.sun.star.frame.DispatchHelper');
if OpenDialog1.Execute
then
sURLLocation := ConvertToURL(OpenDialog1.FileName);
// ConvertToURL ist aus den Examples von OOC
OODokument := OOfficeApp.LoadComponentFromURL(sURLLocation, '
_blank', 0, VarArrayCreate([0, -1], VarVariant));
ReplaceTables;
OODokument.Close(False);
OOfficeApp := unassigned;
OOSrvMgr := Null;
end;
procedure TOOTest.ReplaceTables;
var
XTextTables: Variant;
XTable: Variant;
XCell : Variant;
iTable: Integer;
Row, Column: Integer;
begin
XTextTables := OODokument.getTextTables;
for iTable := XTextTables.getCount -1
downto 0
do
begin
XTable:= XTextTables.getByIndex(iTable);
for Row := 0
to XTable.Rows.Count -1
do
begin
for Column := 0
to XTable.Columns.Count -1
do
begin
XCell := XTable.getCellByPosition(Column, Row);
//ShowMessage('CellText = "'+XCell.getText.getString+'"');
ReplaceText(XCell.getText);
end;
end;
end;
end;
procedure TOOTest.ReplaceText(XText: Variant);
var
XTextCursor: Variant;
// XTextCursor2: Variant;
// XHlpCursor: Variant;
bSelect: Boolean;
sAllText:
String;
iAktPos: Integer;
begin
XTextCursor := XText.createTextCursor;
XTextCursor.gotoStart(False);
// XTextCursor2 := XText.createTextCursor;
// XTextCursor2.gotoStart(False);
// XHlpCursor := XText.createTextCursor;
// XHlpCursor.gotoStart(False);
sAllText := XText.getString;
bSelect := False;
while (Pos('
[', sAllText) > 0)
and (Pos('
]', sAllText) > 0)
do
begin
if sAllText[1] = '
['
then
begin
bSelect := True;
XTextCursor.goRight(1, bSelect);
end else if sAllText[1] = '
]'
then
begin
XTextCursor.goRight(1, bSelect);
if XTextCursor.getString <> '
'
then
// überprüfen, ob die Anzahl an '[' und ']' identisch sind (für internen Parser (bzgl. If-Abfragen) wichtig)
// GetCountInString(Text, SuchString: String): Integer;
if GetCountInString(XTextCursor.getString, '
[') = GetCountInString(XTextCursor.getString, '
]')
then
begin
XTextCursor.setString('
');
bSelect := False;
end;
end else
XTextCursor.goRight(1, bSelect);
// ToDo: geht so nicht, da der TextCursor ÜBER die Tabelle springt und
// der sAllText die Inhalte enthält
sAllText := Copy(sAllText, 2, Length(sAllText)-1);
// ToDo: "sAllText := XTextCursor2.getText.getString;" gibt immer den kompletten Inhalt der Zelle zurück
// XTextCursor2.goRight(1, False);
// XTextCursor2.gotoEnd(True);
// XHlpCursor.goRight(1, False);
// sAllText := XTextCursor2.getText.getString;
// Expand = True, damit die Seletierung wieder aufgehoben wird (?)
// XTextCursor2.gotoRange(XHlpCursor, True);
end;
end;
end.