Seite 1 von 1
[gelöst]Finden von Variablen
Verfasst: Do, 09.07.2015 09:02
von Devil
Ich habe ein OOo Writer Dokument, in welchem beliebig viele Variablen mit einer bestimmten Syntax verbaut sind (als beispiel "{<Test>}").
gibt es irgndeine möglichkeit herauszufinden welche Variablen im Text vorkommen? Denn dadurch liesse sich mein Makro vermutlich um einiges beschleunigen wenn ich nicht alle 400 möglichkeiten suchen und ersetzen muss.
Bei Fragen einfach melden. Vielen Dank im Vorraus
Devil
Re: Finden von Variablen
Verfasst: Do, 09.07.2015 10:00
von komma4
Wie "stehen" die Variablen denn im Dokument?
Als Text - in der beschriebenen Syntax, oder als Feldbefehl eingefügt?
Re: Finden von Variablen
Verfasst: Do, 09.07.2015 10:34
von Devil
Sie stehen als Text im Dokument.
Ist es Evtl Sinnvoll diese z.B. als Feldbefehl/Variabel in den Text zu schreiben? wenn ja, dann muss ich allerdings noch wissen wie ich diese durch Text ersetze. Bisher nutze ich die Suchen_und_ersetzen funktion von Karolus:
viewtopic.php?f=18&t=64515
Re: Finden von Variablen
Verfasst: Do, 09.07.2015 12:00
von komma4
Naja - eine Variable hat den Vorteil nur *einmal* an *einer Stelle* geändert werden zu müssen.
Der folgende Code liefert ein Beispiel zum Zugriff... und eine Möglichkeit, mit einer Konfigurationsdatei Deine 400 Variablen (!) zu setzen. Musst jetzt "nur noch" die Datei einlesen und zeilenweise abarbeiten.
Code: Alles auswählen
Sub de66003
' 20150709
' Benutzer definiertes Feld:
' Einfügen>Feldbefehl>Andere...>Variablen>Benutzerfeld>[Format]Text
oDok = ThisComponent
oTFM = oDok.getTextFieldMasters()
' hier eine...
' Zeile aus Konfigurationsdatei
zeile = "var1:neuer Inhalt !"
aZeile = SPLIT(zeile, ":")
var = aZeile(0)
txt = aZeile(1)
'
IF oFeld = oTFM.hasByName("com.sun.star.text.fieldmaster.user." & var) THEN
oFeld = oTFM.getByName("com.sun.star.text.FieldMaster.User." & var)
oFeld.Content = txt
END IF
' ggfs. aktualisieren
oDok.getTextFields.refresh()
End Sub
Achtung! die unterschiedliche Schreibweise beim
hasByName/
getByName ist bei meiner aktuell genutzten / der getesteten Version (AOO 4.1.1) nötig, um die Variable zu finden und auf sie zuzugreifen. Weiss der Geier warum (wahrscheinlich ein Fehler)
Viel Spass damit
Re: Finden von Variablen
Verfasst: Do, 09.07.2015 12:18
von Devil
Nur damit ich dich richtig verstehe...
Ich lade aus meiner Konfig-Datei eine Zeile und der Teil
Trennt dann die Zeile an dem ":" in 2 Teile und setzt diese in ein Array richtig???
Re: Finden von Variablen
Verfasst: Do, 09.07.2015 13:06
von komma4
Richtig verstanden
Re: Finden von Variablen
Verfasst: Do, 09.07.2015 13:43
von Devil
Ersteinmal vielen vielen Dank dafür. Aber noch eine Frage: besteht die Möglichkeit das Benutzerfeld komplett zu ersetzen? also quasi so, dass danach nur noch Text da steht und nicht "Benutzerfeld XY=BlaBlaBla" ?
Wenn nicht ist es auch nicht allzuschlimm, denn dann sollte das auch so gehen.

Re: Finden von Variablen
Verfasst: Do, 09.07.2015 13:50
von komma4
STRG+F9 schaltet um
Re: Finden von Variablen
Verfasst: Do, 09.07.2015 13:56
von Devil
Danke Danke Danke

Ich beschäftige mich um ehrlich zu sein noch nicht allzulange mit OOo...
Aber danke für deine Geduld mit mir

Re: Finden von Variablen
Verfasst: Do, 09.07.2015 14:47
von Devil
Ich habe noch ein Problem gerade festgestellt und weiss nicht weiter

Kann es sein, dass das Makro komplett abgebrochen wird, wenn die entsprechende Variable nicht vorhanden ist? Denn das wäre eher Kontraproduktiv, da ich ja in keinem Dokument alle 400 Variablen vergebe (Gott bewahre

). Das ist mir gerade beim Testen aufgefallen.
Beispiel:
Aufbau INI:
Dokument:Test.odt
User:ich
Name:Devil
Vorname:Satan
Vergebene Variablen im Dokument:
Dokument
User
Vorname
Nach durchlaufendes Makros:
Test.odt
ich
Vorname
Re: Finden von Variablen
Verfasst: Do, 09.07.2015 15:18
von komma4
Entschuldige, hat sich ein Kopier-Fehler eingeschlichen... die Abfrage muss lauten:
Code: Alles auswählen
IF oTFM.hasByName("com.sun.star.text.fieldmaster.User." & var) THEN
Re: Finden von Variablen
Verfasst: Do, 09.07.2015 15:55
von Devil
Weiteres Problem: Ich habe einen code, der liefert mir eine Zeile der Konfig Datei nach der anderen. Das funktioniert auch (habe mit mit "Print" die einzelnen Werte ausgeben lassen.)
An der stelle des "Print" befehls die Prozedur zum ersetzen aufgerufen, damit ich jedes Feld durchlaufe. Nun mein Problem: wenn die Prozedur da aufgerufen wird wird der komplette code nur einmal durchlaufen...
Hier der ausschnitt aus dem Code:
Code: Alles auswählen
Sub Main
ReadInicomplete("C:\Users\Devil\Datei.INI", "DatenAnTextverarbeitung", "")
Print "Fertig"
End Sub
function readinicomplete( inifile as string, bereich as string, default as string) as string
Dim inBereich as boolean
Dim aFile as String
Dim #inumber
Dim INIzeile as String
Dim Start as String
Dim parameter as String
Dim breich as String
inBereich=false
readinicomplete=default
breich=bereich
Bereich="["+bereich+"]"
#iNumber = Freefile
aFile = inifile
on error goto ende
if FileExists(inifile) then
Open aFile For Input As #iNumber
Print eof(#iNumber)
While not eof(#iNumber)
Line Input #iNumber, INIZeile
if INIzeile=Bereich then inBereich=true
if inBereich then
ipos=InStr(INIZeile,"=")
if ipos>0 then
Print INIZeile
'################################################################
Variablen(INIZeile) 'Wenn ich diese Zeile Weg lasse, dann funktioniert der Code einwandfrei.
'################################################################
end if
end if
wend
Close #iNumber
end if
exit function
ende:
end function
Sub Variablen(Datazeile as String)
'Prozedur von "komma4" (http://de.openoffice.info/viewtopic.php?f=18&t=66003&p=257020#p257020)
oDok = ThisComponent
oTFM = oDok.getTextFieldMasters()
' hier eine...
' Zeile aus Konfigurationsdatei
aZeile = SPLIT(Datazeile, "=")
var = aZeile(0)
txt = aZeile(1)
IF oTFM.hasByName("com.sun.star.text.fieldmaster.User." & var) THEN
oFeld = oTFM.getByName("com.sun.star.text.FieldMaster.User." & var)
oFeld.Content = txt
END IF
' ggfs. aktualisieren
Dok.getTextFields.refresh()
End Sub
Und das dir mal ein Fehler passiert ist doch nicht schlimm... Da merkt man wieder das alle nur menschlich sind und Fehler machen dürfen

ausserdem hast du bereits so viel schon geholfen

Re: Finden von Variablen
Verfasst: Do, 09.07.2015 16:18
von Devil
Ok Sorry hat sich erledigt... hab das kleine o in der Refresh Zeile übersehen... das muss heissen oDok und nicht Dok...
Trotzdem danke an alle die Gegrübelt haben

Jetzt funktioniert es
