C# MSWord自动合并也会打印模板文档
…使用vs2010和自动化office 2007 合并工作正常,但保存的文档(pathToDestinationFile)将原始文档(pathToTemplate)作为第二页附加。我已经验证了pathToTemplate只是一个单页文档。pathToDB和pathToHdr是纯文本文件,用作合并的数据。我做错了什么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
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;
}