POI版本
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
<scope>compile</scope>
</dependency>
/***
* 获取数据(分页)取出的值未做类型判断和转换
*
* @param sheetNumber
* @param excelFields 表头信息
* @param start 开始行号
* @param number 结束行号
* @param filePath 文件路径
* @return
*/
public List<Map> getData(int sheetNumber, int start, int number ,String filePath ,List<String> excelFields) {
/*
数据组装格式
List<Map> data = new ArrayList<Map>();
Map rowData1 = new HashMap();
rowData1.put("cellName1","value");
rowData1.put("cellName2","value");
rowData1.put("cellName3","value");
data.add(rowData1);
Map rowData2 = new HashMap();
rowData2.put("cellName1","value");
rowData2.put("cellName2","value");
rowData2.put("cellName3","value");
data.add(rowData2);
*/
File file = new File(filePath);
List<Map> resultList = new ArrayList<Map>();
if (!file.exists()) {
log.error("文件未找到!" + filePath);
throw new BussinessException(BizExceptionEnum.FILE_NOT_FOUND);
}
InputStream in = null;
try {
in = new FileInputStream(file);
Workbook wb = WorkbookFactory.create(in); //poi提供的方法 可以不用区分excel版本
Sheet sheet = wb.getSheetAt(sheetNumber);
if(sheet != null){
//根据列名取出相应start 到number之间的数据
int rowNumber = 0; //行号
for (Row rowData : sheet) {
//过滤第一行表头数据
if (rowNumber < start || rowNumber > number) {
rowNumber++;
continue;
}
//遍历每一行数据
int cellNumber = 0; //列号
Map map = new HashMap();
for (Cell cell : rowData) {
for(String str :excelFields){
if(str.trim().equals(row.getCell(cell.getColumnIndex()).toString().trim())){
String value = cell.toString();
map.put(row.getCell(cell.getColumnIndex()).toString(), value);
}
}
cellNumber++;
}
resultList.add(map);
rowNumber++;
}
}
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new RuntimeException(e.getMessage());
} finally {
try {
if (in != null) {
in.close();
}
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
return resultList;
}