前言
本文中介紹Apose的Word元件使用方法,此元件在開發Smart School的擴充報表時會運用到;為在Smart School中支援的元件,以下為此元件的特色。
- 不需安裝Microsoft Word軟體,就可運用內建的物件模型來讀取、編輯及產生Word文件。
- 內建的物件模型支援大部份Word功能,例如文字格式操作、表格、圖片、合併列印...等。
- 支援許多的檔案格式,如DOC、DOCX、RTF、WML、HTML、PDF,算是相當的完善,而PDF格式需要再搭配使用Aspose.PDF元件。
- 讀入及輸出檔案的效率高。
在Office軟體當中每個都有提供物件模型,也能在在.NET平台當中引用使用,那為何要多花費用去買Aspose.Word元件來使用呢?在Aspose的說明書中針對這點特別強調,底下摘錄其重點,詳細可參考Aspose的說明書:
- 穩定性:若是要安裝Microsoft Word軟體才能輸出Word檔案,那麼可能會因為使用者安裝的版本不同,例如Office XP、Office 2007而導致產生出來的檔案格式不一致;這對使用者及軟體開發人員都會相當困惱。
- 速度:在.NET當中用Microsoft Word的物件模型,相當於模擬使用Word軟體;而Aspose的元件是直接用程式產生Word格式的檔案,在快速上自然會快上許多。
安裝Aspose.Word元件
Aspose.Word元件可以由此下載試用版,在安裝好後可以在其安裝目錄找到Aspose.Words.dll檔案可以於.NET專案當中引用,以筆者而言的目錄是:
C:\Program Files\Aspose\Aspose.Words\Bin\net2.0\Aspose.Words.dll C:\Program Files\Aspose\Aspose.Words\Bin\net1.1\Aspose.Words.dll |
底下以圖示的方式來說明加入的步驟。
步驟一:於專案中點選Add Reference
 步驟二:選取Aspose.Word元件 步驟三:於程式碼中引用Aspose.Word元件  步驟四:編譯是否成功引用 物件模型基本觀念
在測試能夠正確引用Aspose.Word後,接下來我們看到物件模型的設計,所有元件幾乎都繼承至Node元件擁有共通的屬性;Node往下分為
兩大類,一大類為直接繼續至Node元件,另一大類為CompositeNode,CompositeNode與Node的差別在於前者可以包含其它的
Node元件,例如表格元件就是很典型例子,表格元件(Table)可以包含列元件(Row),列元件裡面又可以再包含表格元件。
物件模型圖
Aspose.Word的物件模型設計,是很典型在DesignPattern當中的Composite Pattern,有興趣的讀者可以至Google搜尋,相信會很有收穫。
重要物件說明
底下以表格的方式來說明重要的物件用途。
物件名稱
| 物件說明
|
Document
| 代表Word文件物件,此物件會包含許多文件的元件,如段落(Section)、內文(Body)…等等。
|
Section
| 代表Word當中的一個節。
|
Body
| 代表在節裡的主要文字。
|
HeaderFooter
| 代表在節裡的段落首及段落尾。
|
Comment
| 代表Word文件裡的註解。
|
Shape
| 代表在Word文件裡的影像、圖形或是OLE物件。
|
GroupShape
| 一群Shape物件的組合。
|
Paragraph
| 代表一小段文字。
|
Table
| 代表Word文字中的表格。
|
Row
| 代表表格的列。
|
Cell
| 代表表格的欄位。
|
BookmarkStart
| 代表書籤,用來標註書籤的開始。
|
BookmarkEnd
| 代表書籤,用來標註書籤的結束。
|
範例一:Document類別
在安裝好了Aspose.Word元件後,並且也針對其物件模型做基本的介紹,接下來我們來針對重要的物件來做實驗,以瞭解這些物件的用法。
一個Document 物件代表一份Microsoft Word文件,Document
物件包含了整個文件內容、格式、樣式、自定屬性,Document 物件可以儲存到檔案或是一個 Stream 物件,也可透過 Brwoser 傳送到
Client;如果想建立文件、使用樣版進行合併列印、讀取 Word 文件內容…,Document 類別是一個 private void DoSomething_Click(Objectsender,EventArgs e) { Document doc = new Document(filename); }
|
Document的來源可以是一個Word檔案、一個Stream物件,或是加密的文件。
private void DoSomething_Click(Objectsender,EventArgs e) { String filename="C:\\Word.doc"; Document doc = new Document(filename); } |
private void DoSomething_Click(Objectsender,EventArgs e) { System.IO.FileStream filestream = new System.IO.FileStream("C:\\Word.doc",System.IO.FileMode.Open); Document doc = new Document(filestream); }
|
- 以下來源為加密的Word檔案,要留意的是需註明檔案型態為LoadFormat.Doc,最後一個參數為文件的密碼名稱。
private void DoSomething_Click(Objectsender,EventArgs e) { Document doc = new Document("C:\\Word.doc", LoadFormat.Doc, "Password"); } |
範例二:DocumentBuilder類別
我們手中有了Document物件之後,接下來會想在文件裡面動些手腳,例如加入文字或是表格,此時需借助DocumentBuilder類別來處理文件內容。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Aspose.Words; namespace AsposeWord { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void DoSomething_Click(object sender, EventArgs e) { //建立Document物件 Document doc = new Document(); //建立DocumentBuilder物件 DocumentBuilder builder = new DocumentBuilder(doc); //將DocumentBuilder的顏色設定為紅色 builder.Font.Color = System.Drawing.Color.Red; //將DocumentBuilder的顏色設定為雙底線 builder.Font.Underline = Underline.Double; //新增文字 builder.Writeln("臺灣中等學校資訊管理人學會"); //新增超連結 builder.InsertHyperlink("tsima","http://www.tsima.org.tw",false); //將上述設定的格式清除 builder.Font.ClearFormatting(); //將文件存檔 doc.Save("Test.doc"); } } } |
|