C#关闭word时,提示“此文件正由另一个应用程序或用户使用” normal.dot
2015-12-28 19:18
381 查看
C#关闭word时,提示“此文件正由另一个应用程序或用户使用” normal.dot
作者: Ss_Andy 时间: 2010-09-25出处:/article/7066398.html
本文欢迎转载,但必须在文章显眼处保留原文地址
/article/7066398.html
由于项目需要将一个doc文件转换成一个html文件,同时显示在web页面上.在项目开始前期时,做了Demo后,没有发现什么问题,到真正开始时,问题就来了!
第一:在转换成html文件后,打开html时,有时会提示文件正在使用之类的,通过强大的谷歌得到的结果是说,由于内存没有及时释放(运行速度问题吧,因为我是有退出了word对象的),那我就让当前程 序停留半秒Thread.Sleep(500);,果然,问题解决了.一切正常.
第二:隔后以现,第二个问题又出现了,就是当你本地打开了一个word程序(即使不同个文件),然后再用C#去转换成html,再打开html时,又是报了一个正在使用之类的提示.这时就觉得奇怪了,我本地又没有打开页面上打开的文件.最后发现,我只是退出,没有关闭
关闭代码:
object Unknown = Type.Missing;
docs.Close(ref Unknown, ref Unknown, ref Unknown);
退出代码:
wordtype.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, appclass, null);//退出
加上关闭后,勉强算是可以实现了,为啥说是勉强呢,因为在打开之前页面之前(就是转换成html成功之后,要退出word的时候),会提示“此文件正由另一个应用程序或用户使用” c:\Documents and Settings..\normal.dot
其实他大概的意思就是你更新了模板,要不要替换之类的吧!这时你打开一个word,选择"工具->模板->把自动更新样式的勾去掉"就行了(网上是这样说的,不过本人试了,公司的电脑这样可以解决问题,但本人的笔记本不能解决),最后在ApplicationClass对象里面,有一个可以保存模板的属性,只要将这个属性设置成true就行了.
//避免弹出normal.dot被使用的对话框,自动保存模板
appclass.NormalTemplate.Saved = true;
下面是主要代码(由于所有代码太多,也没整理,就不贴出来),如果有问题或者不明之处,请与我联系!
doctype.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { savefilename, Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatHTML });//另存为Html格式
//避免弹出normal.dot被使用的对话框,自动保存模板
appclass.NormalTemplate.Saved = true;
object Unknown = Type.Missing;
docs.Close(ref Unknown, ref Unknown, ref Unknown); //关闭
wordtype.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, appclass, null);//退出
相关文章推荐
- C#保留字
- c# 获取IP地址
- VS 2015相当不错的功能:C#交互窗口
- C# 委托和事件
- c#中的二进制序列化
- C# 本地储存文本的几种方式
- C#中MD5加密
- C#中Picturebox的使用
- c#线程池详解
- C# in Depth
- C# FUNC 应用
- C#基于Office组件操作Excel
- C#驱动及应用
- C# 实现 任意多边形切割折线算法
- C#(去、过滤)掉字符中的换行符
- 关于C#timer 时间精确度的问题
- 【C#笔札】1 string类型
- C# WebBrowser 屏蔽alert,confirm的方法
- C#中timer类的用法总结
- 如何让C#生成的dll动态库文件,在被引用时带有注释备注提示