Was aktualisiere ich korrekt Felder in einem Word-Dokument?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von sashu.

    Was aktualisiere ich korrekt Felder in einem Word-Dokument?

    Hi,
    ich möchte in einem Word-Dokument, das als Serienbrief gedacht ist, einige Felder durch VB-Code aktualisieren. Dafür habe ich eine Template-Datei erstellt, wo etliche Felder durch {MERGEFIELD «Feld»} definiert, die ich meinen Angaben ändern möchte. Zu diesem Zweck habe ich mir so einen Programmcode überlegt:

    VB.NET-Quellcode

    1. Dim oWord As New Word.Application
    2. oWord = CreateObject("Word.Application")
    3. Dim oDoc As New Word.Document
    4. oDoc = oWord.Documents.Add(vorlage)
    5. oDoc.FormFields("«Feld»").Result = "aaa" oder oDoc.Fields("«Feld»").Result = "bbb"


    Der Code ist falsch, denn das Visual Studio kann das Feld nicht finden. Das angeforderte Element ist nicht in der Sammlung vorhanden. Wie kann es sein, wenn ich es doch im Dokument sehen kann? Ich habe auch versucht mir alle Felder mit For Each oDoc. Fields anzeigen zu lassen:

    VB.NET-Quellcode

    1. For Each t In oDoc.Fields
    2. Console.WriteLine(t.ToString)
    3. Next


    Aber da bekomme ich die Ausgabe System.__ComObject.
    Es gibt zig Typen von Fields.
    MergeFields sind eine Variante.

    sashu schrieb:

    For Each t In oDoc.Fields
    Console.WriteLine(t.ToString)
    Next
    Setz einen Haltepunkt und schau dir die t Objekte an, ob dein gewünschtes Objekt dabei ist.
    t.ToString gibt die den Objekttyp zurück.
    t hat auch noch viele andere Eigenschaften.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ich kann die Werte im Debugger nicht sehen, weil das der native Code ist. Aber ich habe mich letztendlich für eine andere Variante entschieden: ich kann die Felder mit Ersetzen "überbraten".

    VB.NET-Quellcode

    1. Do
    2. oWord.Selection.Find.ClearFormatting()
    3. With oWord.Selection.Find
    4. .Text = text
    5. .Execute(ReplaceWith:=replaceWith,
    6. Replace:=wdReplaceAll, Forward:=True)
    7. End With
    8. 'Exit the loop when the search Is unsuccessful.
    9. If oWord.Selection.Find.Execute = False Then Exit Do
    10. Loop


    wo bspw text="«Name»" und replacewith="Dan" ist.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „sashu“ ()