C# 向word写入数据后,关闭word时出错

gavinsocool 2009-12-16 10:13:45
向高手们请教
我现在有个小程序向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 markText)
{
Object BookMark = bookMark; //word文档里的书签
if (MyWord.ActiveDocument.Bookmarks.Exists(bookMark))
{
MyWord.ActiveDocument.Bookmarks.get_Item(ref BookMark).Select();

MyDoc.Bookmarks.get_Item(ref BookMark).Range.Text = markText;
}
}
...全文
230 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzxap 2009-12-16
  • 打赏
  • 举报
回复
catch (Exception ex)
{
MessageBox.Show("导出出错:" + ex.Message);

}
finaly
{
xx.dispose();

}
wuyq11 2009-12-16
  • 打赏
  • 举报
回复
WORD文件在内存中的同时,另外一个线程对这个文件操作。导致异常
if (oDoc != null)
oDoc.Close(ref oMissing, ref oMissing, ref oMissing);
if (oWord != null)
oWord.Quit(ref oMissing, ref oMissing, ref oMissing);
woshifou 2009-12-16
  • 打赏
  • 举报
回复
关注。

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧