C# word.interop从邮件合并打印主文档

C# word.interop从邮件合并打印主文档,c#,ms-word,interop,ms-office,office-interop,C#,Ms Word,Interop,Ms Office,Office Interop,我从.doc文件创建了一个带有Interop.Word的邮件合并 它工作正常,从指定的数据源加载数据,我可以使用wDoc.MailMerge.EditMainDocument()方法查看填充的数据 但我不想只打开它,而是想打印出主文档,这意味着如果mailmerge数据源中有15个条目,我想打印15页 当我perofrm wDoc.PrintOut时,我的基本文档文件被打印出来,没有填写数据 这有可能吗?怎么可能 以下是我迄今为止的代码: Application wApp = new Appli

我从.doc文件创建了一个带有
Interop.Word
的邮件合并

它工作正常,从指定的数据源加载数据,我可以使用
wDoc.MailMerge.EditMainDocument()方法查看填充的数据

但我不想只打开它,而是想打印出主文档,这意味着如果mailmerge数据源中有15个条目,我想打印15页

当我perofrm wDoc.PrintOut时,我的基本文档文件被打印出来,没有填写数据

这有可能吗?怎么可能

以下是我迄今为止的代码:

Application wApp = new Application();
Document wDoc = wApp.Documents.Open(ref oFile, ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
wDoc.Activate();
wApp.ActivePrinter = "TestPrinter";

wDoc.MailMerge.OpenDataSource(wDoc.MailMerge.DataSource.Name, ref missing, ref missing, ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
wDoc.MailMerge.Execute(ref missing);

wDoc.MailMerge.EditMainDocument();
wDoc.MailMerge.Execute(ref missing);

wDoc.PrintOut(ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
    ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
wDoc.Close(ref saveOptionsObject, ref missing, ref missing);
wApp.Quit(ref saveOptionsObject, ref missing, ref missing);

您需要以不同的方式将文档发送到打印机。我试图将下面的VBA代码转换为C#,但可能需要进行一些其他调整

//before you run .Execute method try to set the followings:
wDoc.MailMerge.Destination = wdSendToPrinter; // vba constant
wDoc.MailMerge.SuppressBlankLines = True; 
wDoc.MailMerge.DataSource.FirstRecord = wdDefaultFirstRecord; //vba constant
wDoc.MailMerge.DataSource.LastRecord = wdDefaultLastRecord; //vba constant
//and now you need to .Execute mailmerge
wDoc.MailMerge.Execute(ref missing); //or try with False parameter inside ()
编辑(测试C#,感谢Karl):

// ...OpenDataSource
wDoc.MailMerge.Destination = Microsoft.Office.Interop.Word.WdMailMergeDestination.wdSendToPrinter;
wDoc.MailMerge.SuppressBlankLines = true;
wDoc.MailMerge.DataSource.FirstRecord = (int)Microsoft.Office.Interop.Word.WdMailMergeDefaultRecord.wdDefaultFirstRecord;
wDoc.MailMerge.DataSource.LastRecord = (int)Microsoft.Office.Interop.Word.WdMailMergeDefaultRecord.wdDefaultLastRecord;
wDoc.MailMerge.Execute(ref missing);
// wDoc.Close...

您需要以不同的方式将文档发送到打印机。我试图将下面的VBA代码转换为C#,但可能需要进行一些其他调整

//before you run .Execute method try to set the followings:
wDoc.MailMerge.Destination = wdSendToPrinter; // vba constant
wDoc.MailMerge.SuppressBlankLines = True; 
wDoc.MailMerge.DataSource.FirstRecord = wdDefaultFirstRecord; //vba constant
wDoc.MailMerge.DataSource.LastRecord = wdDefaultLastRecord; //vba constant
//and now you need to .Execute mailmerge
wDoc.MailMerge.Execute(ref missing); //or try with False parameter inside ()
编辑(测试C#,感谢Karl):

// ...OpenDataSource
wDoc.MailMerge.Destination = Microsoft.Office.Interop.Word.WdMailMergeDestination.wdSendToPrinter;
wDoc.MailMerge.SuppressBlankLines = true;
wDoc.MailMerge.DataSource.FirstRecord = (int)Microsoft.Office.Interop.Word.WdMailMergeDefaultRecord.wdDefaultFirstRecord;
wDoc.MailMerge.DataSource.LastRecord = (int)Microsoft.Office.Interop.Word.WdMailMergeDefaultRecord.wdDefaultLastRecord;
wDoc.MailMerge.Execute(ref missing);
// wDoc.Close...

非常感谢。我改变了一个观点,它就像一个魔咒,谢谢!我改变了对一些小事的看法,这很有魅力