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:stuck_out_tongue_winking_eye:eter
Vorlage.doc
Guten Tag, { mergefield Vorname} { mergefield Name } …
bisherige erste Annäherungen, die funktionieren, aber noch nicht optimal sind:
-
Einfügen von neuen mergefields in ein neues Word-Dokument
ungefähr so:App = CreateObject(„Word.Application“)
Dim Doc As Microsoft.Office.Interop.Word.Document
Dim Sel As Microsoft.Office.Interop.Word.Selection
Doc = App.Documents.Add
Doc.Application.Documents.Open(„Vorlage.doc“)
Doc.mailmerge.OpenDataSource(Name:=„Daten.csv“)
Doc.Mailmerge.Fields.Add(Sel.Range, „Name“) -
Schreiben der Daten in die Textmarken des Dokuments.
ungefähr so:Dim wd = CreateObject(„Word.Application“)
wd.Application.Documents.Open(„Vorlage.DOC“)
wd.ActiveDocument.Bookmarks(„Nachname“).Select()
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