Word-mergefield mit Daten füllen

  • VB.NET

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

    Word-mergefield mit Daten füllen

    Hallo!
    Es wäre toll, wenn mir jemand helfen könnte (Denkanstoß, Codeschnipsel, Links...):
    Visual Basic 2010 Express, Word 2003

    Kurzdarstellung des Problems:
    • in der zu erstellenden Anwendung werden Datensätze verwaltet und gespeichert (csv)
    • von der Anwendung aus wird Word aufgerufen, die Daten werden an die im Dokument vorhandenen mergefields übergeben.
    • der Anwender kann also die Daten außerhalb von Word verwalten, Word zum Drucken nutzen und die dafür benötigten Vorlagen leicht selber erstellen.

    daten.csv: Name;Vorname Meier;Peter
    Vorlage.doc: Guten Tag, { mergefield Vorname} { mergefield Name } ...


    bisherige erste Annäherungen, die funktionieren, aber noch nicht optimal sind:
    1. Einfügen von neuen mergefields in ein neues Word-Dokument
    ungefähr so:

    Quellcode

    1. App = CreateObject("Word.Application")
    2. Dim Doc As Microsoft.Office.Interop.Word.Document
    3. Dim Sel As Microsoft.Office.Interop.Word.Selection
    4. Doc = App.Documents.Add Doc.Application.Documents.Open("Vorlage.doc")
    5. Doc.mailmerge.OpenDataSource(Name:="Daten.csv")
    6. Doc.Mailmerge.Fields.Add(Sel.Range, "Name")



    2. Schreiben der Daten in die Textmarken des Dokuments.
    ungefähr so:

    Quellcode

    1. Dim wd = CreateObject("Word.Application")
    2. wd.Application.Documents.Open("Vorlage.DOC")
    3. wd.ActiveDocument.Bookmarks("Nachname").Select()
    4. wd.Selection.Text = Name


    In beiden Fällen ist die verwendung für den Anwender kompliziert bis unmöglich, da in 1. der Programmcode entscheidend ist und das Layout bestimmt und wie in 2. die Verwendung von Textmarken schwieriger und unflexibler (Stichwort "{ if }") als mergefields sind.

    Gibt es eine Möglichkeit, die Daten entweder direkt aus der Anwendung heraus (meinetwegen aus dem Datagridview) oder über die csv-Datei in die mergefields von Word hineinzubekommen? Oder vielleicht hat jemand einen brauchbaren Vorschlag zu einer alternativen Herangehensweise...

    Danke und viele Grüße,
    Kay

    vb2010 Seriendruck in Word

    Danke für die Idee.
    Ich habe inzwischen die Lösung gefunden, die genau zu meinem Problem passt. Mit ein bisschen Probieren und dem Makrorekorder in Word bin ich drauf gekommen (mir war nicht klar, dass man die VBA-Befehle so leicht übernehmen kann).
    Falls jemand mal vor dem gleichen Problem stehen sollte, hier kurz der Code, den ich nun verwende:

    VB.NET-Quellcode

    1. Dim WordApp As Word.Application
    2. Dim WordDatei As Word.Document
    3. WordApp = New Word.Application()
    4. WordDatei = WordApp.Documents.Open("C:\testdok.doc")
    5. WordDatei.MailMerge.MainDocumentType = Word.WdMailMergeMainDocType.wdFormLetters
    6. WordDatei.MailMerge.OpenDataSource(Name:= _
    7. "C:\testcsv.csv", _
    8. ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
    9. AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
    10. WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
    11. Format:=Word.WdOpenFormat.wdOpenFormatAuto, Connection:="", SQLStatement:="", SQLStatement1 _
    12. :="", SubType:=Word.WdMergeSubType.wdMergeSubTypeOther)
    13. With WordDatei.MailMerge
    14. .Destination = Word.WdMailMergeDestination.wdSendToNewDocument
    15. .SuppressBlankLines = True
    16. With .DataSource
    17. .FirstRecord = Word.WdMailMergeDefaultRecord.wdDefaultFirstRecord
    18. .LastRecord = Word.WdMailMergeDefaultRecord.wdDefaultLastRecord
    19. End With
    20. .Execute(Pause:=False)
    21. End With
    22. WordDatei.Close()
    23. WordApp.Visible = True

    Kay

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