java操作word

一、 需求背景

  在做項目的過程中,經常會遇到要把數據庫數據導出到Word文件中的需求,因爲很多情況下,我們需要將數據導出到WORD中進行打印。此需求可以通過用程序填充數據到word模板中來實現。所謂模板也就是標記了數據位置的Word文件。模板可以簡單的分爲兩種:一種模板包含了固定的、有限個數的數據位置,比如一個請假條的模板中只有“部門、姓名、原因、天數、日期”幾個數據位置,也可能是這5個數據位置中的某4個、某3個或某1個,但模板中的標籤數量總是這個集合的子集(如下圖所示:);另一種是包含了循環數據的,比如要生成一個員工信息表,這個表格中有不定個數的員工信息,每個員工的信息都包含了“編號、部門、姓名、年齡、籍貫”。第一種模板導出word文件相對比較簡單,在本文中先描述此方案的實現方法。
java操作word
  

二、 實現方法

  1. 編輯模板:模板中必須標記好數據要插入的位置,這樣纔可以實現用程序插入數據到文件的相應位置,就是說要想生成文件,數據的位置必須用某種元素來標記出來。使用PageOffice填充數據到word文件,需要用Word書籤來標記要插入數據的位置。先在Word模板中標記好“部門、姓名、原因、天數、日期”幾個數據位置:PO_Dept、PO_Name、PO_Cause、PO_Num、PO_Date,如下圖所示:

  java操作word
  一般的開發人員使用Word比較少,可能不清楚Word書籤是怎樣插入的,下面簡單的介紹一下插入書籤的方法。
  第一種方法:把光標定位到需要標記數據位置的地方,點Word菜單中的“插入”-“書籤”,就會彈出一個標題爲“書籤”的對話框(如下圖所示),輸入新書籤的名稱,注意:書籤名必須以字母、漢字、中文標點等開頭,可以包含數字但中間不能有空格(用PageOffice開發的時候不推薦使用中文命名書籤名)。點右側的“添加”按鈕,新的書籤名將出現在下面的列表中。
  
java操作word
  第二種方法:選擇幾個文字、或一段文字、或者選擇一段包含表格和圖片的內容,爲選中的內容指定書籤的對象,然後執行第一種方法的同樣操作,“插入”→“書籤”……
注意:如果新插入位置或新對象採用的是已有的書籤名,原有的書籤將自動取消。

  PageOffice示例代碼中的模板在製作的時候,多采用第二中方法定義書籤,插入書籤之前會先寫一個標示性的詞語用中括號括起來,比如:[姓名],然後選中“[姓名]”,再插入書籤。這樣做的目的是便於在查看或編輯模板數據位置的時候一目瞭然。

  在使用PageOffice開發的過程中,爲了避免出現與用戶自己定義的書籤出現衝突,要求插入的書籤名稱必須以“PO”開頭。注意是字母o,不是數字0。書籤名是不區分大小寫的也可以寫成“po”。在PageOffice的概念裏提到的數據區域,本質上就是書籤,但是隻有“po_”開頭的書籤才叫數據區域,請注意這點。

  2. 編寫代碼調用PageOffice的接口填充數據到word文件中:

複製代碼
// 聲明變量存儲從數據庫中讀取的數據
String docName = "", docDept = "", docCause = "", docNum = "", docDate = "";
// 數據庫數據讀取操作(不同的數據庫用不同的代碼)
ResultSet rs = stmt.executeQuery("select * from leaveRecord where ID = " + id);
if (rs.next()) {
docName = rs.getString("Name");
docDept = rs.getString("Dept");
docCause = rs.getString("Cause");
docNum = rs.getString("Num");
docDate = rs.getString("SubmitTime");
}
rs.close();
//創建PageOffice的WordDocument對象,操作Word文件
WordDocument doc = new WordDocument();
doc.openDataRegion("PO_name").setValue(docName);
doc.openDataRegion("PO_dept").setValue(docDept);
doc.openDataRegion("PO_cause").setValue(docCause);
doc.openDataRegion("PO_num").setValue(docNum);
doc.openDataRegion("PO_date").setValue(docDate);
//創建PageOfficeCtrl對象打開文件
PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request);
poCtrl1.setServerPage(request.getContextPath()+"/poserver.zz"); //此行必須
//獲取數據對象
poCtrl1.setWriter(doc);
// 打開文檔
poCtrl1.webOpen("doc/template.doc", OpenModeType.docReadOnly, "Tom");
複製代碼

三、 生成文件的效果

  java操作word

四、 示例下載

  http://www.zhuozhengsoft.com/down4/Java/BigDemo/poword.rar,或者下載PageOffice for Java的開發包,查看開發包中的示例:三、5、請假條示例

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章