程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> POI操作Excel,poiexcel

POI操作Excel,poiexcel

編輯:JAVA綜合教程

POI操作Excel,poiexcel


POI和Excel簡介

  JAVA中操作Excel的有兩種比較主流的工具包: JXL 和 POI 。jxl 只能操作Excel 95, 97, 2000也即以.xls為後綴的excel。而poi可以操作Excel 95及以後的版本,即可操作後綴為 .xls(03版)和.xlsx(07版)兩種格式的excel。所以, 如果你的項目中需要導入導出Excel, 那麼就可能需要POI. 講解之前了解一下Excel的幾個概念, 這也是POI操作的基礎. 一個excel文件就是一個工作簿workbook,一個工作簿中可以創建多張工作表sheet,而一個工作表中包含多個單元格Cell,這些單元格都是由列(Column)行(Row)組成.

我用到的jar包

  poi-ooxml-3.10.1-20140818.jar,poi-ooxml-schemas-3.10.1-20140818.jar,以及ooxml-lib目錄下的xmlbeans-2.6.0.jar,dom4j-1.6.1.jar。

基本案例

  我的准則是動手操作. 看過的聽過的永遠都是"我好像會了", 只有真正自己動手才是"我會了". 所以話不多說, 下面一個寫入03Excel和寫入07Excel的例子你操作一遍就會體會POI的基本寫入操作

  寫入03Excel

    public void testWrite03Excel() throws Exception{
            //創建03版工作薄(workbook)
            HSSFWorkbook workbook = new HSSFWorkbook();
            //創建名稱為hello的工作表(sheet)
            HSSFSheet sheet = workbook.createSheet("hello");
            //創建第3行
            HSSFRow row = sheet.createRow(2);
            //創建第3列
            HSSFCell cell = row.createCell(2);
            //設置單元格的值
            cell.setCellValue("hello world");
            //創建輸出流用來寫入到硬盤
            FileOutputStream outputStream = new FileOutputStream("F:/my/tempTest/測試.xls");
            //寫入
            workbook.write(outputStream);
            //關閉流
            outputStream.close();
            workbook.close();
    }
View Code

 

  寫入07Excel

    public void testWrite07Excel() throws Exception{
        //創建07版工作薄(workbook)
        XSSFWorkbook workbook = new XSSFWorkbook();
        //創建工作表(sheet)
        XSSFSheet sheet = workbook.createSheet("hello");
        //創建第3行
        XSSFRow row = sheet.createRow(2);
        //創建第3列
        XSSFCell cell = row.createCell(2);
        //設置值
        cell.setCellValue("hello world");
        //創建輸出流用來寫入
        FileOutputStream outputStream = new FileOutputStream("F:/my/tempTest/測試.xlsx");
        workbook.write(outputStream);
        outputStream.close();
        workbook.close();
    }
View Code

  從這兩個可以看出, 生成文件的後綴不同, 操作他們的類也不相同, 操作03版的都是Hxx, 操作07版的是Xxx, 那麼你也許想問, 有沒有相同的類或接口來操作他們, 答案是有的, 不過在new 工作薄(workbook)的時候要區分一下, 因為他們都只是實現公共的接口, 在下面讀取的時候講解.

 

  讀取03和07Excel

    //這個應該是把Excel作為一個參數傳入, 為了測試方便, 就不傳參了
    @Test
    public void testRead03And07Excel() throws Exception{
        String fileName = "F:/my/tempTest/測試.xls";
        FileInputStream inputStream = new FileInputStream(fileName);
        Workbook workbook = null;
        //讀取工作薄(workbook), 根據後綴判斷工作薄的版本
        if(fileName.endsWith(".xls"))
            workbook = new HSSFWorkbook(inputStream);
        else if(fileName.endsWith(".xlsx"))
            workbook = new XSSFWorkbook(inputStream);
        //讀取第1個工作表(sheet)
        Sheet sheet = workbook.getSheetAt(0);
        //讀取第3行
        Row row = sheet.getRow(2);
        //讀取第3列
        Cell cell = row.getCell(2);
        //讀取值
        String value = cell.getStringCellValue();
        System.out.println("第3行第3列的值是" + value);
        workbook.close();
        inputStream.close();
    }
View Code

  接收Excel時判斷其版本, 然後用不同的workbook接收, 接下來的操作都用他們的共同接口表示, 這樣實現了一個方法讀取不同版本的Excel. 我這裡讀取的一行數據, 在實際導入Excel的時候肯定不止一行數據, 到時候需要注意循環讀取, 讀取的起始行以及讀取數據的類型等.

添加樣式後的案例

    public void testExcelStyle() throws Exception {
        //創建工作薄
         HSSFWorkbook workbook = new HSSFWorkbook();
         //創建單元格樣式, 樣式屬於工作薄, 運用於單元格
         HSSFCellStyle cellStyle = workbook.createCellStyle();
         //水平居中
         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
         //垂直居中
         cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
         //創建字體, 字體屬於工作薄, 應用於單元格
         HSSFFont font = workbook.createFont();
         //字體大小
         font.setFontHeightInPoints((short) 16);
         //字體顏色
         font.setColor(HSSFFont.COLOR_RED);
         //加粗
         font.setBold(true);
         //運用字體
         cellStyle.setFont(font);
         //背景色需要設置前景色、背景色和填充模式,否則可能沒有效果
         //設置前景色
         cellStyle.setFillForegroundColor(HSSFColor.BLUE_GREY.index);
         //設置背景色
         cellStyle.setFillBackgroundColor(HSSFColor.YELLOW.index);
         //設置填充模式, 以前景色為准, 也可以設置其他的填充模式, 得到的結果就是前景色背景色交相輝映
         cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
         
         //創建合並單元格對象
         //合並單元格, 屬於工作薄, 運用於工作表
         //構造方法的4個參數分別是firstRow, lastRow, firstCol, lastCol
         CellRangeAddress rangeAddress = new CellRangeAddress(2, 2, 2, 3);
         //創建名稱為hello的工作表
         HSSFSheet sheet = workbook.createSheet("hello");
         //sheet運用合並單元格對象
         sheet.addMergedRegion(rangeAddress);
         //設置第3列的寬度
         //sheet.setColumnWidth(2, 12000);
        //創建第3行
         HSSFRow row = sheet.createRow(2);
         //row.setHeightInPoints((short) 80);//設置行高
         //創建第3列
         HSSFCell cell = row.createCell(2);
         //設置值
         cell.setCellValue("hello world");
         //運用樣式
         cell.setCellStyle(cellStyle);
         
         //創建輸出流用來寫入
         FileOutputStream outputStream = new FileOutputStream("F:/my/tempTest/測試Style.xls");
         workbook.write(outputStream);
         outputStream.close();
         workbook.close();         
    }
View Code

  POI操作Excel的基本操作就這麼多了, 再結合文件的上傳下載就可以實現Excel的導入導出了.

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved