... с использованием 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();
}
}