Java 報(bào)表 POI操作Excel

POI操作Excel

  1. Excel簡介

    • 一個(gè)excel文件就是一個(gè)工作簿workbook,一個(gè)工作簿中可以創(chuàng)建多張工作表sheet,而一個(gè)工作表中包含多個(gè)單元格Cell,這些單元格都是由列(Column)行(Row)組成,列用大寫英文字母表示,從A開始到Z共26列,然后再從AA到AZ又26列,再從BA到BZ再26列以此類推。行則使用數(shù)字表示,例如;A3 表示第三行第一列,E5表示第五行第五列。

    • TIM截圖20170820183058.png
  2. POI工具包

    • JAVA中操作Excel的有兩種比較主流的工具包: JXL 和 POI 。jxl 只能操作Excel 95, 97, 2000也即以.xls為后綴的excel。而poi可以操作Excel 95及以后的版本,即可操作后綴為 .xls 和 .xlsx兩種格式的excel。

    • POI全稱 Poor Obfuscation Implementation,直譯為“可憐的模糊實(shí)現(xiàn)”,利用POI接口可以通過JAVA操作Microsoft office 套件工具的讀寫功能。官網(wǎng):http://poi.apache.org ,POI支持office的所有版本,并且在接下來的演示中需要從前端頁面導(dǎo)入用戶上傳的版本不確定的excel文件,所以選擇POI來講解。

  3. 示例環(huán)境

    • JDK 1.8
    • OS: Windows10
    • POI 3.16
  4. 添加 Maven 依賴

        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.16</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.16</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>3.16</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/org.apache.xmlbeans/xmlbeans -->
        <dependency>
            <groupId>org.apache.xmlbeans</groupId>
            <artifactId>xmlbeans</artifactId>
            <version>2.6.0</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    
  5. HelloWorld

    • 07版本前

      • Excel 的工作簿對應(yīng)POI的HSSFWorkbook對象;
      • Excel 的工作表對應(yīng)POI的HSSFSheet對象;
      • Excel 的行對應(yīng)POI的HSSFRow對象;
      • Excel 的單元格對應(yīng)POI的HSSFCell對象。
    • 07版本及07以后版本

      • Excel 的工作簿對應(yīng)POI的XSSFWorkbook對象;
      • Excel 的工作表對應(yīng)POI的XSSFSheet對象;
      • Excel 的行對應(yīng)POI的XSSFRow對象;
      • Excel 的單元格對應(yīng)POI的XSSFCell對象。
    • Hello POI

    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    /**
     * Created by huangMP on 2017/8/20.
     * decription :
     */
    public class OutputExcelDemo {
    
        /**
         *  從 工作簿中寫入 數(shù)據(jù) OutputExcelDemo
         * 07 版本及之前的版本寫法
         * @throws IOException
         */
        public void outputExcel() throws IOException {
            // 1. 創(chuàng)建工作簿
            HSSFWorkbook workbook = new HSSFWorkbook();
    
            // 2. 創(chuàng)建工作類
            HSSFSheet sheet = workbook.createSheet("hello world");
    
            // 3. 創(chuàng)建行 , 第三行 注意:從0開始
            HSSFRow row = sheet.createRow(2);
    
            // 4. 創(chuàng)建單元格, 第三行第三列 注意:從0開始
            HSSFCell cell = row.createCell(2);
            cell.setCellValue("Hello World");
    
            String fileName = "D:\\huangMP\\Desktop\\OutputExcelDemo.xls";
            FileOutputStream fileOutputSteam = new FileOutputStream(fileName);
    
            workbook.write(fileOutputSteam);
            workbook.close();
    
            fileOutputSteam.close();
        }
    }
    
    • 測試方法
    @Test
    public void outputExcel() throws Exception {
        OutputExcelDemo outputExcelDemo = new OutputExcelDemo();
        outputExcelDemo.outputExcel();
    }
    
  6. 從工作簿(Excel)文件讀取信息

        /**
         * 從 工作簿中讀取 數(shù)據(jù) ReadExcelDemo
         * @throws IOException
         */
        public void readExel() throws IOException {
    
            String fileName = "D:\\huangMP\\Desktop\\OutputExcelDemo.xls";
            FileInputStream fileInputStream = new FileInputStream(fileName);
    
            // 1. 創(chuàng)建工作簿
            HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);
    
            // 2. 創(chuàng)建工作類
            HSSFSheet sheet = workbook.getSheetAt(0);
    
            // 3. 創(chuàng)建行 , 第三行 注意:從0開始
            HSSFRow row = sheet.getRow(2);
    
            // 4. 創(chuàng)建單元格, 第三行第三列 注意:從0開始
            HSSFCell cell = row.getCell(2);
            String cellString = cell.getStringCellValue();
    
            System.out.println("第三行第三列的值為 : " + cellString );
    
            workbook.close();
            fileInputStream.close();
        }
    
  7. 格式化Excel

    • 在POI中可以利用格式化對象來格式化excel文檔;也即設(shè)置excel內(nèi)容的樣式。POI中主要的格式化對象常用的有合并單元格、設(shè)置單元格字體、邊框,背景顏色等。
    • 常用設(shè)置
      • 合并單元格
        • 在POI中有一個(gè)CellRangeAddress對象,中文直譯是 單元格范圍地址,主要用于在單元格的合并上,這個(gè)對象的構(gòu)造方法CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol) 有4個(gè)參數(shù),分別表示(起始行號,終止行號, 起始列號,終止列號), 設(shè)置這個(gè)對象中要合并的單元格范圍后,工作表對象sheet調(diào)用方法addMergedRegion(CellRangeAddress region) ,將上述設(shè)置的CellRangeAddress對象作為參數(shù)傳入即可合并單元格。

        • 設(shè)置單元格樣式

          • 首先要設(shè)置單元格樣式則要先初始化POI中的單元格樣式對象HSSFCellStyle,然后在樣式對象中設(shè)置不同的樣式(內(nèi)容位置、字體、背景、顏色、邊框等)。單元格樣式是由工作簿workbook創(chuàng)建的,一個(gè)工作簿可以創(chuàng)建多個(gè)樣式。
            • 設(shè)置單元格內(nèi)容位置;設(shè)置水平位置 setAlignment(short align) ,設(shè)置垂直位置setVerticalAlignment(short align)
            • 設(shè)置單元格字體;POI中的字體對象為HSSFFont,字體是由工作簿創(chuàng)建,可以用于多個(gè)單元格上。
            • 設(shè)置單元格背景色。
    • 示例代碼
      public void testExcelStyle() throws IOException {
          // 1. 創(chuàng)建工作簿
          HSSFWorkbook workbook = new HSSFWorkbook();
          // 1.1 創(chuàng)建單元格對象 合并第三行第三列到5列
          // 構(gòu)造參數(shù) 起始行號 結(jié)束行號 起始列號 結(jié)束列號
          CellRangeAddress cellRangeAddress = new CellRangeAddress(
                  2, 2, 2, 4 );
          // 1.2 創(chuàng)建單元格樣式
          HSSFCellStyle style = workbook.createCellStyle();
          style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
          style.setAlignment(HSSFCellStyle.VERTICAL_CENTER);
      
          // 1.3 創(chuàng)建字體
          HSSFFont font = workbook.createFont();
          font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
          font.setFontHeightInPoints((short)16);
          // 將字體加載到樣式中
          style.setFont(font);
      
          // 1.4 設(shè)置背景色為黃色
          // 1.4.1 設(shè)置填充模式
          style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
          style.setFillBackgroundColor(HSSFColor.YELLOW.index);
          style.setFillForegroundColor(HSSFColor.GREEN.index);
      
          // 2. 創(chuàng)建工作類
          HSSFSheet sheet = workbook.createSheet("hello world");
          // 2.1 加入合并單元格對象
          sheet.addMergedRegion(cellRangeAddress);
      
          // 3. 創(chuàng)建行 , 第三行 注意:從0開始
          HSSFRow row = sheet.createRow(2);
      
          // 4. 創(chuàng)建單元格, 第三行第三列 注意:從0開始
          HSSFCell cell = row.createCell(2);
          cell.setCellValue("Hello World");
          // 4.1 單元格添加樣式
          cell.setCellStyle(style);
      
          String fileName = "D:\\huangMP\\Desktop\\HelloExcelStyle.xls";
          FileOutputStream fileOutputSteam = new FileOutputStream(fileName);
      
          workbook.write(fileOutputSteam);
          workbook.close();
      
          fileOutputSteam.close();
      
      }
      
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 使用首先需要了解他的工作原理 1.POI結(jié)構(gòu)與常用類 (1)創(chuàng)建Workbook和Sheet (2)創(chuàng)建單元格 (...
    長城ol閱讀 8,522評論 2 25
  • 該文章為本系列的第一篇第二篇為 : Java POI操作Excel(Event Model)第三篇為 : Java...
    mmlmml閱讀 13,510評論 6 21
  • 轉(zhuǎn)自鏈接 目錄 1.認(rèn)識NPOI 2.使用NPOI生成xls文件 2.1創(chuàng)建基本內(nèi)容 2.1.1創(chuàng)建Workboo...
    腿毛褲閱讀 10,687評論 1 3
  • 實(shí)習(xí)第二周 No.2 項(xiàng)目功能里要求能夠?qū)⒄故镜膱?bào)表導(dǎo)出excel,因?yàn)閳?bào)表的數(shù)據(jù)都是動(dòng)態(tài)從list傳進(jìn)來的,所...
    蘇筱筑閱讀 2,421評論 2 7
  • Maven依賴 Excel2003或更早的版本 Excel2007或更新的版本 Apache POI里面的基本概念...
    字伯約閱讀 2,171評論 0 3