Per Knopfdruck Textbereich in LibreOffice ein/ausblenden

Posted by on 07 Oct 2011 | Tagged as: hyper_ch, LibreOffice

Auf der Arbeit haben wir vorgedrucktes Papier mit Fusszeile welche Adresse etc. enthält. Da es nun aber auch möglich ist, elektronische Eingaben an Gerichte und Strafverfolgungsbehörden einzureichen, musste ich einen Weg finden, wie ich bequem diese Adressdaten in der Fusszeile ein- ausschalten kann.

An sich war es relativ simpel mit Hilfe eines Custom Fields des Typs “Set variable” sowie der “Hidden Paragraph” Funktion das zu machen. Allerdings musste ich immer wieder manuell den Wert ändern. Nach einiger Suche habe ich dann hier ein uraltes Makro gefunden, was genau das tut, was ich will. Nachfolgend gibt es eine Schritt-für-Schritt Anleitung wie man das einrichtet.

1. Einen nicht-druckbaren Frame erstellen

Der Grund wieso ich einen Frame erstelle liegt darin, dass ich sowohl das Feld wie auch den Button dort einbinden kann und nach belieben “herumschieben” kann. Das ist nicht notwendig, es macht es einfach klarer, vorallem wenn auch der Hinweis erfolgt, dass dieser Frame im Ausdruck nicht erscheint.

Zuerst via Insert -> Fame einen neuen Frame erstellen und die Ausmasse und Positionierung bestimmen:

Danach in den Options den Ausdruck deaktivieren:

Zum Schluss dann noch in Borders eine Umrandung für die bessere Sichtbarkeit festlegen:

2. Set Variable Feld erstellen

Nachdem nun der Frame errichtet wurde, kann eine kurze Notiz angebracht werden, dass dieser Frame nicht gedruckt wird. Danach via Insert -> Fields -> Other ein neues Feld einfügen. Dazu muss auf den Tab “Variables” gewechselt werden und dort als Typ “Set Variable” ausgewählt werden. Einen Namen und einen Wert vergeben. Im Beispiel benutze ich KopfzeileAnzeigen als Namen und als Werte “JA” resp. “NEIN”. Es könnte ebensogut 0/1 verwendet werden. Ich ziehe in diesem Fall jedoch JA/NEIN vor, weil der Feldwert im Frame auch angezeigt wird, falls als Format “Text” ausgewählt worden ist. Für andere Benutzer ist es einfacher verständlich.

Danach auf “Insert” drücken um das Feld im Dokument tatsächlich einzufügen.

3. Versteckten Text erstellen

In meinem Beispiel muss ich zuerst noch die Kopfzeile aktivieren. Danach füge ich wiederum ein Feld ein: Insert -> Fields -> Other. Ich gehe dann auf den Tab Functions, wähle Hidden Paragraph und füge als Condition ein:

KopfzeileAnzeigen EQ "NEIN"

Dies bedeutet nichts anderes, als wenn das KopfzeileAnzeigen den Wert “NEIN” hat, soll dieser Absatz versteckt sein.

Nachdem auf Insert gedrück wird, erscheint in der Kopfzeile am linken Rand nun ein graues Feld. Nun kann dort Text eingefügt werden nach belieben. Der Text kann auf formatiert werden. WICHTIG: Das Verstecken gilt natürlich nur für diesen Absatz. Enthält die Kopfzeile weitere Absätze, muss dort auch wieder diese Funktion eingefügt werden.

Mit eine Doppelklick auf das “JA” kommt wiederum der Dialog wo der Feldwert geändert werden kann. Solange dort als Wert nicht “NEIN” drinnen steht, bleibt der versteckte Absatz sichtbar. Ebenfalls kann man auch die Bedingung beim versteckten Absatz ändern. Es ist dort auf das graue Feld (rot umrahmt) zu doppelklicken. Das ist allerdings immer etwas mühsam und braucht zumeist mehrere Anläufe.

Damit wäre nun eine einfach Weise, wie zwischen verstecktem / sichtbaren Text hin- und hergeschalten werden kann, gegeben. Allerdings ist das etwas zu mühsam. Ich bin faul und will das lieber per Knopfdruck erledigen.

3. Makro erstellen

LibreOffice verfügt auch über Formularfelder. Allerdings sind diese nicht dazu ausgelegt, andere Felder im Dokument zu verändern. Was aber möglich ist, dass man diese mit einem Makro versehen kann. Zuerst erstellen wir also ein Makro, welches den Feldwert des Felds “KopfzeileAnzeigen” zwischen JA und NEIN hin- und herschaltet.

Da ich das Dokument nicht als einziger Benutz und die Pfade zu den lokalen Makros zum Teil unterschiedlich sind, füge ich das Makro direkt im Dokument ein. Somit ist eine Portabilität gegeben. Dazu einfach auf Tools -> Macros -> Organize Macros -> LibreOffice Basic klicken. Danach das Dokument auswählen (in meinem Fall “Untitled1”) und danach auf “New” drücken. Einen Namen für das neue Modul angeben (ich wähle FeldwerteUmschalten) und dann auf OK drücken.

Es geht dann ein neues Fenster auf, wo der nachfolgende Makrocode dann eingefügt werden kann:

sub KopfzeileAnzeigen
' updates the field value
Dim Doc As Object
Dim TextFieldEnum As Object
Dim TextField As Object
Dim I As Integer
Doc = Thiscomponent
TextFieldEnum = Doc.getTextFields.createEnumeration  ' all fields in document
While TextFieldEnum.hasMoreElements()
   TextField = TextFieldEnum.nextElement()  ' find the fields
   Master = Textfield.gettextfieldmaster()  ' get the master to get the field name
   If master.name="KopfzeileAnzeigen" then               ' chosen field name
      if textfield.content = "JA" then
         textfield.content = "NEIN"
      else
         textfield.content = "JA"
                           ' set value
      end if
   end if
Wend
thiscomponent.getTextFields.refresh()
end sub

Da mehrer verschiedene versteckte Optionen möglich sind, die je individuell mit einem Knopf de/aktiviert werden sollen, sollte die erste Zeile “sub KopfzeileAnzeigen” entsprechend angepasst werden auf die gewünschte Aktion. Die einzelnen Subroutienen stehen dann separat zur Auswahl zur Verfügung.

Das Makro macht nichts weitere als die jeweiligen Felder im Dokument auszulesen und der Reihe nach durchzuarbeiten. Die Zeile mit “If master.name=”KopfzeileAnzeigen” ist wichtig. Da dort das gesucht Feld “KopfzeileAnzeigen” vorhanden ist. Das allenfalls ändern.
In den nächsten paar Zeilen wird dann zwischen zwei Werten umgeschalten. Vorliegend: Falls der aktuelle Feldwert “JA” ist, dann soll der Feldwert auf “NEIN” geändert werden, ansonsten soll er auf “JA” geändert werden. Hier kann auch mit 1 und 0 operiert werden oder auch anderen Dingen. Es kann an sich auch erweitert werden.

Danach kann das Makrocode Fenster geschlossen werden.

4. Button erstellen und mit Makro versehen

Falls die Form Control Toolbar noch nicht vorhanden ist, diese mit View -> Toolbars -> Form Control aktivieren. Danach in den Designer Mode gehen. Der Button für den Designer Mode ist links rot umrahmt, der Button Design Button ist rechts rot umrahmt:

Im Designer Mode also dann den Button Design Button auswählen und einen Button im Frame zeichnen. Ich habe ihn extra etwas grösser gemacht:

Im General Tab kann dann ein Name und ein Label vergeben werden. Das Label ist der Text, der dann auf dem Button erscheint. VORSICHT: In der aktuellen LibreOffice Version 3.4.3 bei mir, kann ich jeweils nur ein “Ding” ändern im Formulareditor. Ich muss nach einer Änderung also den Button Properties Dialog schliessen und dann mit einem Doppelklick wieder neu aufrufen.

Wenn der Button Properties Dialog geschlossen wird, werden die Änderungen übernommen.

Danach wieder Doppelklick auf den Button und diesmal in den Events Tab gehen. Dort kann je nach Aktion etwas passieren. Uns interessiert hier die Exectue Action, also daneben auf den “…” Button klicken:

Und dann Assign Macro auswählen. Es kommt eine Dialogbox und dort im Dokument, im entsprechenden Modul das KofpzeileUmschalten Makro auswählen:

Danach können die Dialogboxen geschlossen und das Dokument gespeichert werden. Das ganze müsste nun so aussehen:

Und mit einem Klick auf den Button, müsste es dann so aussehen:

5. Makro Warnung deaktivieren

Da Markos grundsätzlich viel Schaden anrichten können, fragt LibreOffice standardmässig, ob die Makros aktiviert werden dürfen. Mit der Zeit kann das nevern – insbesondere wenn es um eigene Dokumente geht, von denen man weiss, dass die Makros harmlos sind.

LibreOffice bietet hierzu die Möglichkeit, dass grundsätzlich alle Makros ausgeführt werden können. Darüber hinaus bietet LibreOffice die Möglichkeit, dass bei Dokumenten aus einem bestimmten Verzeichnis die Makros automatisch ausgeführt werden. Diese zweite Option ist viel sicherer. Bei Fremddokumenten weiss man nicht, was enthalten ist. Die eigenen Dokumente resp. Dokumentvorlagen sollten jedoch vertrauenswürdig sein.

Um solche Verzeichnisse freizuschalten muss auf Tools -> Options -> LibreOffice -> Security -> Macro Security gegangen werden. Und dann auf den Tab Trusted Sources gewechselt werden. Unter Trusted File Locations können dann die gewünschten “sicheren” Verzeichnisse hinzugefügt werden. LibreOffice Dokumente, welche sich in diesen Verzeichnissen befinden, werden die Makros automatisch aktivieren.

Und hier das Ganze nochmals in Videoform:

Comments are closed.