posts - 78, comments - 34, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

                   今日我們已經將權限模塊與員工管理整合完畢,但下午有學習新的內容。將數據導出為excel表格,或從excel表格導入數據。這一項功能比較常用!在Windows平臺下微軟有為我們提供OfficeCOM套件,Apache為我們提供的poi正是為Java打造的Office套件。

           

                   微軟的OfficeCOM套件與ApachePOI的用法十分相似,所以這部分內容對我來說比較容易。我想大家學習的都很輕松,因為它用起來十分簡單。在我們開始之前需要先下載POIjar包:http://poi.apache.org/ 。

           

          一、POI(或OfficeCOM)結構

                   首先想一下Microsoft Excel 的工作表,它的結構是什么?想想...

           

                   哦,首先有一個以xls為后綴名的文件,打開文件看到多個sheet(表單),每個表單中有無數個單元格。

           

                   OK,通過上面一斷話,我們找出了三個核心單元,由廣入微依次為:*.xls文件、sheet表單、單元格。我們使用Office套件正是以這三個核心單元為操作主體。

                  

          二、創建excel文件

                   我們在創建excel文件時,需要先創建*.xls文件(在POI中為Workbook),然后創建Sheet,然后創建row(cells)

          package cn.itcast.cc.excel.exports;

           

          import java.io.FileOutputStream;

          import java.util.Date;

          import org.apache.poi.hssf.usermodel.HSSFCell;

          import org.apache.poi.hssf.usermodel.HSSFWorkbook;

          import org.apache.poi.ss.usermodel.Cell;

          import org.apache.poi.ss.usermodel.CellStyle;

          import org.apache.poi.ss.usermodel.IndexedColors;

          import org.apache.poi.ss.usermodel.Row;

          import org.apache.poi.ss.usermodel.Sheet;

          import org.apache.poi.ss.usermodel.Workbook;

          import org.junit.Test;

           

          /**

           * 測試類,每個方法都是獨立的。

           * @author Administrator

           *

           */

          public class ExportExcel {

           

                 /**

                  * 測試WorkBook

                  * @throws Exception

                  */

                 @Test

                 public void testCreateExcel() throws Exception{

                        // 創建Workbook

                        Workbook wb = new HSSFWorkbook();

                        FileOutputStream fileOut = new FileOutputStream("C:/workbook.xls");

                        // 寫出到文件

                        wb.write(fileOut);

                        fileOut.close();

                 }

                

                 /**

                  * 測試Sheet

                  * @throws Exception

                  */

                 @Test

                 public void testCreateSheet() throws Exception{

                        Workbook wb = new HSSFWorkbook();

                        FileOutputStream fileOut = new FileOutputStream("C:/workbook.xls");

                        // 創建sheet

                        Sheet sheet = wb.createSheet("HelloWorld!");

                        // 設置第1列寬度,列號以0開始。

                        sheet.setColumnWidth(0,10000);        

                        wb.write(fileOut);

                        fileOut.close();

                 }

                

                 /**

                  * 測試Cell

                  * @throws Exception

                  */

                 @Test

                 public void testCreateCell() throws Exception{

                        Workbook wb = new HSSFWorkbook();

                        FileOutputStream fileOut = new FileOutputStream("C:/workbook.xls");

                        // 創建sheet

                        Sheet sheet = wb.createSheet("HelloWorld!");

                        // 設置第1列寬度

                        sheet.setColumnWidth(0,10000);

                        // 創建一行,行號以0開始。

                        Row row = sheet.createRow(0);

                        // 單元格的樣式屬性

                     CellStyle style = wb.createCellStyle();

                     // 底邊表格線

                     style.setBorderBottom(CellStyle.BORDER_DOUBLE);

                     style.setBottomBorderColor(IndexedColors.RED.getIndex());

                     style.setDataFormat(wb.getCreationHelper().createDataFormat().getFormat("m/d/yy h:mm"));

                        // 創建一個單元格,參數為列號。

                     Cell cell = row.createCell(0);

                     cell.setCellStyle(style);

                     // 向單元格中添加各種類型數據

                     cell.setCellValue(new Date());

                     row.createCell(1).setCellValue(1.1);

                     row.createCell(2).setCellValue("文本型");

                     row.createCell(3).setCellValue(true);

                     row.createCell(4).setCellType(HSSFCell.CELL_TYPE_ERROR);

                    

                     wb.write(fileOut);

                        fileOut.close();

                 }

          }

                   通過上面可見,我們必須一個單元格一個單元格的創建并添加數據。在實際應用中,尤其是辦公應用,經常需要將數據導出為excel文件,我們可以通過POI實現。還有很多的行業軟件使用專業的報表組件而非excel文件,那時我們就需要使用那個報表組件為我們提供的API才能實現對數據的導出或打印操作。

           

                   我們知道單元格的屬性比較多,如邊框和字體等,所以對cell操作的API就比較多。我們在這就不一一詳細列舉了,ApachePOI的文檔十分詳細!

           

          二、讀取excel文件

                   我們創建excel文件時需要一個單元格一個單元格的創建并添加數據,同樣我們讀取excel文件時也需要一個一個單元格的讀取。某些情況下,需要將excel文件中的數據導入到數據庫中。注意此時的excel文件中表格格式必須是指定格式。

           

          package cn.itcast.cc.excel.imports;

           

          import java.io.FileInputStream;

          import java.io.InputStream;

          import java.util.Iterator;

          import org.apache.poi.ss.usermodel.Row;

          import org.apache.poi.ss.usermodel.Sheet;

          import org.apache.poi.ss.usermodel.Workbook;

          import org.apache.poi.ss.usermodel.WorkbookFactory;

          import org.junit.Test;

           

          /**

           * 測試類

           * @author Administrator

           *

           */

          public class ImportExcel {

                

                 /**

                  * 讀取excel文件

                  * @throws Exception

                  */

                 @Test

                 public void testReadExcel() throws Exception {

                        // 讀入文件

                        InputStream inp = new FileInputStream("C:/workbook.xls");

                        Workbook wb = WorkbookFactory.create(inp);

                        // 獲取Sheet,索引從0開始。

                        Sheet sheet = wb.getSheetAt(0);

                        // 遍歷所有Row

                        for(Iterator<Row> items = sheet.rowIterator(); items.hasNext();){

                               Row row = items.next();

                               // 我們本可以使用row.cellIterator()遍歷每一個Cell,但我們需要獲取具體類型的數據

                               System.out.println(row.getCell(0).getDateCellValue());

                               System.out.println(row.getCell(1).getNumericCellValue());

                               System.out.println(row.getCell(2).getStringCellValue());

                               System.out.println(row.getCell(3).getBooleanCellValue());

                               System.out.println(row.getCell(4).getCellType());

                        }

                        // 關閉文件

                        inp.close();

                 }

          }

           

                   用起來十分簡單,明天還有好玩的!

           


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 抚远县| 石家庄市| 九寨沟县| 泾阳县| 漾濞| 定日县| 司法| 韶山市| 海晏县| 怀仁县| 咸阳市| 临海市| 江门市| 九龙坡区| 门头沟区| 平和县| 涡阳县| 襄樊市| 北海市| 钟祥市| 岳阳县| 兴国县| 沁源县| 洛川县| 噶尔县| 竹溪县| 德保县| 菏泽市| 商都县| 佛教| 合江县| 兴安盟| 息烽县| 东丰县| 宁陕县| 沁源县| 富锦市| 靖西县| 桦甸市| 宁安市| 汤原县|