C# WORD操作实现代码.doc_第1页
C# WORD操作实现代码.doc_第2页
C# WORD操作实现代码.doc_第3页
C# WORD操作实现代码.doc_第4页
C# WORD操作实现代码.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

窗体底端C# WORD操作实现代码在当前项目开发过程中,客户有根据数据库数据生成WORD文档的需求,在和同事沟通的过程中,找到了两个解决方案-1.先通过程序生成报表样式的HTML页面,然后修改HTML页面的后缀名为DOC。 2.定制WORD文档的模板文件,在C#中操作WORD模板,生成新的WORD文档。 第一方案简单,只需要改动文件的扩展名就行了,但是也存在了一些问题,譬如生成的WORD文档样式的丢失。这样对于客户来说可能是一个无法通过的方案。第二方案比较复杂,需要调用OFFICE的WORD组件通过C#来操作WORD,进而生成WORD。此方法类似于我们在c#中的后台拼接数据。虽然麻烦,但是能够灵活定制,只不过是操作WORD对象而已。 经过再三考虑:决定用第二种方法来生成WORD报告文档。 通过自己的实践,这个需求总算是搞定了,在实际开发的过程中,遇到了这样那样的问题,还好,通过不断的查找网络资源,结合实际开发中的情况,问题都得到了解决。现将本人在开发过程中的一些理解与经验总结一下: 在VS2008平台下,引用.netMicrosoft.Office.Interop.Word.12,这样就可以在程序用操作WORD对象了。 通过简单执行,报了80070005错误,这个错误是因为权限不够,需要在DCOM配置中更改.net和IIS用户的操作权限,具体修改过程如下: 解决方法一: 1.控制面板管理工具组件服务计算机我的电脑DCom配置找到Microsoft Word文档之后,单击属性打开此应 用程序的属性对话框。 2.单击标识选项卡,然后选择交互式用户。 3.单击安全选项卡,分别在启动和激活权限和访问权限组中选中自定义,然后自定义-编辑-添加ASP.NET账户和IUSER_计算机 名。 4. 确保允许每个用户访问,然后单击确定。 5. 单击确定关闭 DCOMCNFG。 如果上述方法不能解决问题,就应该是权限问题,请尝试用下面的方法: 在web.config中使用身份模拟,在节中加入 解决了上述问题,开始考虑如何创建WORD模板文件,WORD的模板文件其实就是通过书签来添加内容的。也就是通过在WORD文档中创建书签,然后在程序中获取模板文件的所有书签,通过给书签赋值来进行文档生成的。 在程序中的操作流程如下: 声明WORD程序的对象 声明一个WORD文档对象 获取当前的操作文档对象 获取文档所有的书签 将数据库数据赋值到对应的书签 将文档另存为指定的文件夹下. 下面将针对农业植物测试报告来分析具体的代码实现: 复制代码 代码如下:/生成WORD程序对象和WORD文档对象 Microsoft.Office.Interop.Word.Application appWord = new Application(); Microsoft.Office.Interop.Word.Document doc = new Document(); object oMissing = System.Reflection.Missing.Value;/这个是什么东西,我始终没搞明白-_- /打开模板文档,并指定doc的文档类型 object objTemplate = Server.MapPath(p_TemplatePath); object objDocType = WdDocumentType.wdTypeDocument; doc = (Document)appWord.Documents.Add(ref objTemplate, ref objFalse, ref objDocType, ref objTrue); /获取模板中所有的书签 Bookmarks odf = doc.Bookmarks; string testTableremarks = ApplyNo, AuditingDate, Auditor, CheckDate, Checker; string testTablevalues = ApplyNo, AuditingDate, Auditor, CheckDate, Checker,; /循环所有的书签,并给书签赋值 for (int oIndex = 0; oIndex 0) System.Diagnostics.ProcessModule pm = p.Modules0; myS += n Modules0.FileName: + pm.FileName; myS += n Modules0.ModuleName: + pm.ModuleName; myS += n Modules0.FileVersionInfo:n + pm.FileVersionInfo.ToString(); if (pm.ModuleName.ToLower() = winword.exe) p.Kill(); catch finally 目前为止,一个WORD文档就生成了。上述为我在这个程序开发中遇到的问题和解决方法,可能有好多地方都是考虑不全的,如果在程序开发中对WORD的操作有新的认识的话,欢迎和我沟通交流,彼此提高! 下边是在网上一些比较好的摘抄: 创建新Word 复制代码 代码如下:object oMissing = System.Reflection.Missing.Value; Word._Application oWord; Word._Document oDoc; oWord = new Word.Application(); oWord.Visible = true; oDoc = oWord.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing); 打开文档: 复制代码 代码如下:object oMissing = System.Reflection.Missing.Value; Word._Application oWord; Word._Document oDoc; oWord = new Word.Application(); oWord.Visible = true; object fileName = E:CCCXCXXTestDoc.doc; oDoc = oWord.Documents.Open(ref fileName, 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); 导入模板 复制代码 代码如下:object oMissing = System.Reflection.Missing.Value; Word._Application oWord; Word._Document oDoc; oWord = new Word.Application(); oWord.Visible = true; object fileName = E:XXXCCXTest.doc; oDoc = oWord.Documents.Add(ref fileName, ref oMissing, ref oMissing, ref oMissing); .添加新表 复制代码 代码如下:object oMissing = System.Reflection.Missing.Value; Word._Application oWord; Word._Document oDoc; oWord = new Word.Application(); oWord.Visible = true; oDoc = oWord.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing); object start = 0; object end = 0; Word.Range tableLocation = oDoc.Range(ref start, ref end); oDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing); .表插入行 复制代码 代码如下:object oMissing = System.Reflection.Missing.Value; Word._Application oWord; Word._Document oDoc; oWord = new Word.Application(); oWord.Visible = true; oDoc = oWord.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing); object start = 0; object end = 0; Word.Range tableLocation = oDoc.Range(ref start, ref end); oDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing); Word.Table newTable = oDoc.Tables1; object beforeRow = newTable.Rows1; newTable.Rows.Add(ref beforeRow); .单元格合并 复制代码 代码如下:object oMissing = System.Reflection.Missing.Value; Word._Application oWord; Word._Document oDoc; oWord = new Word.Application(); oWord.Visible = true; oDoc = oWord.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing); object start = 0; object end = 0; Word.Range tableLocation = oDoc.Range(ref start, ref end); oDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing); Word.Table newTable = oDoc.Tables1; object beforeRow = newTable.Rows1; newTable.Rows.Add(ref beforeRow); Word.Cell cell = newTable.Cell(1, 1); cell.Merge(newTable.Cell(1, 2); .单元格分离 复制代码 代码如下:object oMissing = System.Reflection.Missing.Value; Word._Application oWord; Word._Document oDoc; oWord = new Word.Application(); oWord.Visible = true; oDoc = oWord.Documents.Add( oMissing, ref oMissing, ref oMissing); object start = 0; object end = 0; Word.Range tableLocation = oDoc.Range(ref start, ref end); oDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing); Word.Table newTable = oDoc.Tables1; object beforeRow = newTable.Rows1; newTable.Rows.Add(ref beforeRow); Word.Cell cell = newTable.Cell(1, 1); cell.Merge(newTable.Cell(1, 2); object Rownum = 2; object Columnnum = 2; cell.Split(ref Rownum, ref Columnnum); 通过段落控制插入 复制代码 代码如下:object oMissing = System.Reflection.Missing.Value; object oEndOfDoc =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论