熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

用POI將Mysql數據導入到Excel中去

2013-11-13 15:46:07  來源: Oracle 

  在我們實際的開發中表現層的解決方案雖然有多樣但是IE浏覽器已成為最多人使用的浏覽器因為大家都用Windows在企業辦公系統中常常有客戶這樣子要求你要把我們的報表直接用Excel打開或者是我們已經習慣用Excel打印這樣子如果開發是沒有問題的用來進行這些數據導入導出支持的都是很好如果你使用的是SQL Server數據庫那就更方便了筆者也曾體會開發這些功能的方便性但是有jee這個更有前途的開放式的開發環境難道我為了解決打印的要求去另寫客戶端的控件?或者在服務器端使用本地代碼?第一種方案的問題是關鍵數據的處理有時候不能在客戶端做種方案的問題是犧牲了代碼的可移植性和穩定性如果讓客戶端只負責處理生成好的報表那將是一種誘人的選擇

  Apache的Jakata項目的POI子項目目標是處理ole對象目前比較成熟的是HSSF接口處理MS Excel()對象它不象我們僅僅是用csv生成的沒有格式的可以由Excel轉換的東西而是真正的Excel對象你可以控制一些屬性如sheetcell等等這是一個年輕的項目所以象HDF這樣直接支持Word對象的好東西仍然在設計中其它支持word格式的純java方案還有itext不過也是仍在奮斗中但是HSSF已經成熟到能夠和足夠我們使用了另外無錫永中Office的實現方案也是純java的解決方案不過那也是完全商業的產品並不是公開代碼項目其實從開發歷史的角度講年代中期starOffice的原作者在德國成立了StarOffice suite公司然後到年夏天starOffice被sun收購再到月starOffice的發布並且從starOffice開始starOffice建立在OpenOffice的api的基礎上這個公開代碼的office項目已經進行了很長的時間雖然那是由C++寫的但是POI的代碼部分也是由openOffice改過來的所以應該對POI充滿足夠的信心國內已經有部分公司在他們的辦公自動化等Web項目中使用poi了如日恆的ioffice海泰的HTOffice等

  java當初把核心處理設成Unicode帶來的好處是另代碼適應了多語言環境然而由於老外的英語只有個字母有些情況下一些程序員用位的byte處理一不小心就去掉了CJK的高位或者是由於習慣在程序中采用硬編碼還有多種原因使得許多java應用在CJK的處理上很煩惱還好在POI HSSF中考慮到這個問題可以設置encoding為雙字節

  POI可以到下載到編譯好的jar主要有這樣poi包poi Browser包poi hdf包poi hssf例程包實際運行時需要有poi包就可以了如果用Jakarta ant編譯和運行下載apache Jakarta POI的release中的src包它裡面已經為你生成好了build文件了只要運行ant就可以了(ant 的安裝和使用在此不說了)如果是用Jbuilder 運行請在新建的項目中加入poi包以Jbuilder為例選擇Tools菜單項的config libraries選項新建一個lib在彈出的菜單中選擇poi包如這個jakartapoifinaljar把poi添加到jbuilder中然後右鍵點擊你的項目在project的properties菜單中path的required Libraries中點add添加剛才加入到jbuilder中的poi到你現在的項目中如果你僅僅是為了熟悉POI hssf的使用可以直接看POI的samples包中的源代碼並且運行它hssf的各種對象都有例程的介紹hssf提供的例程在orgapachepoihssfusermodelexamples包中共有生成的目標xls都是workbookxls如果你想看更多的例程可以參考hssf的Junit test cases在poi的包的源代碼中有hssf都有測試代碼

  首先到上去下載POI登錄到該網址以後選擇紅色區域的poibinfinalzip來下載

  

  下載以後解壓解壓目錄為

  

  在Eclipse中設置對poibinfinaljar的庫引用

  在Eclipse中新建一個名字叫POIExcel的Java工程右鍵POIExcel項目的項目名選擇Build Path再選擇Add External Archives然後找到poibinfinaljar這個包將其引進到工程中來

  Excel 結構
            HSSFWorkbook excell 文檔對象介紹
            HSSFSheet excell的表單
            HSSFRow excell的行
            HSSFCell excell的格子單元
            HSSFFont excell字體
            HSSFName 名稱
            HSSFDataFormat 日期格式
            輔助操作包括
            HSSFDateUtil 日期
            HSSFPrintSetup 打印
            HSSFErrorConstants 錯誤信息表

  將數據導出到Excel中的實例

   創建一個空白的Excel文件

  我們創建一個最普通的Java應用程序即可程序代碼如下:          HSSFWorkbook wb=new HSSFWorkbook();
        FileOutputStream fileout = new FileOutputStream(C:\\testxls);
        wbwrite(fileout);
        fileoutclose();

  FileOutputStream屬於JDK的數據流對象通過它來將一個名為testxls文件創建在C盤根目錄下運行該程序後可以看到在C盤上的根目錄上多了一個Excel文件

  如果將程序中的FileOutputStream(C:\\testxls)的參數改為testxls則文件就會創建在該項目的根目錄下

   往Excel的單元格中寫入信息

  POI把Excel分解成幾個對象自頂向下的關系是:工作薄(HSSFWorkbook)>表格(HSSFSheet)>表格行(HSSFRow)>單元格(HSSFCell)將數據庫中表的數據導入到Excel中首先我們要將數據庫中的表的數據查詢出來這裡我們通過Hibernate來將數據庫中addressbook_table表的數據查詢出來然後通過循環將表中的數據導入到Excel中去

  HSSFWorkbook wb=new HSSFWorkbook();
        HSSFSheet sheet=wbcreateSheet(new sheet);
        try {
        //通過Hibernate來查詢addressbook_table表中的數據將其存儲在List中
            Transaction tx = sessionbeginTransaction();
            orghibernateQuery query= sessioncreateQuery(from AddressbookTable);
            List list = querylist();
            mit();
            int k =;
        //創建表格創建表格行和單元格將數據庫中表的字段存儲在單元格中
            for(Iterator it=erator();ithasNext();){
                AddressbookTable user =(AddressbookTable)itnext();
                HSSFRow row=sheetcreateRow((short)k);
                rowcreateCell((short))setCellValue(usergetId());
                rowcreateCell((short))setCellValue(usergetName());
                rowcreateCell((short))setCellValue(usergetAddress());
                rowcreateCell((short))setCellValue(usergetPhone());
                k++;
            }
            FileOutputStream fileout = new FileOutputStream(C:\\testxls);
            wbwrite(fileout);
            fileoutclose();
            logerror(Successful!!);
            } catch (HibernateException e) {
                logerror(Insert Exception!);
                eprintStackTrace();
            }


From:http://tw.wingwit.com/Article/program/Oracle/201311/17278.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.