Seite 1 von 1
Variablen und AutoText
Verfasst: Mi, 10.06.2009 12:03
von saturus
Hallo,
in unserer Firma setzen wir nun über Jahre hinweg erfolgreich OpenOffice in der Version 2.2 ein. Ein Update auf 2.4 oder höher war bisher nicht möglich, da eine Funktion in der neuen Version nicht mehr funktioniert.
Nun wird es aber doch langsam Zeit, die Software wieder auf den aktuellen Stand zu bringen.
Das ist unser Problem:
Durch ein Makro werden in einer Textdatei bestehende Variablen (Adressen, Verteiler usw.) geändert. Dies funktioniert auch wunderbar. Ein Teil der Variablen werden auf im Briefkopf sofort dargestellt. Diese werden auch korrekt geändert. Ein weiterer Teil wird aber nur bei bestimmten AutoTexten auf den Brief gedruckt. Beinhalten diese nur Zahlen, dann funktioniert es wunderbar, bei Texten erscheint aber nur eine "0". Dies war bis Version 2.2 nicht so.
Wenn man den AutoText nachträglich bearbeitet (angezeigte Variable löscht und dann die gleiche Variable wieder anzeigen läßt), dann funktioniert es. Es wird der korrekte Text dargestellt und nicht die "0". Unsere Vermutung ist, dass die Anzeigeeinstellungen der Variablen ab Version 2.4 nicht mehr korrekt in die AutoTexte gespeichert wird.
Hat hier jemand Erfahrung bzw. weiß hier jemand eine Lösung.
Vielen Dank im Voraus.
Re: Variablen und AutoText
Verfasst: Fr, 12.06.2009 09:17
von saturus
Hallo nochmal,
ich habe glaube die Ursache für mein o. g. Problem gefunden, nur weiß ich nicht, wie man es beheben kann. Meiner Meinung nach ist es ein BUG beim Einfügen von Texten aus dem AutoText.
Um die Ursache meines Problems zu lösen haben ich jeden Schritt vom Erstellen des AutoTextes bis zum Einfügen analysiert. Dabei habe ich die entsprechenden Dateien entpackt und mit einem XML-Editor zu schauen, wie meine Variablen und vorallem mit welchen Typ sie abgelegt werden.
Schritt 1: Erstellen des Textbausteins in einem Beispielbrief.
Das Entpacken der odt-Datei und Prüfung der Content-XML ergab das meine Variable (hier z. B. "AnlNr" den Typ "string" hat).
Schritt 2: Speichern des Textes als Textbaustein
Das Entpacken der bau-Datei ergab, dass die o. g. Variable den immer noch den Typ "string" hat.
Schritt 3: Laden des Textbausteines in einen neuen Brief
Der Wert der Variable wird im neuen Brief mit dem geladenen Textbaustein mit "0" angezeigt. Zur Gegenprobe, ob im Dokument die Variable richtig belegt ist, habe ich die gleiche Variable nochmal manuell daneben anzeigen lassen. Hier wird der Inhalt korrekt angezeigt (hier im Beipsiele "alle Anlagen". Jetzt habe ich den neuen Brief gespeichert und entpackt. Die erste Anzeige der Variable "AnlNr" (aus dem Textbaustein) hat jetzt den Typ "float" bekommen, die zweite Anzeige (manuelles Einfügen) hat den richtigen Typ "string". Die Umwandlung des Variablentyps muss also beim Einfügen von Texten mit Variablen aus den AutoText passiert sein.
Eventuell hat jemand schon das Gleiche gehabt oder sogar schon einen Lösung.
Re: Variablen und AutoText
Verfasst: Fr, 12.06.2009 09:30
von Stephan
Ich denke DEine Beschreibung des Problems ist eigentlich vollständig, ich verstehe sie wohl trotzdem nicht völlig und habe vor allem dsas Problem das ich hier auf die Schnelle kein OOo 2.2 habe, um m ir die dortige Verhaltensweise des Programms anzusehen.
Poste doch bitte mal das/die verwendeten Makros vielleicht hilft das zum Verständnis oder gibt jemandem eine Anregung für eine Lösung.
Gruß
Stephan
Re: Variablen und AutoText
Verfasst: Fr, 12.06.2009 10:59
von saturus
Hallo,
hier der gewünschte Code zum Ändern des Variabelinhaltes
Code: Alles auswählen
Sub ChangeVariable(oDocument as object,Variable,NewContent 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)
oldValue = oXDependentTextField.Content
oXDependentTextField.setPropertyValue("Content", Newcontent)
oTextFields = oDocument.getTextFields()
oTextFields.refresh()
On Error Goto 0
End Sub
Soweit ich erkennen kann werden die Werte auch korrekt vom Eingabedialog in die Variablen im Dokoment geschrieben. Nur die Anzeige der Variablen, wenn die Anzeige aus einen Textbaustein kommt, haut nicht hin. Gehört die Anzeige selbst zu Dokument (z. B. im Briefkopf der Empfänger), dann ist auch alles richtig.
Re: Variablen und AutoText
Verfasst: Fr, 12.06.2009 20:45
von Stephan
OK, gibt mir aber leider keine Anregung.
Für mich ist auch hier in Kürze nicht nachzuvollziehen warum ihr den Weg gewählt habt den ihr nutzt und ich weiß somit nicht was für alternative Wege akzeptabel wären.
Nein, ich meine damit nicht das euer gewählter Weg unzweckmäßig wäre, ich weiß nur schlicht zu wenig über die Hintergründe um zu einer Alternative raten zu können.
tun würde ich Folgendes:
1.
Den Fehler melden, siehe:
viewtopic.php?f=3&t=12975
weil ich wegen der Art des Fehlers vermute der wird sobald niemandem sonst auffallen und ohne Meldung gibts keine Chance das de Fehler beseitigt wird.
2.
unter Ausnutzung des beschrieben Verhaltens (sofern ich das Verhalten richtig verstehe):
Der Wert der Variable wird im neuen Brief mit dem geladenen Textbaustein mit "0" angezeigt. Zur Gegenprobe, ob im Dokument die Variable richtig belegt ist, habe ich die gleiche Variable nochmal manuell daneben anzeigen lassen. Hier wird der Inhalt korrekt angezeigt (hier im Beipsiele "alle Anlagen". Jetzt habe ich den neuen Brief gespeichert und entpackt. Die erste Anzeige der Variable "AnlNr" (aus dem Textbaustein) hat jetzt den Typ "float" bekommen, die zweite Anzeige (manuelles Einfügen) hat den richtigen Typ "string". Die Umwandlung des Variablentyps muss also beim Einfügen von Texten mit Variablen aus den AutoText passiert sein.
sollte es möglich sein ein Makro zu schreiben welches nach Einfügen des Textbausteins alle Feldbefehle liest (oder nur die notwendigen, die man dann markieren müßte z.B. durch bestimmten Namenszusatz), anschliessend unmittelbar an gleicher Stelle wieder setzt und die ursprünglich Gesetzten löscht.
Sorry, ich weiß das das ein frickliger Vorschlag ist, nur ich fürchte hier im Rahmen eines Forumsthreads dürfte es ewig dauern einen vernünftigen workaround zu entwickeln, weil dazu alle zu beachtenden Nebenbedingungen, welche für Euch wichtig sind, zu klären wären und das wird wohl zu kompliziert.
Vielleicht zieht ihr ja (da es um Firmenzwecke geht) auch einen Dienstleister hinzu, eine Auflistung findet sich z.B. hier:
http://webtools.projects.ooodev.org/support/
Gruß
Stephan