Hallo Alain,
zu StarBasic kann ich leider nicht allzuviel beitragen, aber in diesem Fall halte ich das Arbeiten mit Textmarken für einfacher, statt eigener Platzhalter. Du musst dabei nichts ersetzen sondern bei namensbezogene Textmarken einfügen.
In Writer per Makro suchen, analisieren und ersetzen.
Moderator: Moderatoren
-
- ********
- Beiträge: 4330
- Registriert: Di, 22.06.2004 12:02
- Wohnort: 71134 Aidlingen
- Kontaktdaten:
Hallo Alain,
Deine weiteren Ausführungen hören sich schwierig an, was die Realisierung anlangt.
Muss nicht sein, man kann Textmarken auf das Vorhandensein prüfen. Einen Codeschnipsel kann ich Dir nur in Object-Pascal liefern:Also nur über ein getcount die anzahl der Textmarken ermitteln, den Namen auslesen, in der Datenbank das Feld finden und anschliessend Preis zuweisen.
Code: Alles auswählen
// Text an Textmarke einfügen
function TOLE_OpenOffice.TxTBookmark(name,inhalt:String):boolean;
var
VBookMark, vTextCursor: OleVariant;
begin
Result := true;
If Document.BookMarks.hasByName(name) = true then
begin
try
vBookMark := Document.BookMarks.getByName(name);
vTextCursor := vBookMark.Anchor.Text.createTextCursorByRange(vBookMark.Anchor);
vTextCursor.SetString(inhalt);
except
Result := false;
end;
end;
end;
Code: Alles auswählen
// Textmarke durch Text ersetzen
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.Setstring := inhalt;
rueckgabe := true;
end;
end;
except
rueckgabe := false;
end;
result := rueckgabe;
end;
Doch, ein Textmarken-Namen muss im Dokument eindeutig sein.Bekomme ich keine Probleme wenn ein Textmarken-Name mehrmals in einem Dokument vorkommt?
Deine weiteren Ausführungen hören sich schwierig an, was die Realisierung anlangt.
Gruß
Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
Hey Hatti,
also, ich weiss ja nicht, ob du deine Aufgabenstellung nicht auch einfacher lösen kanst - aber wenn du so vorgehen willst .... na, dann bitte. Der folgende Code sucht und ersetzt die jeweiligen Platzhalter, du musst ihn halt entsprechend anpassen
Viele Grüße
Thomas
also, ich weiss ja nicht, ob du deine Aufgabenstellung nicht auch einfacher lösen kanst - aber wenn du so vorgehen willst .... na, dann bitte. Der folgende Code sucht und ersetzt die jeweiligen Platzhalter, du musst ihn halt entsprechend anpassen

Code: Alles auswählen
Sub SucheUndErsetze
odoc = thiscomponent
osuche = odoc.createsearchdescriptor()
oSuche.searchRegularExpression = true
REM der Suchbegriff zwischen den Klammern
REM hat zwischen 1 und 10 Buchstaben - evt. anpassen
osuche.setsearchstring("\{\$.{1,10}\$\}")
osucherg=odoc.findfirst(osuche)
do while not isNull(oSuchErg)
sErg = oSucherg.string
msgbox sErg
sInhalt = mid(sErg, 3, len(sErg)-4)
oSucherg.string = ersetze(sinhalt)
oSuchErg = oDoc.findNext(oSuchErg.end, oSuche)
loop
End Sub
function ersetze(sPlatzhalter)
' hier definierst du die Ersetzngsgeschichte
aListe1 = array("Oder", "meins")
aListe2 = array("Morgen", "übermorgen")
for i = lBound(aliste1) to uBound(aliste1)
if sPlatzhalter = aListe1(i) then
ersetze = aListe2(i)
end if
next
end function
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic