0
... VS2010 mit und MSWord Automatisierung fusionieren druckt Vorlagendokument zu
Die Zusammenführung funktioniert office 2007
Automatisierung aber das gespeicherte Dokument (pathToDestinationFile) hat das Originaldokument (pathToTemplate) als zweite Seite angebracht. Ich habe überprüft, dass das PfadToTemplate nur ein einzelnes Dokument ist. pathToDB und pathToHdr sind reine Textdateien, die als Daten für die Zusammenführung dienen. Was mache ich falsch?public void MergeWordTemplate(bool displayApp, string pathToTemplate, string pathToDB, string pathToHdr, string pathToDestinationFile)
{
Word._Application wrdApp = null;;
Word._Document mrgDoc = null, newDoc = null;
try
{
wrdApp = new Word.Application();
wrdApp.Visible = displayApp;
//open the template
mrgDoc = wrdApp.Documents.Add(pathToTemplate, ref oMissing, ref oMissing, ref oMissing);
if (mrgDoc.MailMerge.Fields != null && mrgDoc.MailMerge.Fields.Count == 0)
throw new Exception(string.Format("Template \"{0}\" does not contain any merge fields.", System.IO.Path.GetFileName(pathToTemplate)));
//open the data file
mrgDoc.MailMerge.OpenDataSource(pathToDB);
mrgDoc.MailMerge.OpenHeaderSource(pathToHdr);
mrgDoc.MailMerge.Destination = Word.WdMailMergeDestination.wdSendToNewDocument;
//merge
mrgDoc.MailMerge.Execute(ref oFalse);
newDoc = wrdApp.ActiveDocument;
try
{
if (!string.IsNullOrWhiteSpace(pathToDestinationFile) && Directory.Exists(Path.GetDirectoryName(pathToDestinationFile)))
newDoc.SaveAs(pathToDestinationFile);
}
catch
{
wrdApp.Visible = true;
}
//get out
mrgDoc.Saved = true;
mrgDoc.Close(Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges);
KillCOM(mrgDoc);
newDoc.Saved = true;
newDoc.Close(Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges);
KillCOM(newDoc);
wrdApp.Quit(ref oFalse, ref oMissing, ref oMissing);
KillCOM(wrdApp);
mrgDoc = null;
newDoc = null;
wrdApp = null;
}
catch (Exception e)
{
KillCOM(mrgDoc);
KillCOM(newDoc);
KillCOM(wrdApp);
mrgDoc = null;
newDoc = null;
wrdApp = null;
//todo: log exceptions here
string err = e.ToString();
}
}