In Writer per Makro suchen, analisieren und ersetzen.

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: In Writer per Makro suchen, analisieren und ersetzen.

von Toxitom » So, 16.04.2006 09:53

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 :wink:

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

von pmoegenb » Do, 13.04.2006 10:49

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.

von pmoegenb » Mi, 12.04.2006 20:54

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.

Nach oben