【问题标题】:word.interop print maindocument from mail mergeword.interop 从邮件合并打印主文档
【发布时间】:2013-11-06 07:58:03
【问题描述】:

我从 .doc 文件中创建了与 Interop.Word 的邮件合并。

很好用,从指定的数据源加载数据,我可以用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);

【问题讨论】:

    标签: c# ms-word interop ms-office office-interop


    【解决方案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...
    

    【讨论】:

    • 谢谢!我改变了一个小事情的看法,它就像一个魅力
    猜你喜欢
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    相关资源
    最近更新 更多