使用Apach poi 實現對Excel表格的簡單讀寫

1.準備工作
導入apache-poi相關jar包:

gradle:

compile group: 'org.apache.poi', name: 'poi-ooxml', version: '3.15'

maven:

<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>3.15</version>
</dependency>

成功導入的話應該是這個樣子的(三個jar包都是3.15版本的):
正確的截圖

這裏如果用gradle導入jar包可能會有個問題,就是導入的apache-poi這個jar包可能是3.11版本
錯誤的截圖
初步分析(瞎扯)可能是apache-poi-ooxml-3.15中引用了這個3.11的jar(通過查看依賴樹發現它把我需要的3.15莫名其妙變成了3.11,可能是重複依賴,實際上如果直接用3.11的版本會報錯,兩個版本是不兼容的) 遇到這種問題就需要加一條了:

compile group: 'org.apache.poi', name: 'poi', version: '3.15'
compile group: 'org.apache.poi', name: 'poi-ooxml', version: '3.15'

然後就可以開心的寫代碼了~

2.基本操作簡介
*以XSSF開頭的類名適用於Microsoft Excel 2007及以後的文件(*.xlsx)
*以XSSF 開頭的則適用於更早版本的Excel(*.xls)的文件
*對一個Excel文件進行操作使用的是*Workbook
*對Excel中Sheet操作使用的是Worksheet
* Cell表示Excel中的一個小格子

3.代碼示例

寫入操作:

package com.spring.framework.kowalski;

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;

/**
 * Created by Kowalski on 2017/4/27
 * Updated by Kowalski on 2017/4/27
 */
public class WriteExcel {

    public static void main(String[] args) {
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("這是Sheet1");
        Object[][] dataTypes = {
                {"merchantId", "storeId", "orderNo"},
                {1129, "1232", "68891704250000006278"},
                {1130, "1121", "68891704250000006278"},
        };

        int rowNum = 0;
        System.out.println("start======================");
        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("D:/POIExcel.xlsx");
            workbook.write(outputStream);
            workbook.close();
            System.out.println("end======================");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

不需要提前新建文件,但需要解除Excel文件的佔用(比如正在被打開),運行成功後Excel中結果:
這裏寫圖片描述
細心的同學應該能夠發現除了merchantId其餘的左上角都有個小三角形,這說明該數字在Excel中是以文本形式存儲的,該方式能夠避免Excel對數字類型做特殊處理~

讀取操作:

package com.spring.framework.kowalski;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
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.xssf.usermodel.XSSFWorkbook;

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

/**
 * Created by Kowalski on 2017/4/27
 * Updated by Kowalski on 2017/4/27
 */
public class ReadExcel {

    public static void main(String[] args) {
        try {
           Workbook workbook = new XSSFWorkbook("D:/POIExcel.xlsx");
            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();
                    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();
        }
    }
}

讀取結果:
讀取結果
讀取操作Excel文件必須提前存在

這次學習了讀寫Excel文件,就是爲了在做參數化單元測試的時候使用Excel去管理測試用例http://blog.csdn.net/qq_32193151/article/details/60135396,等着吧~就快寫出來了~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章