C# 调用word进程操作文档关闭进程

作者:邓家海

时间:2018-02-12 20:36:23

前言:

office办公软件作为现在主流的一款办公软件,在我们的日常生活和日常工作里面几乎每天都要用到。到了今天,为了节省人力资源和减轻工作量,减少工作上面的错误以及减轻工作的复杂度,于是办公自动应运而生。于是出现了OA软件的春天,许多政府机关、单位、企业都会选择采购或者定制OA系统。OA软件普遍都涉及到office办公软件的操作。Excel、word是经常用到的。

抛出问题

案例:在为某政府机关研发一个管理系统,该政府机关有大量的合同需要处理,包括合同填写、审阅、呈批、保存、后期管理等一系列问题。而且工作量非常大,于是该政府决定定制一个合同管理的模块。该管理系统主要涉及到word的复制、编辑、保存等操作。前台是使用了第三方控件。但是我们的后台服务器也要进行文件的复制,打开替换等操作。需要在服务器调用word进程。由于调用了word进程管理不当,导致进程每次操作都新增一个,进程多到一定的程度之后,就导致服务器崩溃。

程序后台调用word

设置word 可以被程序调用,其实就是权限问题,这个一般要设置服务器的用户和netword用户。到com组件里面设置。

操作word

1.

Microsoft.Office.Interop.Word._Application wordApp = new Microsoft.Office.Interop.Word.ApplicationClass();  //新建对象,会产生一个新的word进程

2.

var wordDoc =wordApp.Documents.Open(ref filename)//打开word文档

3.

wordDoc.AcceptAllRevisions(); //接收word中所有的修订
wordDoc.Save();//保存
wordDoc.Close(ref missing, ref missing, ref missing);  //关闭word文档

执行上面三步,你会发现,这三个代码每执行一次,产生一个word进程。直至服务器资源耗尽崩溃!

管理word进程

解决方案:

1.

对Word._Application对象进行退出,这是最基本的,也是必须的。

wordApp.Application.Quit(ref saveOption, ref missing, ref missing);

2.倘若退出,进程还是存在,为了保险起见,我们还可以对进程进行kill。

//杀死打开的word进程
 Process myProcess = new Process();
 Process[] wordProcess = Process.GetProcessesByName("winword");

但是这里有一个问题,就是会误杀别的地方调用的进程。下面就可以杀死属于自己的进程。

foreach (Process pro in wordProcess) //这里是找到那些没有界面的Word进程
{
        IntPtr ip= pro.MainWindowHandle;

         string str =pro.MainWindowTitle; //发现程序中打开跟用户自己打开的区别就在这个属性
       //用户打开的str 是文件的名称,程序中打开的就是空字符串
         if (str==文件名)
           {
                  pro.Kill();
           }
           }

其实上面还有一个地方可以优化,存在现有的进程,不创建新的进程。

A程序叫B程序关闭,B程序有没有关闭是不可控的。

如果word都是new出来的,那么会有越来越多的word进程。使用get的方式,保证只有一个word进程。

try 

 { 

       this.app = (Application)Microsoft.VisualBasic.Interaction.GetObject(null, "Word.Application");  }  catch { 

                this.app = new Application();             

} 

参考资料和文献

原文地址:https://www.cnblogs.com/dengjiahai/p/8443511.html

时间: 2024-10-01 05:41:58

C# 调用word进程操作文档关闭进程的相关文章

基于DevExpress实现对PDF、Word、Excel文档的预览及操作处理

原文:基于DevExpress实现对PDF.Word.Excel文档的预览及操作处理 在一般的管理系统模块里面,越来越多的设计到一些常用文档的上传保存操作,其中如PDF.Word.Excel等文档,有时候是通过分布式的WCF技术实现数据的显示和处理,因此希望直接预览而不需要下载文件,这样能够给我们提供很多的方便.在DevExpress里面,提供了相应的控件来显示和处理这些文档,本文主要介绍如何利用DevExpress的控件实现对PDF.Word.Excel文档的预览和操作处理. 1.PDF的预览

word 2013 长篇文档排版案例教程

1 前言 平时偶尔可能会遇到需要制作长篇文档的情况,比如论文.书稿等,需要进行一些复杂的编辑,像设置级别标题.分节显示页码.封面.标题.目录.页眉.页脚.参考文献等等,不少同学为此犯愁,特别是非计算机专业的朋友们经常向我求救.其实,早在十几年前微软就曾经发布一个基于Office 2003长篇文档制作的视频教程,我就是从那个视频里学习了一些复杂的排版方法.现在,Office已经发展到2013版了,也没有发现微软再发新的教程.其实大体的流程和原理与Office 2003版的类似.我觉得很有必要把相关

使用NOPI读取Word、Excel文档内容

使用NOPI读取Excel的例子很多,读取Word的例子不多. Excel的解析方式有多中,可以使用ODBC查询,把Excel作为一个数据集对待.也可以使用文档结构模型的方式进行解析,即解析Workbook(工作簿).Sheet.Row.Column. Word的解析比较复杂,因为Word的文档结构模型定义较为复杂.解析Word或者Excel,关键是理解Word.Excel的文档对象模型. Word.Excel文档对象模型的解析,可以通过COM接口调用,此类方式使用较广.(可以录制宏代码,然后替

php实现word转html文档的例子

php实现word转html文档的例子 2015-10-16 17:07 2751人阅读 评论(2) 收藏 举报 word文档不适合放到网页上了,如果我们要放到网页中去是需要一个个复制了,如果你还在复制就out了,下文小编来为各位整理一篇php实现word转html文档的例子,希望文章对各位有帮助. 要想完美解决,office转pdf或者html,最好还是用windows office软件,libreoffice不能完美转换,wps没有api. 先确认com模块是不是开启,phpinfo里面如果

怎样实现pdf与word等普通文档的转换

Adobe的PDF文档的转换可能是大家比较关心的话题.尤其是PDF转成Word的DOC格式,或者把Word的DOC文档转换成PDF文档运用地最为广泛.或许大家并不清楚,除了DCOE与PDF格式转换外,很多时候我们还会进行其他文档的处理.此时,你需要的是一款多功能集于一体的PDF文件转换器.问题随之而来.什么样的PDF转换成Word转换器可以满足大家办公文档转换的需求呢? 迅捷PDF转换器支持多种文档格式,DOC.XLS.PPT.TXT.HTML.图片等等.要把他们相互转换,可以用借助这款软件特有

WORD格式的文档如何在线转换成EXCEL格式

WORD格式的文档如何在线转换成EXCEL格式,经常用办公软件的都知道在WORD文档里面是可以插入EXCEL表格的,但是WORD文档却不能将里面的数据直接转换成EXCEL格式,那有没有方法可以促成这一转换的呢,请看下面操作.第一步:打开电脑,进入浏览器搜索"迅捷pdf在线转换器"找到相应的网页,并点进去.第二步:进入在线转换器的首页后,可以看到页面有很多关于办公的功能选项,我们选择文档转换,并在弹出的下拉框内选择"word转excel". 第三步:进入转换器的功能页

AOPR破解Office Word和Excel文档密码有风险吗?

Advanced Office Password Recovery作为一款专业的Office密码破解软件,支持的破解文件格式齐全,从Office2.0到2013版本.可破解的密码类型众多,从常设的打开密码到鲜有的VBA程序密码.所以,AOPR破解Office 97/2000兼容格式的Word和Excel文档密码,根本就是小菜一碟. AOPR与AOPB的破解效果 当需要破解密码的Word或Excel文档以Office 97/2000兼容格式或优于Office 97/2000格式保存时,Advanc

dede只调用当天发布的文档

dede只调用当天发布的文档 dede文章的调用 我需要织梦的模板分别调用,一天内发布的文章,三天内发布的文章,和七天内发布的文章,请问是代码是怎么写的,如何调用,如图所示. 点一天内,显示最近24的内发布的文章,点三天内,显示最近3天内发布的文章,下同. 织梦标签里面已经有这个功能了.加入subday即可.如调用一天内的文章:{dede:arclist row='10' subday='1'}底层模板(InnerText){/dede:arclist}

jQuery---jq操作标签文本(html(),text()),jq操作文档标签(插入,删除,修改),克隆,,jq操作属性,jq操作class属性,jq操作表单value,jq操作css,jq操作盒子(重要),jq操作滚动条

jQuery---jq操作标签文本(html(),text()),jq操作文档标签(插入,删除,修改),克隆,,jq操作属性,jq操作class属性,jq操作表单value,jq操作css,jq操作盒子(重要),jq操作滚动条 一丶jQ操作标签内文本 html() 标签元素中的内容 /** 替换的内容可以使一个js对象,jq对象,文本 **/ /* 获取值:获取选中标签元素的所有内容 ,包括标签*/ $('ul').html() " <li>1</li> <li&g