向高手们请教
我现在有个小程序向word写数据,是通过在word中定义书签来定位写入数据的位置,写完数据后关闭word窗口的时候报错:Normal.dotm 正由另一word会话编辑(应该是我的程序),如果您用原名保存此文档,将会改写其他会话中所做的任何更改。是否仍用原名保存文档?
怎样才能不出现这样的错误?
程序的源代码如下: //将数据导出到word
            word1.Application oapp = null;
            word1.Document odocu = null;
            Object omissing = null;
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.InitialDirectory = System.Windows.Forms.Application.StartupPath;
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                oapp = new Microsoft.Office.Interop.Word.Application();
                omissing = System.Reflection.Missing.Value;                Object filename = openFileDialog1.FileName;
                object readOnly = false;
                object isVisible = true;
                odocu = oapp.Documents.Open(ref filename, ref omissing, ref readOnly, ref omissing,
                       ref omissing, ref omissing, ref omissing, ref omissing, ref omissing, ref omissing,
                       ref omissing, ref isVisible, ref omissing, ref omissing, ref omissing, ref omissing);                //执行导出动作
                try
                {
                    Object Nothing = System.Reflection.Missing.Value;                    word1._Document MyDoc;
                    word1._Application MyWord;
                    MyWord = new word1.Application();
                    MyWord.Visible = true;
                    object FileName = openFileDialog1.FileName; ;//我放的Word文件的路径
                    MyDoc = MyWord.Documents.Add(ref FileName, ref Nothing, ref Nothing, ref Nothing);                    setToBookMark(MyDoc, MyWord, "starDate", starDate);
                    setToBookMark(MyDoc, MyWord, "name", names);
                    setToBookMark(MyDoc, MyWord, "formerName", formerName);
                    setToBookMark(MyDoc, MyWord, "sex", sex);
                    setToBookMark(MyDoc, MyWord, "national", nationals);
                    setToBookMark(MyDoc, MyWord, "age", age);
                    setToBookMark(MyDoc, MyWord, "birthPlace", birthPlace);
                    setToBookMark(MyDoc, MyWord, "politicalLandscape", politicalLandscape);
                    setToBookMark(MyDoc, MyWord, "accountAddress", accountAddress);
                    setToBookMark(MyDoc, MyWord, "ID", ID);
                    setToBookMark(MyDoc, MyWord, "temporaryID", temporaryID);
                    setToBookMark(MyDoc, MyWord, "phoneNumber", PhoneNumber);
                    setToBookMark(MyDoc, MyWord, "temporaryAddress", temporaryAddress);
                    setToBookMark(MyDoc, MyWord, "area", Area);
                    setToBookMark(MyDoc, MyWord, "starTemporary", dtpStarTemporary.Text);
                    setToBookMark(MyDoc, MyWord, "endTemporary", endTemporary);
                    setToBookMark(MyDoc, MyWord, "illegalNumber", illegalNumber);
                    setToBookMark(MyDoc, MyWord, "punishmentSum", punishmentSum);
                    setToBookMark(MyDoc, MyWord, "enforcementOfficer1", enforcementOfficer1);
                    setToBookMark(MyDoc, MyWord, "enforcementOfficer2", enforcementOfficer2);
                    setToBookMark(MyDoc, MyWord, "occurrenceAddress", occurrenceAddress);
                    setToBookMark(MyDoc, MyWord, "note", note);
                    setToBookMark(MyDoc, MyWord, "illegalDate", illegalDate);                    odocu.Save();
                    odocu.Close(ref omissing, ref omissing, ref omissing);
                    oapp.Quit(ref omissing, ref omissing, ref omissing);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("导出出错:" + ex.Message);                }
            }
        }        private static void setToBookMark(word1._Document MyDoc, word1._Application MyWord,string bookMark,string Text)
        {
            Object BookMark = bookMark;    //word文档里的书签
            if (MyWord.ActiveDocument.Books.Exists(bookMark))
            {
                MyWord.ActiveDocument.Books.get_Item(ref BookMark).Select();                MyDoc.Books.get_Item(ref BookMark).Range.Text = Text;
            }
        }

解决方案 »

  1.   

    WORD文件在内存中的同时,另外一个线程对这个文件操作。导致异常
     if (oDoc != null)
             oDoc.Close(ref oMissing, ref oMissing, ref oMissing);
      if (oWord != null)
             oWord.Quit(ref oMissing, ref oMissing, ref oMissing);
      

  2.   

    catch (Exception ex) 
                    { 
                        MessageBox.Show("导出出错:" + ex.Message);                 } 
    finaly
    {
      xx.dispose();}