使用Apache POI可以实现Excel文档的读写,下面介绍读取Excel文档的方法。
1、maven依赖
org.apache.poi
poi-ooxml
3.15
2、读取Excel文件
/**
* Created by ASUS on 2017/3/15.
* 用于读取Excel文档
*/
public class ExcelReader {
//不同格式的Excel文档需要需用不同的API,固要进行区分
private static Workbook getWorkbook(String version, InputStream inputStream) throws Exception {
if (version.equals("xls")){
return new HSSFWorkbook(inputStream);
}else if (version.equals("xlsx")){
return new XSSFWorkbook(inputStream);
}else{
throw new Exception("文档格式错误!");
}
}
public static List> read(String version, InputStream inputStream,int sheetIndex) throws Exception {
//获取工作表
Workbook workbook = getWorkbook(version,inputStream);
//获取工作簿
Sheet sheet = workbook.getSheetAt(sheetIndex);
//用于存储读取的数据
List> data = new ArrayList<>();
//只能一行一行读取
//注意这里要用=,因为sheet.getLastRowNum()返回的是最后一行的ID
for (int i = 0; i <=sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
List rowData = new ArrayList<>();
//一行中一格一格读取
for (int j = 0; j < row.getLastCellNum(); j++) {
rowData.add(getCellValue(row.getCell(j)));
}
data.add(rowData);
}
return data;
}
//读取不同格式的单元格的值
private static Object getCellValue(Cell cell){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HHmm");
if (cell==null){
return null;
}
//这几个方法已经被标为deprecated,但是奇葩的是POI并没有推出新的替代的方法...
switch (cell.getCellType()){
case Cell.CELL_TYPE_BOOLEAN:
return cell.getBooleanCellValue();
case Cell.CELL_TYPE_STRING:
return cell.getStringCellValue();
case Cell.CELL_TYPE_NUMERIC:
if ("h:mm".equals(cell.getCellStyle().getDataFormatString())){
return simpleDateFormat.format(cell.getDateCellValue());
}
return cell.getNumericCellValue();
default:
return null;
}
}
}