zoukankan      html  css  js  c++  java
  • 开源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文档的组件。读写ExcelNPOI,读写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

     
  • 相关阅读:
    70.BOM
    69.捕获错误try catch
    68.键盘事件
    523. Continuous Subarray Sum
    901. Online Stock Span
    547. Friend Circles
    162. Find Peak Element
    1008. Construct Binary Search Tree from Preorder Traversal
    889. Construct Binary Tree from Preorder and Postorder Traversal
    106. Construct Binary Tree from Inorder and Postorder Traversal
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2922707.html
Copyright © 2011-2022 走看看