Word: Handhabung von Daten in einer Klasse, wenn es mehrere Dokumente gibt

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von jan99.

    Word: Handhabung von Daten in einer Klasse, wenn es mehrere Dokumente gibt

    Moin!

    ich kann über die Ribbons zum Beispiel eine Klasse initalisieren, die innerhalb eines Dokumentes Daten analysiert und innerhalb dieser Klasse ablegt.

    Nun kann ich aber gleichzeitig mehrere Word-Dokumente offen haben. Wird intern jedes Dokument mit einem eigenen Bereich verwaltet sodas ich zwischendurch die Dokumente wechseln kann?

    Weiß einer mehr und kann mir ggf. weiterhelfen?!?!?

    Gruß Jan
    Moin!

    ich habe das einmal auf das wesentliche reduziert.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Reflection
    2. Imports System.Windows.Forms
    3. Imports System.IO
    4. Public Class Properties
    5. Private _objDoc As Word.Document
    6. Private _KeyWords As New Dictionary(Of String, String)
    7. Public Sub New(objDoc As Word.Document)
    8. _objDoc = objDoc
    9. _KeyWords = GetKeywords
    10. End Sub
    11. ''' <summary>
    12. ''' Auslesen der übergebenen Keywords
    13. ''' </summary>
    14. ''' <returns></returns>
    15. Public ReadOnly Property GetKeywords() As Dictionary(Of String, String)
    16. Get
    17. Dim Result As New Dictionary(Of String, String)
    18. ' Quelle: https://foren.activevb.de/archiv/vb-net/thread-106637/beitrag-106645/Re-Setzen-von-Dokumenteneigensc/
    19. Dim BuiltInProps As Object = _objDoc.BuiltInDocumentProperties
    20. Dim typeDocBuiltInProps As Type = BuiltInProps.GetType()
    21. Dim CommentsProp As Object = typeDocBuiltInProps.InvokeMember("Item", BindingFlags.Default Or
    22. BindingFlags.GetProperty, Nothing,
    23. BuiltInProps, New Object() {Word.WdBuiltInProperty.wdPropertyKeywords})
    24. Dim typeKeyWordsProp As Type = CommentsProp.GetType()
    25. Try
    26. Dim textKeywordsProp As String = typeKeyWordsProp.InvokeMember("Value", BindingFlags.Default Or BindingFlags.GetProperty,
    27. Nothing, CommentsProp, New Object() {}).ToString()
    28. ' Aufsplitten der Daten
    29. Dim KeyValue As String() = textKeywordsProp.Split({"|"}, StringSplitOptions.RemoveEmptyEntries)
    30. For i As Integer = 0 To KeyValue.Count - 1
    31. Dim Data As String() = KeyValue(i).Split({":="}, StringSplitOptions.RemoveEmptyEntries)
    32. If Data.Count = 2 Then
    33. If String.IsNullOrEmpty(Data(1)) = False Then 'Wert belegt - leere Keys werden nicht übernommen
    34. If Result.ContainsKey(Data(0)) = False Then ' keine Doppelbelegung möglich; werden nicht überschrieben
    35. Result.Add(Data(0), Data(1))
    36. End If
    37. End If
    38. End If
    39. Next
    40. Catch
    41. End Try
    42. _KeyWords = Result
    43. Return Result
    44. End Get
    45. End Property
    46. End Class



    Es wird mit der Initalisierung ein Teil der Doc-Properties (Keyword) ausgelesen und analysiert.

    Nun kann es vorkommen, dass mehrere Dokumente geöffnet werden und zwischen den Dokumenten auch gewechselt wird.

    Beim aufrufen einer bestimmten Funktion wird diese Klasse initalisiert und wenn dann dieses Dok einmal wieder aktiviert wird, dann sollen diese Daten weiter zur Verfügung stehen ohne neu initalisieren zu müssen.

    Gruß Jan