C# 为什么我的代码会打开两个Microsoft Office Word实例?

C# 为什么我的代码会打开两个Microsoft Office Word实例?,c#,ms-word,office-automation,C#,Ms Word,Office Automation,我使用一个函数来简化应用程序中的打印。这是: public void print(string fileName, string variables, string values, string template) { // CREATE TEXT FILE FOR PRINTING FileInfo fi = new FileInfo(fileName); Object oMissing = System.Reflec

我使用一个函数来简化应用程序中的打印。这是:

public void print(string fileName, string variables, string values, string template)
        {
            // CREATE TEXT FILE FOR PRINTING


        FileInfo fi = new FileInfo(fileName);
        Object oMissing = System.Reflection.Missing.Value;
        Object oTrue = true;
        Object oFalse = false;

        Word.Application _wordApp = new Word.Application();
        Word.Document oDoc = _wordApp.Documents.Add(template);

        try
        {
            // Check if file already exists. If yes, delete it. 
            if (fi.Exists)
            {
                fi.Delete();
            }

            // Create a new file 
            using (StreamWriter sw = fi.CreateText())
            {
                sw.WriteLine(variables);
                sw.WriteLine(values);
            }


            _wordApp.Visible = true;
            oDoc.MailMerge.MainDocumentType = Word.WdMailMergeMainDocType.wdFormLetters;
            oDoc.MailMerge.OpenDataSource(fileName, false, false, true);

            oDoc.MailMerge.Destination = Word.WdMailMergeDestination.wdSendToNewDocument;
            oDoc.MailMerge.Execute(false);
            oDoc.MailMerge.Application.PrintOut();
        }
        catch (Exception Ex)
        {
            MessageBox.Show(Ex.ToString());
        }
        finally
        {
            //CLEAR RESOURCES
            ((Word._Document)oDoc).Close(ref oFalse, ref oMissing, ref oMissing);
            ((Word._Application)_wordApp).Quit();
        }

    }
它看起来不错,因为我可以使用邮件合并,使事情更容易。我打开一个“打开文件”对话框,用户可以选择用于邮件合并的
模板
文件。但随后,应用程序打开
模板
文件,但在
合并字段
上没有任何数据,然后执行邮件合并,打开另一个文档并填充所有
合并字段

你知道为什么会这样吗?以下是“打开文件”对话框的代码:

                //CHOOSE TEMPLATE FILE
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Filter = "Microsoft Word Template (*.dotx)|*.dotx";
                string filter = ofd.Filter;
                ofd.Multiselect = false;
                ofd.Title = "Open Template File";
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    if (ofd.SafeFileName == "payslip.dotx")
                    {
                        //RETREIVE VALUES
                        var db = new DBConnect();
                        string[] values = new string[20];
                        bool print = false;
                        OleDbCommand cmd = null;
                        OleDbDataReader dr = null;
                        try
                        {
                            if (db.OpenConnection() == true)
                            {
                                string query = "SELECT * FROM employee WHERE employee_ID = " + idTxtBox.Text + "";
                                cmd = new OleDbCommand(query, db.mycon);
                                dr = cmd.ExecuteReader();
                                while (dr.Read())
                                {
                                    values[2] = (dr["employeeName"].ToString());
                                    values[3] = (dr["withTax"].ToString());
                                    values[4] = (dr["sss"].ToString());
                                    values[5] = (dr["pagIbig"].ToString());
                                    values[6] = (dr["pHealthGov"].ToString());
                                    values[7] = (dr["pCareOff"].ToString());
                                    values[8] = (dr["loan_sss"].ToString());
                                    values[9] = (dr["loan_pagIbig"].ToString());
                                    values[10] = (dr["loan_koti"].ToString());
                                    values[11] = (dr["tardinessAbscences"].ToString());
                                    values[12] = totalDeductionsTxtBox.Text;
                                    values[13] = (dr["overTime"].ToString());
                                    values[14] = (dr["leave"].ToString());
                                }
                                print = true;
                            }
                        }
                        catch (OleDbException ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
                        finally
                        {
                            if (dr.IsClosed == false)
                            {
                                dr.Close();
                            }
                            db.CloseConnnection();
                        }

                        if (print == true)
                        {
                            // PRINTING
                            var p = new printClass();
                            p.print(@"C:\IT Box Incorporated\Payroll\payslipCSV.csv",
                                    "date_issued,employee_name,tax,sss,pagibig,phg,pco,sssloan,pagibigloan,kotiloan,late,total,ot,leave",
                                    "" + (DateTime.Now.Date.ToString("MMM") + " " + DateTime.Now.Date.ToString("yyyy")) + "," + values[2] + "," + values[3] + "," + values[4] + "," + values[5] + "," + values[6] + "," + values[7] + "," + values[8] + "," + values[9] + "," + values[10] + "," + values[11] + "," + values[12] + "," + values[13] + "," + values[14] + "",
                                    ofd.FileName);
                        }
                        else
                        {
                            MessageBox.Show("Print Failed!");
                        }
                    }
                    else
                    {
                        MessageBox.Show("Print Failed! Wrong File!");
                    }
                }
                else
                {
                    MessageBox.Show("Print Failed!");
                }

在Windows 7中,如果启用了预览,则在文件打开期间,Windows将尝试预览文档并启动新的winword进程

在Windows 7中禁用预览模式


在Windows 7中,如果启用了预览,则在文件打开期间,Windows将尝试预览文档并启动新的winword进程

在Windows 7中禁用预览模式