C#.net开发中的word文档处理

更新时间:2024-03-25 作者:用户投稿原创标记本站原创 点赞:4528 浏览:14990

摘 要 开发中往往会因业务需要对word文档进行操作和处理,本文介绍.处理word文档的配置、准备工作以及规范的开发过程,并给出了部分标准化的处理过程代码段.

关 键 词C#.word 文档处理

鉴于大量用户非常熟悉办公软件特别是微软office软件,应用软件开发过程中常常需要将一些应用数据以一定的格式转换成word或者excel软件,这就需要在软件开发中实施对word文档的控制和处理.这种控制的细节是因具体需求而千变万化的,但其基础配置、准备和部分开发过程是具有一定“套路”的.本文结合实际开发谈谈粗浅的认识,包括如何在开发前做好系统配置工作、如何做好开发准备工作以及标准的开发过程并以C#语言形式提供部分标准化的程序代码.

一、配置准备工作

为了在开发和部署应用后能够正常实施对word文档的控制和处理,必须在开发环境和部署怎么写作器上做好一些准备工作.首先,重新安装office软件部件以支持开发,并在开发环境中添加引用Microsoft.Office.Interop.Word.12.其次,修改操作系统和iis中的权限以支持.调用word部件.操作程序如下:

1.控制面板→管理工具→组件怎么写作→计算机→我的电脑→DCom配置→找到Microsoft Word文档之后,单击属性打开此应用程序的属性对话框.

2.单击标识选项卡,然后选择交互式用户.

3.单击“安全”选项卡,分别在“启动和激活权限”和“访问权限”组中选中“自定义”,然后自定义→编辑→添加ASP.NET账户和IUSER_计算机名.

4.确保允许每个用户访问,然后单击确定.

5.单击确定关闭DCOMCNFG.

6.调整webconfig中的权限配置,请尝试用下面的方法:在web.config中使用身份模拟,在节中加入

二、开发准备工作

完成配置准备工作后,可以为后续的开发做一些具体的准备,包括:

1.建立一个符合项目开发需要的word模板;

2.在模板中需要实施操作以插入内容的位置定义标签(bookmark)并完成命名工作,这一步非常重要,标签是开发中判断在什么具体位置插入要显示的内容的关键;

3.在需要处理word文档的代码文件中引用word类,即using Microsoft.Office.Interop.Word;

三、开发过程

完成配置准备工作后即可根据具体需求实施开发工作了,具体的开发因项目差异而存在极大的差异,但就word文档控制和处理而言,存在一些共性的过程,这些共性的过程包括定义对象、新建word文档或获取word模板并根据模板新建word文档、指定文档的插入位置(根据书签)、对象插入、数据插入、文档保存、收尾工作等.

1.定义对象.定义对象是所有开发过程的前提,在处理word文档的开发过程,必须要定义的一些对象如下:

Application对象,用以打开word程序,定义:Application appWord 等于 new Application();

Document 对象,是一个word文档对象用以打开一个word文档,定义:Document doc 等于 new Document();或DocumentClass doc 等于 null;

object对象,在使用word操作相关函数是用于缺省参数,定义:object oMissing 等于 System.Reflection.Missing.Value;

object对象,表示是否保存文档中已发生改变,定义:的object do Not Se Changes 等于 WdSeOptions.wdDoNotSeChanges;

模板类型对象,并指定路径,定义:object objTemplate 等于 Server.MapPath("~\\path\\name.dot");要注意指定文档路径时的格式和转义;

文档类型对象,定义:object objDocType 等于 WdDocumentType.wdTypeDocument;

布尔型的对象,object objTrue 等于 true;

布尔型的对象,object objFalse 等于 false;以上两个对象主要用于某些函数中的布尔型引用;

定义书签对象并指向word文档中已存在的书签object doc_bookmark 等于 "bookmark";

2.利用模板创建新文档并根据书签写入内容.

(1)创建新文档.

doc 等于 (DocumentClass)appWord.Documents.Add(ref objTemplate, ref objFalse, ref objDocType, ref objTrue);

(2)根据书签写入内容.

①写入普通文本:

doc.Bookmarks.get_Item(ref doc_bookmark).Range.Text 等于 “string”;

②写入表格并控制表格样式:

利用书签定义处理“范围”,以明确表格插入位置,Range wrdRng 等于 doc.Bookmarks.get_Item(ref doc_bookmark).Range; 根据前面定义的wrdRng定义一个表格对象,并指明行列(rows和column为整数类型),Table newTable 等于 doc.Tables.Add(wrdRng, rows, columns, ref oMissing, ref oMissing);oMissing为前面定义的缺省值参数;

指定表格中字号大小,newTable.Range.Font.Size 等于 11;

指定表格文本框中文字的对齐方式newTable.Range.ParagraphFormat.Alignment 等于 WdParagraphAlignment.wdAlignParagraphCenter;(示例代码中指定水平居中对齐)

指定表格外边框样式,newTable.Borders.OutsideLineStyle 等于 WdLineStyle.wdLineStyleSingle;

指定表格外边框线条的粗细,newTable.Borders.OutsideLineWidth 等于 WdLineWidth.wdLineWidth150pt;

指定表格内边框样式,newTable.Borders.InsideLineStyle 等于 Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle;

指定表格某列的宽度,newTable.Columns[1].Width 等于 50f;

定义单元格对象并指定到表格中的某个单元格,Cell cell 等于 doc.Tables[1].Cell(1, 1);(示例代码中table中的参数指明所操作表格为文档中的的第一个表格,cell的参数指明所操作的单元格为第一个表格的第一行、第一列单元格);

向单元格中写入内容,cell.Range.Text 等于 "string";

合并单元格,先指定起始单元格cell 等于 doc.Tables[1].Cell(1, 1);再使用Merge函数,cell.Merge(doc.Tables[1].Cell(dt.Rows.Count + 1, 5));merge函数的参数为要合并的最后一个单元格;

③插入图片:

利用书签定义处理“范围”,以明确图片插入位置,Range wrdRng 等于 doc.Bookmarks.get_Item(ref doc_bookmark).Range;

定义两个对象类型用以表示图片插入起止位置,object start;object end;

指定图片指定的起止位置为书签的起止位置,start 等于 doc_bookmark.Start;end 等于 doc_bookmark.End;

根据一定的路径和指定的起止位置插入图片,InlineShape li 等于 doc.Range(ref start, ref end).InlineShapes.AddPicture(imgPath, ref oMissing, ref oMissing, ref oMissing);

④生成并根据指定路径保存word文档:

选取word文档内容,doc.Content.Select();

更新内容域,doc.Content.Fields.Update();

指定文档保存路径,注意路径格式和转义字符的处理,object filename 等于 Server.MapPath("~") + "path\\name.doc";

将文档保存到指定的路径,doc.SeAs(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 doNotSeChanges1 等于 WdSeOptions.wdDoNotSeChanges;

关闭保存完毕的word文档,doc.Close(ref doNotSeChanges1, ref oMissing, ref oMissing);

⑤退出word应用程序,处理未能退出的进程:

退出word应用程序,appWord.Quit(ref oMissing, ref oMissing, ref oMissing);

将文档对象引用指定为空,doc 等于 null;

将引用程序对象引用指定为空,appWord 等于 null;

以下代码段是调用c#的垃圾回收函数清理系统内存资源,强行关闭未退出的word进程的操作:

GC.Collect();

GC.WaitForPendingFinalizers();

Process myProcess 等于 new Process();

Process[] wordProcess 等于 Process.GetProcessesByName("winword");

try

{

foreach (Process pro in wordProcess)

{

IntPtr ip 等于 pro.MainWindowHandle;

string str 等于 pro.MainWindowTitle;

if (string.IsNullOrEmpty(str))

{

pro.Kill();

}

}

}

catch (Exception ex)

{

ex.ToString();

}

四、体会

C#.下对word文档的处理和控制技术是微软VBA技术适用C#语言的一种变化,开发人员只要基于VBA宏语言结合c#语言特点和包即可展开开发.该技术本身并不新建,但其在程序中根据用户需求自动生成符合格式规范和要求的word文档确是一项非常实用、能够很好提高用户体验、降低用户操作强度、提高用户满意度的技术,能够为软件项目的顺利实施和应用提供意想不到的便利和良好的用户反馈.