Normal.dotm正由另一程序占用或者用户占用 解决方法

C# 生成word文档时弹出“Normal.dotm被另一程序或用户使用”的主要原因是在生成word文档后关闭word时发生的问题。
//出现提示框前我们通常使用的关闭word代码为

oDoc.Close(ref oMissing, ref oMissing, ref oMissing);
oWord.Quit(ref oMissing, ref oMissing, ref oMissing);

因此,解决方法如下:

//在关闭word文档处,使用以下代码即可。

object saveOption = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;
oDoc.Close(ref saveOption, ref oMissing, ref oMissing);oWord.Quit(ref saveOption, ref oMissing, ref oMissing);

 

完整的例子 

首先要记得引用word
1、添加引用->COM->Microsoft Word 11.0 Object Library
2、在.cs文件中添加 using Word;
3、下面是生成word的代码

try
{
object oMissing = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Word._Application oWord;
Microsoft.Office.Interop.Word._Document oDoc = null;
object oTemplate = System.Windows.Forms.Application.StartupPath + "\test_mode.docx"; //打开模板文件
oWord = new Microsoft.Office.Interop.Word.Application();
oWord.Visible = false;
try
{
oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing, ref oMissing, ref oMissing);
}
catch (Exception Ex)
{
MessageBox.Show("模板文件打开失败!\n\n原因:\n" + Ex.Message, "失败");
return;
}
//替换模板文件中定义好的“书签”,如果不懂“书签”怎么回事的自已打开word文档选择“插入”->“书签”试着定义一下,或查找相关word的资料
object oBookMark;
oBookMark = "guest_num";//这里是定义好的书签名称“guest_num”表示客户编号
oDoc.Bookmarks.get_Item(ref oBookMark).Range.Text = "这里是要替换的值";
oBookMark = "同上方法"; //多个书签,与以上方法一样
oDoc.Bookmarks.get_Item(ref oBookMark).Range.Text = "同上方法";
object oFilename = System.IO.Directory.GetCurrentDirectory() + "\test.docx";//指定生成新word文档的路么及名称
try
{
oDoc.SaveAs(ref oFilename, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);//生成word文档
}
catch (Exception Ex)
{
MessageBox.Show("文件生成失败!\n\n原因:\n" + Ex.Message, "失败");
return;
}
/*
这里面是我测试输出显word中的内容的代码,呵呵
oDoc.ActiveWindow.Selection.WholeStory();
oDoc.ActiveWindow.Selection.Copy();
//从剪切板获取数据
IDataObject data = Clipboard.GetDataObject();
//this.richTextBox1.Text=data.GetData(DataFormats.Text).ToString();//显示文档内容
*/
//关闭word文档
object saveOption = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges;
oDoc.Close(ref saveOption, ref oMissing, ref oMissing);
oWord.Quit(ref saveOption, ref oMissing, ref oMissing);
MessageBox.Show("word文件生成成功!", "成功");
}
catch (Exception Ex)
{
MessageBox.Show("文件生成失败!\n\n原因:\n" + Ex.Message, "失败");
}


4、 对于VC++,可以使用下面的代码进行保存

VARIANT SaveChanges; //定义调用QUIT时使用的参数
SaveChanges.vt=VT_BOOL;     //设置退出WORD时候的保存参数
SaveChanges.boolVal=VARIANT_FALSE; //为不保存任何文档,模板及设置
WordApp. Quit (&SaveChanges, &vtMissing, &vtMissing) ;

 

参考:

1.网址:http://www.cnblogs.com/ChengPuYuan/archive/2011/10/19/2218339.html

2.网址:http://blog.csdn.net/dancewyr/article/details/7674558


 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值