C# MSWord自动合并也会打印模板文档

C# MSWord自动合并也会打印模板文档,c#,ms-word,office-automation,C#,Ms Word,Office Automation,…使用vs2010和自动化office 2007 合并工作正常,但保存的文档(pathToDestinationFile)将原始文档(pathToTemplate)作为第二页附加。我已经验证了pathToTemplate只是一个单页文档。pathToDB和pathToHdr是纯文本文件,用作合并的数据。我做错了什么 public void MergeWordTemplate(bool displayApp, string pathToTemplate, string pathToDB, stri

…使用vs2010和自动化office 2007

合并工作正常,但保存的文档(pathToDestinationFile)将原始文档(pathToTemplate)作为第二页附加。我已经验证了pathToTemplate只是一个单页文档。pathToDB和pathToHdr是纯文本文件,用作合并的数据。我做错了什么

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();
    }
}

解决方案是调用MailMerge.Execute(),而不是调用MailMerge.Execute()

关键点

    //open the data file
mrgDoc.MailMerge.OpenHeaderSource(pathToHdr);
mrgDoc.MailMerge.OpenDataSource(pathToDB);
mrgDoc.MailMerge.SuppressBlankLines = true;
mrgDoc.MailMerge.ViewMailMergeFieldCodes = 0;

mrgDoc.Application.ActiveDocument.Range(0, 0).Select();                
try
{
    if (!string.IsNullOrWhiteSpace(pathToDestinationFile) && Directory.Exists(Path.GetDirectoryName(pathToDestinationFile)))
    mrgDoc.SaveAs(pathToDestinationFile);
}
catch
{
    wrdApp.Visible = true;
}