开源Word读写组件DocX介绍与入门
开源Word读写组件DocX介绍与入门
今天向大家介绍一款.NET下的开源轻量级Word 2007/2010格式读写组件DocX,很小巧,能够满足大部分工作需求吧,最重要的是可以不用庞大的Office。 API文档、案例和源码,还是老样子,周一上午10点统一发送,需要留下邮箱。
我的博客其他文章链接:
【原创翻译】 C# 开源轻量级对象数据库 NDatabase 介绍
【转载总结】关于泛型基类的相关知识
NewLife.Xcode 组件资源目录
Newlife.XCode 对象容器与接口操作实例
拥有自己的代码生成器— NewLife.XCode 代码生成器分析
拥有自己的代码生成器— Newlife.XCode 模板编写教程
1.前言
读写Offic 格式的文档,大家多少都有用到,可能方法也很多,组件有很多。这里不去讨论其他方法的优劣,只是向大家介绍一款开源的读写 word 文档的组件。读写 Excel 有 NPOI ,读写 Word ,那看看 DocX 吧。
DocX 是一个以非常直观简单的方式操作 Word 2007/2010 文件的轻量级 .NET 组件。它的速度非常快,而且不需要安装微软的 Office 软件。在中国,免费并且小巧的 WPS 有足够的理由让很多用户放弃庞大的 Office ,那在实际软件开发过程中,这玩意就有用处了。遗憾是不支持2003,但总归是被淘汰的趋势,而且用WPS,也没有啥版本的区别。
2.DocX 的主要特点
DocX 组件目前的最新版本是 V1.0.0.12 ,主要特点有:
1.支持在文件中插入、删除和替代文本,支持所有的文本格式,如字体,下划线,高亮等。
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 类中,操作也很简单,如下所示:
1 // 新建一个Word文档,加载Load的方法和Create使用一样。 2 using (DocX document = DocX.Create( @" ..\Test.docx " )) 3 { 4 // 添加一些基本对象,如段落等 5 document.Save(); // 保存 6 }
3.2 添加段落及控制格式
文本段落和格式控制是 Word 文档的最常用对象, DocX 支持插入段落以及对段落格式进行很全面的控制。下面一一举例。
插入段落的方法是 DocX 类的 InsertParagraph方法,该方法有好几种使用方法,不仅可以控制插入的位置,还可以控制格式。
1 using (DocX document = DocX.Create( @" Test.docx " )) 2 { 3 // 首先创建1个格式对象 4 Formatting formatting = new Formatting(); 5 formatting.Bold = true ; 6 formatting.FontColor = Color.Red; 7 formatting.Size = 30 ; 8 // 控制段落插入的位置 9 int index = document.Text.Length / 2 ; 10 // 将文本插入到指定位置,并控制格式 11 document.InsertParagraph(index, " New text " , false , formatting); 12 document.Save(); // 保存文档 13 }
注意,上面只是插入段落,也可以单独定义1个段落对象Paragraph,然后在这个段落中插入表格,图像,以及操作自定义属性。如下面的例子,其中比较详细介绍的对图像的操作:
1 using (DocX document = DocX.Create( @" Test.docx " )) 2 { 3 // 给文档新建1个段落对象 4 Paragraph p = document.InsertParagraph( " Here is Picture 1 " , false ); 5 // 给文档添加1个图像 6 Novacode.Image img = document.AddImage( @" Image.jpg " ); 7 // 将图像插入到段落后面 8 Picture pic = p.InsertPicture(img.Id, " Photo 31415 " , " A pie I baked. " ); 9 // 选择图像,并修改图像尺寸 10 pic.Rotation = 30 ; 11 pic.Width = 400 ; 12 pic.Height = 300 ; 13 // 设置图片形状,并水平翻转图片 14 pic.SetPictureShape(BasicShapes.cube); 15 pic.FlipHorizontal = true ; 16 document.Save(); // 保存文档 17 }
格式控制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 页眉页脚控制
页面和页脚的使用非常类似。支持三种类型,首页,奇数页和偶数页。貌似还没有支持节。这里只列举页脚的基本使用。
1 using (DocX document = DocX.Create( @" Test.docx " )) 2 { 3 document.AddFooters(); // 添加所有的页脚 4 Footers footers = document.Footers; // 获取该文档所有的页脚 5 // 获取文档第一页的页脚 6 Footer first = footers.first; 7 // 获取奇数页的页脚 8 Footer odd = footers.odd; 9 // 获取偶数页的页脚 10 even = footers.even; 11 // 设置不同页使用不同的页脚 12 document.DifferentFirstPage = true ; 13 document.DifferentOddAndEvenPages = true ; 14 // 设置页脚的内容 15 Paragraph p = first.InsertParagraph(); 16 p.Append( " This is the first pages footer. " ); 17 document.Save(); // 记得保存 18 }
3.6 自定义属性支持
虽然还没有用 DocX 投入实际使用,但个人认为对自定义属性的支持是最强大的1个功能,不仅可以自己制作模版,还可以直接在 DocX 中新增自定义属性,这样在导出大批量相同的格式的文档时就很有用。比如打印成绩单,报表等等。由于本人从没有使用Word 2007及以上版本,所有也从没有接触过这个自定义属性功能。我的理解,类似一个“占位标”或”文本控件”,然后在开发的时候,可以给这些位置填充值,以批量生成一些文件。下面只简单的介绍一个直接添加自定义属性,并赋值的例子,高级一点的话,可以自己更加细致的排版,这样就美观点。
1 using (DocX document = DocX.Load( @" C:\Example\Test.docx " )) 2 { 3 // 先定义一个自定义属性 4 CustomProperty forename; 5 // 先判断文档中是否存在该名称的自定义属性 6 if (!document.CustomProperties.ContainsKey( " forename " )) 7 { // 不存在则创建一个,并给其赋值"Cathal" 8 document.AddCustomProperty( new CustomProperty( " forename " , " Cathal " )); 9 } 10 // 获取这个自定义属性,并打印出它的值 11 forename = document.CustomProperties[ " forename " ]; 12 Console.WriteLine( string .Format( " Name: '{0}', Value: '{1}'\nPress any key... " , 13 forename.Name, forename.Value)); 14 document.Save(); 15 }
4. 资源
开源网址: http://docx.codeplex.com/
API文档、案例和源码,还是老样子,周一上午10点统一发送,需要留下邮箱。
作者的博客我在宁波的电信网络无法打开,估计被墙了。不过下载帮助文档和源码足够了。
写篇博客不容易,烦躁的心情都见鬼去吧。兄弟们,对你有帮助,不要吝啬鼠标哦。
编程爱好者,关注.NET软件开发,Matlab编程及网络技术
http://www.cnblogs.com/asxinyu/E-mail:asxinyu@qq.com
分类: C#.NET开发 , Xcode开发 , 开源技术
标签: Office , Word , 读写Word , Word 2007 , NPOI , docx
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于开源Word读写组件DocX介绍与入门的详细内容...