[gelöst]Finden von Variablen
Moderator: Moderatoren
[gelöst]Finden von Variablen
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
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
Zuletzt geändert von Devil am Do, 09.07.2015 16:47, insgesamt 1-mal geändert.
Höllische Grüße
Devil
Devil
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Finden von Variablen
Wie "stehen" die Variablen denn im Dokument?
Als Text - in der beschriebenen Syntax, oder als Feldbefehl eingefügt?
Als Text - in der beschriebenen Syntax, oder als Feldbefehl eingefügt?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Finden von Variablen
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
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
Höllische Grüße
Devil
Devil
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Finden von Variablen
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.
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
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
Viel Spass damit
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Finden von Variablen
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???
Ich lade aus meiner Konfig-Datei eine Zeile und der Teil
Code: Alles auswählen
aZeile = SPLIT(zeile, ":")
Höllische Grüße
Devil
Devil
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Finden von Variablen
Richtig verstanden
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Finden von Variablen
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.
Wenn nicht ist es auch nicht allzuschlimm, denn dann sollte das auch so gehen.

Höllische Grüße
Devil
Devil
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Finden von Variablen
STRG+F9 schaltet um
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Finden von Variablen
Danke Danke Danke 
Ich beschäftige mich um ehrlich zu sein noch nicht allzulange mit OOo...
Aber danke für deine Geduld mit mir

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

Höllische Grüße
Devil
Devil
Re: Finden von Variablen
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


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
Höllische Grüße
Devil
Devil
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Finden von Variablen
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
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Finden von Variablen
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:
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 
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


Höllische Grüße
Devil
Devil
Re: Finden von Variablen
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 
Trotzdem danke an alle die Gegrübelt haben


Höllische Grüße
Devil
Devil