Java架構-Apache POI Excel

陌霖Java架構發表於2018-11-11

相信在專案中,對資料進行動態匯出這是一個比較常見的功能。對於資料匯出我們可以使用Apache-POI這個框架來幫我來進行Excel的寫入與讀取。下面就用程式碼來實現Apache POI寫入與讀取excel檔案。

1、Apache POI基本概念

下面將簡單的描述一下當進行Excel讀取與寫入的時候要使用到的基本類。

  1. HSSF 為字首的類名錶示操作的是Microsoft Excel 2003檔案。
  2. XSSF 為字首的類名錶示操作的是Microsoft Excel 2007或以後的版本
  3. XSSFWorkbook 和 HSSFWorkbook表示一個Excel的Workbook.
  4. HSSFSheet 和 XSSFSheet 表示一個Excel的Worksheet.
  5. Row 表示一個Excel行
  6. Cell 表示當前Row中一個Cell.

2、下載Apache POI

在專案中是使用Maven來管理Jar依賴的,所以在Pom.xml新增以下依賴:

<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>3.15</version>
</dependency>
複製程式碼

3、寫入一個Excel檔案

下面的程式碼將會簡單的展示使用Apache POI寫入一個Excel檔案。資料將會寫入到XSSFWorkbook物件中。

ApachePOIExcelWrite.java
複製程式碼
package com.weimob.o2o.carl.poi;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class ApachePOIExcelWrite {

    private static final String FILE_NAME = "/tmp/MyFirstExcel.xlsx";

    public static void main(String[] args) {
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("Data types in Java");
        Object[][] dataTypes = {
                {"DataType", "Type", "Size(in bytes)"},
                {"int", "Primitive", 2},
                {"float", "Primitive", 4},
                {"double", "Primitive", 8},
                {"char", "Primitive", 1},
                {"String", "Non-Primitive", "No fixed size"}
        };

        int rowNum = 0;
        System.out.println("Creating excel");
        for(Object[] dataType : dataTypes){
            Row row = sheet.createRow(rowNum++);
            int colNum = 0;
            for(Object field : dataType){
                Cell cell = row.createCell(colNum++);
                if(field instanceof String){
                    cell.setCellValue((String) field);
                } else if (field instanceof Integer){
                    cell.setCellValue((Integer) field);
                }
            }
        }
        try {
            FileOutputStream outputStream = new FileOutputStream(FILE_NAME);
            workbook.write(outputStream);
            workbook.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("Done");

    }

}

複製程式碼

你將會在你專案所在的磁碟中的tmp資料夾中得到以下的excel檔案:

Java架構-Apache POI Excel

4、讀取一個Excel檔案

下面的程式碼展示如何使用Apache POI讀取Excel檔案。getCellTypeEnum方法在 3.15 中不推薦使用並且會在 4.0 版本中將會改名為:getCellType.

ApachePOIExcelRead.java
複製程式碼
package com.weimob.o2o.carl.poi;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;

public class ApachePOIExcelRead {

    private static final String FILE_NAME = "/tmp/MyFirstExcel.xlsx";

    public static void main(String[] args) {
        try {
            FileInputStream excelFile = new FileInputStream(new File(FILE_NAME));
            Workbook workbook = new XSSFWorkbook(excelFile);
            Sheet dataTypeSheet = workbook.getSheetAt(0);
            Iterator<Row> iterator = dataTypeSheet.iterator();
            while(iterator.hasNext()){
                Row currentRow = iterator.next();
                Iterator<Cell> cellIterator = currentRow.iterator();
                while(cellIterator.hasNext()){
                    Cell currentCell = cellIterator.next();
                    //getCellTypeEnum shown as deprecated for version 3.15
                    //getCellTypeEnum ill be renamed to getCellType starting from version 4.0
                    if(currentCell.getCellTypeEnum() == CellType.STRING){
                        System.out.print(currentCell.getStringCellValue() + "--");
                    } else if(currentCell.getCellTypeEnum() == CellType.NUMERIC){
                        System.out.print(currentCell.getNumericCellValue() + "--");
                    }
                }
                System.out.println();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
複製程式碼

你的控制檯將會輸出以下程式碼:

Java架構-Apache POI Excel

為什麼某些人會一直比你優秀,是因為他本身就很優秀還一直在持續努力變得更優秀,而你是不是還在滿足於現狀內心在竊喜!

合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!

To-陌霖Java架構
複製程式碼

分享網際網路最新文章 關注網際網路最新發展

相關文章