<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    簡單EXCEL報表方案:Spring+POI

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

     1 protected void buildExcelDocument(
     2
         Map model, HSSFWorkbook workbook,
     3     HttpServletRequest request, HttpServletResponse response) 
    {
     4

     5   //
     Go to the first sheet.
     6   //
     getSheetAt: only if workbook is created from an existing document
     7         // HSSFSheet sheet = workbook.getSheetAt(0);

     8         HSSFSheet sheet = workbook.createSheet("Spring");
     9         sheet.setDefaultColumnWidth(12
    );
    10

    11   // Write a text at A1.

    12   HSSFCell cell = getCell(sheet, 00);
    13   setText(cell, "Spring POI test"
    );
    14

    15   // Write the current date at A2.

    16   HSSFCellStyle dateStyle = workbook.createCellStyle();
    17   dateStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"
    ));
    18   cell = getCell(sheet, 10
    );
    19   cell.setCellValue(new
     Date());
    20
       cell.setCellStyle(dateStyle);
    21

    22   // Write a number at A3

    23   getCell(sheet, 20).setCellValue(458);
    24

    25   // Write a range of numbers.

    26   HSSFRow sheetRow = sheet.createRow(3);
    27   for (short i = 0; i < 10; i++
    {
    28     sheetRow.createCell(i).setCellValue(i * 10
    );
    29   }

    30 }
    4, 通過web程序調用,很多情況需要把生成的excel文件通過網絡連接來輸出,這些spring已經替你做好了,所以只要按照spring的調用標準就可以,我使用的是spring的mvc,實例代碼如下:
    1protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
    2        List list = (List) request.getSession().getAttribute("list"); //從session中取數據list
    3        Map model=new HashMap(); 
    4        model.put("list",list); //將list封裝傳到excelView中
    5        ExcelView ev = this.getExcelView();//ExcelView繼承了AbatractExcelView
    6         return new ModelAndView(ev,model); //跳轉頁面
    7    }
    ok,整個簡單的過程就完成了,你可以根據自己的需求靈活的在各個環節coding!漂亮的報表會讓你興奮不已!


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

    評論

    # re: 簡單EXCEL報表方案:Spring+POI 2006-09-14 15:11 gemsword

    非常感謝,正需要這個東東  回復  更多評論   

    # re: 簡單EXCEL報表方案:Spring+POI 2006-10-08 11:36 wyz

    能發一個完整的例子到我的郵箱嗎.萬分感謝.
    w-y-z2008@163.com  回復  更多評論   

    # re: 簡單EXCEL報表方案:Spring+POI 2006-12-11 17:26 wr

    能發一個完整的例子到我的郵箱嗎.萬分感謝.
      回復  更多評論   

    # re: 簡單EXCEL報表方案:Spring+POI[未登錄] 2007-01-18 09:37 Daisy

    http://jakarta.apache.org/poi/hssf/quick-guide.html#FrillsAndFills
    這個網站還不錯,可以看看
      回復  更多評論   

    # re: 簡單EXCEL報表方案:Spring+POI 2007-08-09 14:06 tanguojun

    能發一個完整的例子到我的郵箱嗎.萬分感謝.
    email: guojuntan@126.com  回復  更多評論   

    # re: 簡單EXCEL報表方案:Spring+POI 2007-08-17 12:55 感激...

    感激...  回復  更多評論   

    # re: 簡單EXCEL報表方案:Spring+POI[未登錄] 2009-08-18 12:02 無名

    非常感謝  回復  更多評論   

    <2007年8月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    導航

    統計

    公告


    MSN聯系

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    我的連接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 无码专区—VA亚洲V天堂| 亚洲高清无码专区视频| 亚洲熟妇色自偷自拍另类| 日本免费大黄在线观看| 久久亚洲AV成人无码电影| 性无码免费一区二区三区在线 | 一级毛片成人免费看免费不卡| 国产亚洲?V无码?V男人的天堂| 99视频在线免费观看| 亚洲日本va午夜中文字幕一区| 精品熟女少妇a∨免费久久| 1区1区3区4区产品亚洲| 2021久久精品免费观看| 亚洲日韩av无码中文| 狠狠久久永久免费观看| 窝窝影视午夜看片免费| 亚洲国产精品无码专区在线观看| 本道天堂成在人线av无码免费| 日韩va亚洲va欧洲va国产| 67194国产精品免费观看| 国产午夜亚洲精品国产| 免费欧洲毛片A级视频无风险| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 亚洲爆乳AAA无码专区| 亚洲国产高清在线一区二区三区| 中文字幕在线免费观看视频| 亚洲国产精品久久66| 免费人成在线视频| 国产亚洲综合精品一区二区三区| 亚洲日本中文字幕天堂网| 在线观看的免费网站无遮挡| 亚洲欧美日韩中文高清www777| 亚洲国产成人久久综合碰| 国产免费一区二区视频| 国产成人精品日本亚洲直接| 亚洲第一区精品观看| 91精品国产免费| 一级女性全黄久久生活片免费| 亚洲欧洲日本国产| 亚洲国产成人a精品不卡在线| 最近免费中文字幕mv在线电影|