Hi Thomas und 2stupid4this,
man kann Variablen direkt über den Namen ansprechen. Dies geht über TextfieldMaster.
Variablen werden in Writer etwas komisch behandelt. Man kann eine Varibale gleichzeitig mit verschiedenen Werten verwenden. Diese stehen dann innerhalb der Variablen in eigenen Textfeldern. Diese Textfelder werden mit getTextFields aufgerufen.
Man kann dies ausprobieren in dem man einfach nacheinander zwei Variablen in einen Text mit dem gleichen Namen setzt. Die Werte dieser Variablen lassen sich dann über die Enumaration auslesen und setzten.
Dabei wird auf den Service "com.sun.star.text.TextField.SetExpression" geprüft. Mit msgbox oFeld.VariableName in der Schleife sieht man den "doppelten" Variablennamen und die verschiedenen Werte.
Die eigentliche Variablenwerte stehen aber in einem eigenen TextFieldMaster-Service, das dynamisch generiert wird und den Namen com.sun.star.text.TextField.SetExpression.Name erhält.
Und auf diesen Master kann über den Namen direkt zugreifen. Diesen muß man aber selber bilden: com.sun.star.text.TextField.SetExpression. + Name.
Nur das man dann daran denken muss dass man jetzt auf den richtigen Wert zugreift. Dies geht nur über den Index. Da man in der Regel aber jede Variable nur einmal einsetzt, ist das dann 0.
Hier zwei Funktionen zum Auslesen und Setzen von Variablen.
Hierbei ist Variable der Name den man selber beim Einfügen gesetzt hat.
Nach dem Setzen sollte man das Dokument aktualisieren (odoc.refresh) sonst sieht man den neuen Werte nicht.
Code: Alles auswählen
Function SetVariable(oDocument as object,Variable as string,Inhalt as string) as string
Dim Var as String
Dim oTextfieldMaster As Object
Dim oPropSet as Object
Dim oDependentTextFields as Object
Dim oXDependentTextField as Object
Dim oTextFields as Object
On Error Resume Next
Var ="com.sun.star.text.FieldMaster.SetExpression."+Variable
oTextfieldMasters = oDocument.getTextFieldMasters()
oPropSet = oTextfieldMasters.getByName(Var)
oDependentTextFields = oPropSet.DependentTextFields
oXDependentTextField = oDependentTextFields(0)
oXDependentTextField.Content=inhalt
On Error Goto 0
End Function
Function GetVariable(oDocument as object,Variable) as string
Dim Var as String
Dim oTextfieldMaster As Object
Dim oPropSet as Object
Dim oDependentTextFields as Object
Dim oXDependentTextField as Object
Dim oTextFields as Object
On Error Resume Next
Var ="com.sun.star.text.FieldMaster.SetExpression."+Variable
oTextfieldMasters = oDocument.getTextFieldMasters()
oPropSet = oTextfieldMasters.getByName(Var)
oDependentTextFields = oPropSet.DependentTextFields
oXDependentTextField = oDependentTextFields(0)
GetVariable= oXDependentTextField.Content
On Error Goto 0
End Function
mfg
Michael