簡單EXCEL報表方案:Spring+POI
近期為完成一個簡單的報表模塊,需求很簡單,從數(shù)據(jù)庫中取出數(shù)據(jù)導(dǎo)出到已寫好的Excel模版中。
一開始準(zhǔn)備用jfreeReport實現(xiàn),偶然調(diào)試spring的demo時發(fā)現(xiàn),countries的例子很好,既有web分頁,又有excel,pdf的輸出,經(jīng)分析例子,spring封裝了poi實現(xiàn)excel導(dǎo)出,itext實現(xiàn)pdf輸出。
1,先來分析一下poi的一些背景。POI的主頁:http://jakarta.apache.org/poi。POI HSSF是當(dāng)今市面上最強(qiáng)大的處理EXCEL表格的java工具,比韓國人寫的那個JExcelApi或其它幾種工具都要好。而且它是Apache的開源項目。當(dāng)然POI HSSF也有缺點:不能直接支持EXCEL圖表,API文檔粗糙簡略,有些類和方法需要引用Apache項目中的其它一些包,包與包之間依賴關(guān)系比較復(fù)雜等等。
Apache的Jakata項目的POI子項目,目標(biāo)是處理ole2對象。目前比較成熟的是HSSF接口,處理MS Excel(97-2002)對象。它不象我們僅僅是用csv生成的沒有格式的可以由Excel轉(zhuǎn)換的東西,而是真正的Excel對象,你可以控制一些屬性如sheet,cell等等。這是一個年輕的項目,所以象HDF這樣直接支持Word對象的好東西仍然在設(shè)計中。其它支持word格式的純java方案還有itext,不過也是仍在奮斗中。但是HSSF已經(jīng)成熟到能夠和足夠我們使用了。另外,無錫永中Office的實現(xiàn)方案也是純java的解決方案,不過那也是完全商業(yè)的產(chǎn)品,并不是公開代碼項目。其實,從開發(fā)歷史的角度講,在80年代中期starOffice的原作者在德國成立了StarOffice suite公司,然后到1999年夏天starOffice被sun收購,再到2000年6月starOffice5.2的發(fā)布;并且從starOffice6.0開始,starOffice建立在OpenOffice的api的基礎(chǔ)上,這個公開代碼的office項目已經(jīng)進(jìn)行了很長的時間。雖然那是由C++寫的,但是POI的代碼部分也是由openOffice改過來的。所以,應(yīng)該對POI充滿足夠的信心。國內(nèi)已經(jīng)有部分公司在他們的辦公自動化等Web項目中使用poi了,如日恒的ioffice,海泰的HTOffice等。java當(dāng)初把核心處理設(shè)成Unicode,帶來的好處是另代碼適應(yīng)了多語言環(huán)境。然而由于老外的英語只有26個字母,有些情況下,一些程序員用8位的byte處理,一不小心就去掉了CJK的高位。或者是由于習(xí)慣在程序中采用硬編碼,還有多種原因,使得許多java應(yīng)用在CJK的處理上很煩惱。還好在POI HSSF中考慮到這個問題,可以設(shè)置encoding為雙字節(jié)。編譯好的jar主要有這樣4個:poi包,poi Browser包,poi hdf包,poi hssf例程包。實際運(yùn)行時,需要有poi包就可以了。如果用Jakarta ant編譯和運(yùn)行,下載apache Jakarta POI的release中的src包,它里面已經(jīng)為你生成好了build文件了。只要運(yùn)行ant就可以了(ant 的安裝和使用在此不說了)。如果是用Jbuilder 運(yùn)行,請在新建的項目中加入poi包。以Jbuilder6為例,選擇Tools菜單項的config libraries...選項,新建一個lib。在彈出的菜單中選擇poi包,如這個jakarta-poi-1.5.1-final-20020820.jar,把poi添加到j(luò)builder中。然后,右鍵點擊你的項目,在project的properties菜單中path的required Libraries中,點add,添加剛才加入到j(luò)builder中的poi到你現(xiàn)在的項目中。如果你僅僅是為了熟悉POI hssf的使用,可以直接看POI的samples包中的源代碼,并且運(yùn)行它。hssf的各種對象都有例程的介紹。hssf提供的例程在org.apache.poi.hssf.usermodel.examples包中,共有14個,生成的目標(biāo)xls都是workbook.xls。如果你想看更多的例程,可以參考hssf的Junit test cases,在poi的包的源代碼中有。hssf都有測試代碼。
2 ,poi提供了一個不錯的tutor,教初學(xué)者如何快速上手使用POI HSSF:http://jakarta.apache.org/poi/hssf/quick-guide.html
建一個poiDemo的工程,然后把tutor首頁的例子運(yùn)行一遍,入門級別就夠了。其中包括:新建excel文件(WorkBook);新建sheet;開辟cell;設(shè)置cell數(shù)據(jù)類型和格式;設(shè)置輸出的樣式如對齊方式,顏色,字體,邊框等;合并單元格;讀取已有excel文件;設(shè)置打印區(qū)域;設(shè)置頁碼和頁腳;調(diào)用公式;選中sheet;屏幕縮放;繪圖;插入圖像等等。
3, spring的對poi的封裝。在spring-framework-1.2-rc2\src\org\springframework\web\servlet\view\document下有兩個類AbstractExcelView.java和AbstractPdfView.java,其中前者是處理excel的抽象類,繼承它的時候,需要實現(xiàn)抽象方法buildExcelDocument,實例代碼如下:

2

3



4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27



28

29

30




2

3

4

5

6

7

posted on 2005-12-15 10:05 beyondduke 閱讀(7396) 評論(7) 編輯 收藏 所屬分類: 編程隨筆