Seite 1 von 1
Verfasst: Mi, 12.04.2006 20:54
von pmoegenb
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.
Verfasst: Do, 13.04.2006 10:49
von pmoegenb
Hallo Alain,
Also nur über ein getcount die anzahl der Textmarken ermitteln, den Namen auslesen, in der Datenbank das Feld finden und anschliessend Preis zuweisen.
Muss nicht sein, man kann Textmarken auf das Vorhandensein prüfen. Einen Codeschnipsel kann ich Dir nur in Object-Pascal liefern:
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;
Bekomme ich keine Probleme wenn ein Textmarken-Name mehrmals in einem Dokument vorkommt?
Doch, ein Textmarken-Namen muss im Dokument eindeutig sein.
Deine weiteren Ausführungen hören sich schwierig an, was die Realisierung anlangt.
Verfasst: So, 16.04.2006 09:53
von Toxitom
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
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
Viele Grüße
Thomas