C#调用Word功能的实例与总结.docx

上传人:wux****ua 文档编号:8437910 上传时间:2020-03-29 格式:DOCX 页数:5 大小:33.10KB
返回 下载 相关 举报
C#调用Word功能的实例与总结.docx_第1页
第1页 / 共5页
C#调用Word功能的实例与总结.docx_第2页
第2页 / 共5页
C#调用Word功能的实例与总结.docx_第3页
第3页 / 共5页
点击查看更多>>
资源描述
Asp.net下C#调用Word功能的实例与总结本文通过一个实用例子完整演示了如何使用C#在ASP.NET里调用Word、自动化Word,并且总结了实际应用中发现的问题,最后提出了有效的解决方案。关键词:ASP.NET;C#;Word;自动化;VBA;COM;死进程;1.建立工程在ASP.NET里操作Word的第一步就是添加COM引用到你的工程里,通过右键点击“解决方案资源管理器”的“引用”,添加引用。选择COM选项卡,添加MicrosoftWord12.0ObjectLibrary(其中12.0是Word版本号,根据当前电脑上安装的Word版本确定)。ASP.Net会自动生成Word的COM包装类程序集添加到应用程序目录里。2.代码逻辑在服务器端访问本地存在的Word文件,并根据他新建一个文件,利用Word的标签定位赋值。客户端浏览器通过文件链接访问到这个新生成的Word文件。具体代码如下:privatevoidPage_Load(objectsender,System.EventArgse)/在此处放置用户代码以初始化页面objectMissing=Type.Missing;/取得Word文件路径stringstrTemp=doc/test.doc;/新Word文件保存路径stringnewFileName=doc/test2.doc;/创建一个名为WordApp的组件对象ApplicationWordApp=newApplicationClass();/必须设置为不可见WordApp.Visible=false;try/创建以strTemp为模板的文档objectoTemplate=Server.MapPath(strTemp);DocumentWordDoc=WordApp.Documents.Add(refoTemplate,refMissing,refMissing,refMissing);WordDoc.Activate();/对标签Title进行填充stringstrBM=Title;objectobjBM=strBM;if(WordApp.ActiveDocument.Bookmarks.Exists(strBM)=true)WordApp.ActiveDocument.Bookmarks.get_Item(refobjBM).Select();WordApp.Selection.TypeText(公文标题);/保存为新文件objectoNewFileName=Server.MapPath(newFileName);WordDoc.SaveAs(refoNewFileName,refMissing,refMissing,refMissing,refMissing,refMissing,refMissing,refMissing,refMissing,refMissing,refMissing,refMissing,refMissing,refMissing,refMissing,refMissing);WordDoc.Close(refMissing,refMissing,refMissing);WordApp.Quit(refMissing,refMissing,refMissing);catch(ExceptionEx)thrownewException(Ex.Message);/浏览器弹出下载框Page.RegisterStartupScript(,window.open(+newFileName+);运行前,工程目录下建文件夹doc,doc里新建一个test.doc,内容自己定,手动插入一个名为“Title”的标签。此代码在VS.Net2003+WinXP+Office2007下运行通过。如果你在运行时出现下面的调试错误:拒绝访问。说明:执行当前Web请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。异常详细信息:System.UnauthorizedAccessException:拒绝访问。ASP.NET未被授权访问所请求的资源。请考虑授予ASP.NET请求标识访问此资源的权限。ASP.NET有一个在应用程序没有模拟时使用的基进程标识(通常,在IIS5上为MACHINEASPNET,在IIS6上为网络服务)。如果应用程序正在通过模拟,则标识将为匿名用户(通常为IUSR_MACHINENAME)或经过身份验证的请求用户。若要授予ASP.NET对文件的写访问权,请在资源管理器中右击该文件,选择“属性”,然后选择“安全”选项卡。单击“添加”添加适当的用户或组。突出显示ASP.NET帐户,选中所需访问权限对应的框。出现以上错误时,表明ASP.NET进程无法对具有用户界面的Word进行自动化调用,必须由一个拥有桌面的用户角色来启动ASP.NET进程。解决方法:在Web.config文件的System.Web节里添加,其中userName和password是你电脑里的Windows登录账户。3.方案总结Web服务器端自动化调用Word在实际应用中发现的问题:一、开发难易度:Word自动化中的调用都基于VBA语法,需要开发者对VBA很熟悉。VBA中Word对象众多、逻辑复杂,COM调用方式难于理解。一般开发者很少接触VBA和COM,因此开发起来比较麻烦。二、代码安全性:上述运行错误“拒绝访问”的最佳解决方法就是添加,不过缺点是在Web.config里可以看到你的账户密码,尽管Web.config不会轻易被人下载到,但还是具有一定的危险性。另外也可以运行Dcomcnfg.exe工具提升ASPNET账户权限为交互式用户,当然这样也会增加服务器的风险。网上搜索发现有网友的解决方法是:在.net安装根目录下找到config文件夹下的machine.config文件将processModel中的username属性改为SYSTEM。还有网友的解决方法是:将IIS默认的账户改为管理员账户。这两个方法更加危险,一旦黑客获得了ASP.Net进程的权限,他就能完全控制你的服务器。三、运行稳定性:微软Office是主要针对普通用户开发的桌面办公应用软件,它具有丰富的UI(用户界面)元素,是一套纯粹的本地运行软件或者说是客户端软件。Word自动化接口主要是为了方便窗口应用程序调用而设计的。例如Delphi、VB、C#Winform等开发的本地应用程序。虽然可以强制Visible为false,Word可以运行在服务器端代码里,但毕竟还是会带来许多棘手问题。1.ASP.NET是基于B/S架构的。B/S架构下用户访问都是并发的,也就是说经常会出现同时N个用户对一个服务器页面发出请求。在这种情况下Word自动化调用会时常出现死进程。2.由于隐藏界面运行,一些涉及界面的可以在窗口程序里成功调用的接口,在服务器端调用就会失败,甚至崩溃,这种情况也会经常导致死进程。3.由于Word是复杂的桌面程序,并不符合一般Web服务程序简洁高效的标准,所以在服务器端运行时速度慢,并且还会消耗大量资源(CPU、内存),尤其不能支持大量用户同时访问,资源会很快耗尽。4.绝大部分开发者对COM技术比较陌生,在编程调用Word接口时经常存在一些代码错误,而又很难检查到问题所在,这又是导致死进程的经常因素。Word死进程不仅会消耗服务器资源,还经常会导致服务器页面不能创建新的Word自动化对象而无法继续工作。有网友提出死进程解决方法:编程Kill掉Word死进程,这样是治标不治本的做法,Word死进程是不在了,可是Word非正常关闭会导致很多资源无法及时释放。这样的Web服务器能持续工作多久恐怕就很难说了。既然在Web服务器端自动化调用Word存在这么多问题,那么能不能在客户端浏览器里调用Word呢?用JavaScript肯定可以,不过要想运行就得把浏览器的安全性降到最低,呵呵,恐怕没有几个用户愿意这么做啊。即使不存在安全问题,本来写在服务器端的代码逻辑要写在JavaScript里,由此带来的大量麻烦(打开、传值、取值、保存到服务器等)也会让人难以容忍。4.解决方案为了解决这些问题,笔者经过全面研究比较,发现网上有一款软件PageOffice,完全消除了以上问题,推荐给大家分享。PageOfficeforASP.NET是一款非常优秀的专业的集成微软OFFICE功能的ASP.NET控件平台,能够帮助Web开发人员轻松实现在网页中嵌入运行微软Office的特殊功能。PageOffice把微软复杂的Office编程接口(COMAPI)有效地整合于ASP.NET环境,通过简化的。NET类库接口为开发者提供了在Web项目里获得Office众多强大功能的机会,并且能够同时利用来自.NETFramework的开发效率和软件功能。服务器端调用WebOpen打开文档后,浏览器页面里客户端控件会启动客户机上的Word并且运行在网页里而不是本地打开。服务器端无需安装Office软件。PageOffice的架构很巧妙,开发者只需关注服务器端编程逻辑,客户端如何工作都交由控件自动完成。PageOffice充分利用了分布式计算的思想,把本来要在服务器端运行的Word运算量交给了客户机。也就是说,原来采用服务器端自动化技术的网页同时要处理N个Word任务现在交给了N个客户机,每个客户机运行一个Word。服务器只需处理需要服务器处理的业务逻辑,一切与界面有关、与Word程序本身有关的工作由客户机运行,当然这也是客户机的强项。PageOffice的架构消除了服务器端运行Word、Excel的风险,又充分利用了客户机闲置的计算资源,这种架构不但解决了ASP、ASP.NET等Windowsweb服务调用Word、Excel的问题,而且还给Java写的Web服务调用Word、Excel提供了解决方案(Unix、linux等无法自动化Word、Excel)。PageOffice能够让用户直接在网页里看到word文件内容,并且可以直接编辑、保存回Web服务器,给用户省去了先下载下来,修改完后再上传的麻烦。PageOffice还有其他更多自动化调用Word无法做到的强悍功能,比如只读、防下载、防复制等,你就下载一个慢慢琢磨吧。附上利用PageOffice完成本实例相同功能+只读防下载功能的代码:privatevoidPage_Load(objectsender,System.EventArgse)/在此处放置用户代码以初始化页面PageOffice.WordWriter.WordDocumentdoc=newPageOffice.WordWriter.WordDocument();/对数据区域Title进行填充doc.OpenDataRegion(Title).Value=公文标题;/设置界面样式PageOfficeCtrl1.Theme=PageOffice.ThemeType.Office2010;PageOfficeCtrl1.Caption=动态生成文档;PageOfficeCtrl1.Menubar=false;PageOfficeCtrl1.OfficeToolbars=false;PageOfficeCtrl1.AllowCopy=false;/禁止下载、复制粘贴等/获取数据对象PageOfficeCtrl1.SetWriter(doc);/只读打开生成的文档PageOfficeCtrl1.WebOpen(doc/test.doc,PageOffice.OpenModeType.docReadOnly,张三);
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!