Benötige Hilfe bei Serienbrieferstellung über Word (VSTO)
-
Hallo ihr Lieben,
ich hoffe mir kann jemand hier bei einer kleinen Problematik behilflich sein, leider handelt es sich hierbei womöglich um ein Nieschenproblem:
Ich habe in meinem Visual Studio die Wordanbindung implementiert über VSTO.
Nun habe ich ein Programm programmiert, welches ein Word Dokument über ein sogenanntes Template (Musterdokument) mit MergeFeldern öffnet:
Application wordApp = new Application(); Document oDoc = wordApp.Documents.Open(template);
Bei dem Template handelt es sich um den vollständigen Dateinamen inklusive Pfad der Templatedatei.
Dann wird über die programmierte Serienbriefverarbeitung in dem neuen Zieldokument über eine CSV-Datenquelle jedes MergeFeld gefüllt:
oDoc.MailMerge.MainDocumentType = WdMailMergeMainDocType.wdFormLetters; oDoc.MailMerge.OpenDataSource(inputfile, false, false, true); oDoc.MailMerge.Destination = WdMailMergeDestination.wdSendToNewDocument; oDoc.MailMerge.Execute(false); wordApp.Visible = true;
Bei dem Inputfile handelt es sich um eine zur Laufzeit dynamisch erstellte CSV Datei, die die entsprechenden Daten anhand der Kundenobjekte befüllt.
Anschlißend schließe ich das Template, damit ich auf dem Bildschirm auschlißelich das neu erzeugte Dokument zur Verfügung habe:
oDoc.Saved = true; oDoc.Close(false, oMissing, oMissing);
Das funktioniert so wie es programmiert ist einwandfrei. Am Ende habe ich ein Worddokument geöffnet, welches ich aus Word heraus speichern kann, welches die MergeFelder mit den relevanten Kundendaten befüllt hat aus der CSV-Datenquelle.
Das Problem ist nun, dass ich das erzeugte neue Worddokument programmatisch speichern und verarbeiten möchte, wobei das zu einem merkwürdigem Problem führt:
Wenn ich das Dokument vor dem Schließen speichere über:
string tempDoc = GetTempFileName(); oDoc.SaveAs2(tempDoc);
Und dieses dann öffne, dann erscheint ein Dialog, der einen Select auf die Datenquelle ausführen möchte, wenn ich das bestätige, dann erhalte ich das Template mit hinterlegter Datenquelle und komme erst über Serienbrieferzeugung zu meinem Dokument.
Wenn ich das programmatisch erzeugte Dokument nun aber aus dem Wordeditor heraus speichere und öffne, dann bekomme ich das Dokument so wie ich will. Ohne Datenquelle mit allen ausgefüllten Mergefeldern.
Ich schätze mal, dass ich versuchen muss, dass neue Dokument als Objekt zu bekommen, da hier aber eine Weiterleitung angestoßen wird, bekomme ich ja nie Zugriff darauf oder könnte der Fehler woanders liegen?
Ich programmiere mit
Visual Studio 2015
Micrsoft.Office.Interop.15
-
Ok, habe es nun doch hinbekommen.
Das ist zwar etwas frickelig, aber für den programmatischen Speichervorgang muss ich ja an das Objekt der Zieldatei gelangen. Dieses hole ich mir über das aktive Dokument der Wordapplication:
Document oDocTarget = oDoc.MailMerge.Application.ActiveDocument;
Danach kann ich das über SaveAs2 ohne Datenquelle speichern.