MS Word-Textbausteine in der Datenbank zentral verwalten!
avatar

Des Öfteren ist bereits an mich die Anforderung herangetragen worden, dass Kunden, die intensiv mit Word-Dokumenten arbeiten, gerne mehr Kontrolle und weniger Pflegeaufwand bei der Verwaltung Ihrer Textbausteine haben würden. In der Regel hat jeder Mitarbeiter auf seiner Maschine ein Set von Textbausteinen, mit denen er/sie arbeitet. Oft gibt es aber Textbausteine, deren Aussehen und Inhalt zum Beispiel gesetzlichen Regelungen unterliegt. Wenn sich nun an solch einem Textbaustein eine Änderung ergibt, dann wird es schwierig, diese auf allen Rechnern zeitnah sicherzustellen!

Aus diesem Grund wünschen sich viele Kunden eine Möglichkeit, die Textbausteine an einer zentralen Stelle pflegen und verwalten zu können, so dass jeder Mitarbeiter immer nur den aktuellen Stand zur Verfügung hat. Daraus entstand meine Motivation für dieses Problem eine Lösung zu finden und habe mal prototypisch einen Lösungsansatz skizziert. Nachfolgend ist die Lösung grob umrissen!

 

Die Lösung

Die Kern-Idee des Ansatzes besteht darin ein Add-in bereitzustellen, das seine Textbausteine aus einer zentralen Datenbank bezieht und dem Anwender ermöglicht, diese an der Schreibmarke im Dokument zu platzieren.

Dies ist ja letztendlich auch kein Hexenwerk, bis man zu der Stelle kommt, wo die Textbausteine erfasst und gepflegt werden müssen! Einen einfachen Text zu erfassen, stellt noch kein Problem dar. Dieser könnte auch direkt in der Datenbank gepflegt werden. Aber was ist, wenn die Anforderung besteht, Elemente wie bspw. Bilder, Tabellen, etc. im Textbaustein einzubinden! MS Word arbeitet seit Office 2007 mit einer komplexen, internen Struktur mit diversen Verzeichnissen für Styles, Bilder, etc.. Die Herausforderung besteht nun darin, den Textbaustein inklusive aller Elemente wie Text, Struktur, Bilder, Styles, etc. komplett in einem Container zu verpacken, diesen in der zentralen Datenbank zu persistieren und wieder in das Dokument einbinden zu können. Es gibt zwar einige Hersteller, die Editoren für Word-Inhalte anbieten; diese Komponenten sind aber entweder nicht sehr gut oder sehr teuer. Daher tendiere ich dazu, Word-Inhalte auch in Word zu erstellen!

Aus diesem Grund kann mein Word Add-in sowohl Textbausteine erfassen, als auch im Dokument einfügen! (Die Funktionen können in der finalen Lösung natürlich in einem Rechte-Rollen-Kontext angeboten werden.)

 

image

 

Unter dem Reiter “Textbausteine” findet der Anwender die Auswahl der bestehenden Textbausteine und die Option einen neuen zu erfassen.

 

image

 

Um einen neuen Textbaustein zu erfassen, markiert man den gewünschten Inhalt und klickt in der Ribbon auf “Textbaustein erfassen”.

 

image

 

Es erscheint ein kleiner Dialog zur Erfassung relevanter Metadaten, die für die Ablage und Präsentation benötigt werden.

 

image 

 

Die Kategorie verwende ich der Übersicht halber, damit nicht alle Textbausteine in einer flachen Liste dargestellt. (Die Kategorien stammen auch aus einer Datenbank-Tabelle). Die Bezeichnung ist später relevant, um den Textbaustein in der Auswahl im Ribbon auszuweisen.

Nach dem Klick auf “ok” wird der Inhalt als OpenXML in der Datenbank abgelegt.

 

image

 

Nun kann dieser Textbaustein von allen Anwendern nach belieben verwendet werden, wie nachfolgend zu sehen.

 

image

Und wie durch Zauberhand! Tadaa!

image

 

Zum Editieren muss man lediglich einen bestehenden Textbaustein im Word-Dokument einfügen, anpassen und unter gleichem Namen wieder speichern. Dabei fängt eine Sicherheitsabfrage zufällige Überschreibungen ab.

Das Löschen ist derzeit noch in der Datenbank vorgesehen, kann aber später ebenfalls über die Ribbon angeboten werden.

 

Das Herzstück der Anwendung besteht im Erfassen und Einfügen des Word-Inhaltes. Nachfolgend sind die beiden wichtigsten Code-Schnipsel aus dem Prototyp dargestellt.

Das Erfassen:

Public Sub OnGetContentButton(ByVal control As Office.IRibbonControl)

            Dim currentRange As Microsoft.Office.Interop.Word.Range = Globals.HVTextbausteineAddIn.Application.Selection.Range()

            'Dim text As String = currentRange.XML
            Dim contentXML As String = currentRange.WordOpenXML

            Dim cMan As OperationManager = New OperationManager()
            Dim categories As List(Of TextbausteinKategorieDaten) = cMan.GetTextBlockCategories()

            Dim dialog As AddTextblockDialog = New AddTextblockDialog(categories)

            Dim categoryGuid As Guid = Guid.NewGuid()
            Dim description As String = String.Empty

            If dialog.ShowDialog() = DialogResult.OK Then

                categoryGuid = dialog.KategorieID
                description = dialog.Bezeichnung
                ' save content in data base
                If (cMan.CreateOrUpdateTextblock(description, contentXML, categoryGuid)) Then

                    'clear collection to get fresh from DB
                    TextBlockAnzeigeDaten.Clear()
                    MessageBox.Show("Der Textbaustein wurde erfolgreich erfasst!")

                Else
                    MessageBox.Show("Leider trat ein Fehler auf! Der Textbaustein konnte leider nicht erfasst werden")
                End If
            End If
        End Sub

 

Das Einfügen im Dokument:

        Public Sub OnInsertTextblockButton(ByVal control As Office.IRibbonControl)

            Dim currentRange As Microsoft.Office.Interop.Word.Range = Globals.HVTextbausteineAddIn.Application.Selection.Range

            Dim categoryId As String = control.Tag
            'string test = currentRange.XML;

            Dim textBlockId As Guid = New Guid(control.Id.Split("_")(1))

            For Each tData In TextBlockAnzeigeDaten(New Guid(categoryId))

                If (tData.TextbausteinId = textBlockId) Then
                    currentRange.InsertXML(tData.TextbausteinInhalt)
                End If
            Next
        End Sub

 

Die Lösung funktioniert einwandfrei und hat im Gegensatz zu den Editor-Komponenten von Drittanbietern keinerlei Einschränkungen. (Jedenfalls sind mir bis jetzt keine aufgefallen. Smile)

6 Gedanken zu “MS Word-Textbausteine in der Datenbank zentral verwalten!
avatar

  1. Pingback: MS Word-Textbausteine in der Datenbank zentral verwalten! - SharePoint Blogs in German - Bamboo Nation

  2. Unser Textbausteinverwaltung texManager wurde auch speziell für MS Word entwickelt. Die Bedienung ist einfach und intuitiv.

    Der texManager kann auch über VBA angesteuert werden und biete darüberhinaus jede Menge nützliche Features für das Arbeiten mit Word-Dokumenten.

    Hier gibt es weitere Infos:
    Für Privatanwender gibt es eine kostenfreie Freewareversion.

    www. texManager.de

  3. Die Idee ist sehr gut – jedoch würde ich diesen Weg eher im absoluten Notfall gehen. Was halten Sie davon, die Textbausteine nicht in OpenXML sondern in einem wirklich anwendungsneutralen Format wie OpenDocument XML zu speichern? Weiterer Tip: die Textbausteine in Shareponint ablegen.

    Alternativ kann man natürlich zur Verwaltung von Textbausteinen ein PIM System wie Alterra PIM von Sepia nehmen. http://www.sepia.de

  4. Hallo, ich suche nach einer Möglichkeit eine XML-Datei mit Textbausteinen in WORD als modularen Baukasten zur Texterstellung (z.B. Operationsbericht) zu erstellen. Dafür gab es in dem Programm das mir nicht mehr zur Verfügung steht einen bis auf 6 Unterebenen erstellten Auswahlbaum (wie Dateienverzeichnis). Dort wurden die TBS angeklickt und so der Text generiert. Da Sie ja mit XML arbeiten müßte eine solche Anwendung möglich sein.
    Haben Sie eine Idee?

    MfG M. Schnabel

  5. Hallo Herr Witt,
    gäbe es denn eine Möglichkeit auf die aktuelle Version zu Ihrer Anwendung, um MS Word-Textbausteine in der Datenbank zentral zu verwalten!
    Denn mich würde stark interessieren, wie Sie die formatierten Texte in eine MS SQL DB ablegen und wieder als Autotext in Word per Kürzel zur Verfügung stellen.
    Auf eine Antwort Ihrerseits würde ich mich sehr freuen!
    Mit freundlichen Grüßen,
    Stephan Ferner

  6. Genau das brauche ich im Moment! Wie hast du das programmiert? und wo? ist es schwer das nachzubauen ohne Erfahrung? Würde mich sehr über eine Antwort freuen.
    Vielen Dank im Voraus
    Gruß, Dominik

Schreibe einen Kommentar