1

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

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

但我不想只打开它,而是想打印出 MainDocument,这意味着如果我的邮件合并数据源中有 15 个条目,我想打印 15 页。

当我执行 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);
4

1 回答 1

1

您需要以不同的方式将文档发送到打印机。我正在尝试将 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...
于 2013-11-06T08:41:22.133 回答