应用邮件合并后无法打印文档

时间:2016-02-16 10:22:50

标签: c# winforms printing office-interop

我在应用邮件合并后尝试打印文档,但是出现以下错误:

  

无法将类型'microsoft.interop.word.document'隐式转换为'system.drawing.printing.printdocument'

以下是代码:

private void btnSave_Click(object sender, EventArgs e)
{
    // Open the database connection.
    string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\_Employees\Employee_Database\Database From Excel.accdb";
    OleDbConnection conn = new OleDbConnection(connString);

    try
    {
        conn.Open();

        // Get data from a database.
        OleDbCommand cmd = new OleDbCommand("SELECT * FROM EmpInfo", conn);
        OleDbDataAdapter da = new OleDbDataAdapter(cmd);
        System.Data.DataTable data = new System.Data.DataTable();
        da.Fill(data);

        // Open the template document.
        Microsoft.Office.Interop.Word.Document doc = new Microsoft.Office.Interop.Word.Document(@"c:\_Employees\Template\MergeDoc.docx");
        System.Drawing.Printing.PrintDocument docToPrint = new System.Drawing.Printing.PrintDocument();

        // Loop though all records in the data source.
        foreach (DataRow row in data.Rows)
        {
            // Execute mail merge.
            doc.MailMerge.Execute(row);

            docToPrint = (PrintDocument)doc;

            DialogResult result = printDialog1.ShowDialog();

            // If the result is OK then print the document.
            if (result == DialogResult.OK)
            {
                docToPrint.Print();

            }                    
        }

经过一些更改后,没有错误,但页面无法打印。 什么似乎是问题?

1 个答案:

答案 0 :(得分:0)

当您使用" Word互操作时"你必须通过Word应用程序界面打印。只有Word真正知道如何解释Word内容(Zip包的XML和其他文件)进行打印。 .NET Framework的System.Drawing.Printing无法与Word文档一起使用。

因此,正如错误消息告诉您的那样,您无法将Word.Document对象强制转换为System.Drawing.Printing.PrintDocument。

如果需要设置副本数量等,可以使用Word对象模型的Document.Print命令及其参数。使用代码作为基础:doc.Print();

我不知道您的PrintDialog的用途,因此无法评论如何将其与打印Word文档相关联...