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,等着吧~就快寫出來了~~~