【原創】開源Word讀寫組件DocX介紹與入門


       本博客所有文章分類的總目錄:http://www.cnblogs.com/asxinyu/p/4288836.html

本博客其他.NET開源項目文章目錄:http://www.cnblogs.com/asxinyu/p/4329755.html

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/

對你有幫助,不要吝嗇鼠標哦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM