我用c#写了一个自动生成Word文档的程序,我是设计的是按下按钮就打开一个文档,往里面填充东西,然后关闭,这个过程全部是自动的,没有人工参与,可是我发现了一个问题:当我的电脑上没有运行Microsoft Office Word的一个程序实例时,我的这个程序能正常打开和关闭Word文档,但是当我的电脑上运行了Microsoft Office Word的一个程序实例时,我的程序在关闭文档这一步上出现了一个情况:文档自动关闭时会弹出对话框说
此文件正由另一应用程序或用户使用
(C:\Documents and Settings\.....\Normal.dot)
不知道这是怎么一回事,请哪位知道帮我解释一下,再说说有什么方法可以不让这个提示出来。谢谢,如果你感兴趣的话,可以到我的百度空间看看源代码
http://hi.baidu.com/%CD%E6%CA%AF%CD%B7%B5%C4%D0%A1%BA%A2/blog/item/af6d74fd7958368ab901a0c1.html
非常感激!!!
此文件正由另一应用程序或用户使用
(C:\Documents and Settings\.....\Normal.dot)
不知道这是怎么一回事,请哪位知道帮我解释一下,再说说有什么方法可以不让这个提示出来。谢谢,如果你感兴趣的话,可以到我的百度空间看看源代码
http://hi.baidu.com/%CD%E6%CA%AF%CD%B7%B5%C4%D0%A1%BA%A2/blog/item/af6d74fd7958368ab901a0c1.html
非常感激!!!
解决方案 »
- 前天安装SQl安装成08了,想升级08r2 ,咋升级呀?帮忙!
- C#实例
- QQ空间中的标签提取功能如何实现?给个思路。
- 急,请问怎么样能够让WinForm中ComboBox的右面下拉按钮上不显示三角,而显示"..."呢
- textbox接收输入内容?急!!!
- 请教有关IL问题
- 求一个管理表结构的工具
- ====一个最简单的Net操作XML的程序,居然通不过,请各位帮忙看一下!!=====
- ▂▃▅▆█请教如何在WebForm中动态创建控件及其事件?█▆▅▃▂
- 在ASP网页中怎样用c#读出word文档
- [代码共享] 一些集合算法...
- 关于Winform Tree,如何将鼠标移到文本时显示Hand,移出时还原?
我想原因是,Word程序运行的时候,只能开一个主程序。在非编程人员使用的时候,不会出现一个系统中同时开两个Word的情况,但是程序员用c#,或vba操作Word的时,很有可能会用一个Word.Application wordApp = new Microsoft.Office.Interop.Word.Application();就新建了一个Word程序,这样下去如果不关掉新建的Word程序,久而久之,就会出现系统中开启了若干个Word程序的情况,这时候关闭Word就会出现问你是否要保存Word默认模版的问题,因为开一个Word时,关闭Word那关闭了就行了没说的。若是有多个Word要关闭,那么就会出现到底要不要更改Word模版的问题,因为关闭了之后,还有其他的Word程序,而所有的Word程序是通用了一个模版,所以,应该问一下使用者:当前的模版要修改吗? 这只是我的推测,不是什么答案。
想安静的关闭Word的方法是调用一个函数:
用
doc.Close(ref Nothing, ref Nothing, ref Nothing);
wordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
try
{
if (doc != null)
{
Marshal.ReleaseComObject(doc);
doc = null;
}
wordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
}
catch
{
try
{
if (wordApp != null)
{
Marshal.ReleaseComObject(wordApp);
wordApp = null;
}
}
catch (Exception ex1)
{
MessageBox.Show(ex1.ToString());
}
}
这个方法应该就没什么问题了吧!如果哪位有兴趣尝试了一下,发现不行,请到我的百度空间给我留言,再讨论。
找到了相同的问题,并且有链接到http://support.microsoft.com/kb/285885/zh-cn的解决方案,虽然是vb的,但可以看出c#的解决方案:用下面的方法
object saveOption = Word.WdSaveOptions.wdDoNotSaveChanges;
wordApp.Quit(ref saveOption, ref Missing, ref Missing);
而不是
wordApp.Quit(ref Missing, ref Missing, ref Missing);
解决不了,我的没有用到你说的doc对象怎么办啊。帮帮我!
if (File.Exists(Application.StartupPath + @"\RTF\ERP_DataSource.rtf"))
{
File.Delete(Application.StartupPath + @"\RTF\ERP_DataSource.rtf");
}
//Word.Application newApp = new Word.Application();
Word._Application newApp = new Word.Application(); // 指定源文件和目标文件
object Source = Application.StartupPath + @"\word\ERP_DataSource.doc";
object Target = Application.StartupPath + @"\RTF\ERP_DataSource.rtf";
object Unknown = Type.Missing;
// 打开要转换的Word文件
newApp.Documents.Open(ref Source, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown); // 指定文档的类型
object format = Word.WdSaveFormat.wdFormatRTF; //改变文档类型
newApp.ActiveDocument.SaveAs(ref Target, ref format,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown); //关闭word实例
newApp.Quit(ref Unknown, ref Unknown, ref Unknown);
newApp = null;
newApp.Quit(ref saveOption, ref oMissing, ref oMissing);
这个我也试验了也不行的,还是出现对话框,问我是否保存模板。