今天向你们介绍一款.NET下的开源轻量级Word 2007/2010格式读写组件DocX,很小巧,可以知足大部分工做需求吧,最重要的是能够不用庞大的Office。编程
1.前言单元测试
读写Offic格式的文档,你们多少都有用到,可能方法也不少,组件有不少。这里不去讨论其余方法的优劣,只是向你们介绍一款开源的读写word文档的组件。读写Excel有NPOI,读写Word,那看看DocX吧。测试
DocX是一个以很是直观简单的方式操做 Word 2007/2010文件的轻量级.NET组件。它的速度很是快,并且不须要安装微软的Office软件。在中国,免费而且小巧的WPS有足够的 理由让不少用户放弃庞大的Office,那在实际软件开发过程当中,这玩意就有用处了。遗憾是不支持2003,但总归是被淘汰的趋势,并且用WPS,也没有 啥版本的区别。字体
2.DocX的主要特色网站
DocX组件目前的最新版本是V1.0.0.12,主要特色有:code
1.支持在文件中插入、删除和替代文本,支持全部的文本格式,如字体,下划线,高亮等。orm
2.支持插入图片、超连接、表格、页眉页脚以及自定义属性等。对象
3.支持相似JQuery的链式写法,很方便编程开发。索引
3.DocX入门例子接口
DocX中一个Word文档的主要对象有段落 (Paragraph)、图像(Image)、表格(Table)、自定义属性(CustomProperty)。关于详细的使用和API接口,能够参考 CHM文档,没有本身制做最新版的,我用的是上一个版本,基本使用够了。有精力的能够本身去看源码,本身制做一份。注意,无特殊注明,本文的绝大部分代码 都来自V1.0.0.10版本的帮助文档,新的11和12版本好像没有增长大的新功能,只是修改很多Bug,以及增长了案例和单元测试,至于没有介绍到 的,能够本身去翻文档,你们能够去开源网站下载最新源码。
3.1 新建与加载Doc文档
新建和加载Word文档的方法都在Docx类中,操做也很简单,以下所示:
//新建一个Word文档,加载Load的方法和Create使用同样。 using (DocX document = DocX.Create(@"..\Test.docx")) { //添加一些基本对象,如段落等 document.Save();//保存 }
3.2 添加段落及控制格式
文本段落和格式控制是Word文档的最经常使用对象,DocX支持插入段落以及对段落格式进行很全面的控制。下面一一举例。
插入段落的方法是DocX类的InsertParagraph方法,该方法有好几种使用方法,不只能够控制插入的位置,还能够控制格式。
using (DocX document = DocX.Create(@"Test.docx")) { //首先建立1个格式对象 Formatting formatting = new Formatting(); formatting.Bold = true; formatting.FontColor = Color.Red; formatting.Size = 30; //控制段落插入的位置 int index = document.Text.Length / 2; //将文本插入到指定位置,并控制格式 document.InsertParagraph(index, "New text", false, formatting); document.Save();//保存文档 }
注意,上面只是插入段落,也能够单独定义1个段落对象Paragraph,而后在这个段落中插入表格,图像,以及操做自定义属性。以下面的例子,其中比较详细介绍的对图像的操做:
using (DocX document = DocX.Create(@"Test.docx")) { //给文档新建1个段落对象 Paragraph p = document.InsertParagraph("Here is Picture 1", false); //给文档添加1个图像 Novacode.Image img = document.AddImage(@"Image.jpg"); //将图像插入到段落后面 Picture pic = p.InsertPicture(img.Id, "Photo 31415", "A pie I baked."); //选择图像,并修改图像尺寸 pic.Rotation = 30; pic.Width = 400; pic.Height = 300; //设置图片形状,并水平翻转图片 pic.SetPictureShape(BasicShapes.cube); pic.FlipHorizontal = true; document.Save();//保存文档 }
格式控制Formatting类所有是属性,没有方法。有不少控制格式的属性,直接进行设置就能够了,暂时没有发现这个版本支持样式,因此只能定义1个全局格式来控制标题了。具体的格式控制能够去看该类的文档。太多,不一一列举,基本使用上面的代码就能够说明了。
另外新版本已经支持了增长超连接(Hyperlink)功能,使用很简单,DocX的AddHyperlink方法直接完成。
3.3 插入图像及图像控制
上面的例子其实已经介绍了几种插入图片的方式,一种是在DocX对象中直接AddImage,另外就是在段落中插入。其中3.2的例子已经很详细介绍了图像的控制,好比修改尺寸,旋转等。更详细的设置在Picture类中。
3.4 插入表格及表格控制
表格是Word文档另一个重点,在实际使用环境中,也是比例很高的一个。先介绍下DocX中表格对象的结构:
1个表格对象Table有行,列组成,行列能够经过索引访问。Table对象的基本单一是单元格(Cell),每个Row对象由多个Cell对象 组成,Cell对象有一个默认的Paragraph对象,这样能够对这个Paragraph对象进行格式控制,从而控制单元格的格式。表格还能够设置相关 属性,对齐,是否自适应表格大小等。Table对象的操做也很灵活,能够插入和移除行,一样也能够插入和移除列。
DocX对象插入表格也有几种方式,能够直接用DocX对象的InsertTable方法,也能够在段落对象后面插入;同理也能够在Table对象先后插入段落对象,这与排版有关了。看1个综合的例子吧:
3.5 页眉页脚控制
页面和页脚的使用很是相似。支持三种类型,首页,奇数页和偶数页。貌似尚未支持节。这里只列举页脚的基本使用。
using (DocX document = DocX.Create(@"Test.docx")) { document.AddFooters();//添加全部的页脚 Footers footers = document.Footers; //获取该文档全部的页脚 //获取文档第一页的页脚 Footer first = footers.first; //获取奇数页的页脚 Footer odd = footers.odd; //获取偶数页的页脚 even = footers.even; //设置不一样页使用不一样的页脚 document.DifferentFirstPage = true; document.DifferentOddAndEvenPages = true; //设置页脚的内容 Paragraph p = first.InsertParagraph(); p.Append("This is the first pages footer."); document.Save(); //记得保存 }
3.6 自定义属性支持
虽然尚未用DocX投入实际使用,但我的认为对自定义属性的支持是最强大的1个功能,不只能够本身制做模版,还能够直接在DocX中 新增自定义属性,这样在导出大批量相同的格式的文档时就颇有用。好比打印成绩单,报表等等。因为本人从没有使用Word 2007及以上版本,全部也从没 有接触过这个自定义属性功能。个人理解,相似一个“占位标”或”文本控件”,而后在开发的时候,能够给这些位置填充值,以批量生成一些文件。下面只简单的 介绍一个直接添加自定义属性,并赋值的例子,高级一点的话,能够本身更加细致的排版,这样就美观点。
using (DocX document = DocX.Load(@"C:\Example\Test.docx"))
{
//先定义一个自定义属性
CustomProperty forename;
//先判断文档中是否存在该名称的自定义属性
if (!document.CustomProperties.ContainsKey("forename"))
{ //不存在则建立一个,并给其赋值"Cathal"
document.AddCustomProperty(new CustomProperty("forename", "Cathal"));
}
//获取这个自定义属性,并打印出它的值
forename = document.CustomProperties["forename"];
Console.WriteLine(string.Format("Name: '{0}', Value: '{1}'\nPress any key...",
forename.Name, forename.Value));
document.Save();
}