/**
* 解析excel模板
*
* @param file
* @return
*/
public static TestResponse readExcel(MultipartFile file) {
TestResponse response = new TestResponse();
try {
//获取文件类型,判断所需要使用的解析对象
String fileType = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")).toLowerCase();
InputStream is = file.getInputStream();
org.apache.poi.ss.usermodel.Workbook wb = null;
if (fileType.endsWith(".xlsx")) {
//Excel 2007
wb = new XSSFWorkbook(is);
} else if (fileType.endsWith(".xls")) {
//Excel 2003
wb = new HSSFWorkbook(is);
} else {
//文件类型异常
throw ServiceExceptionUtil.fail(ResourceErrorCodeEnum.FILE_TYPE_ERROR);
}
//获取Excel的第一个sheet页面数据
Sheet sheet = wb.getSheetAt(0);
//如果多个sheet可以使用迭代器循环进行操作
Iterator<Sheet> sheetIterator = wb.sheetIterator();
while (sheetIterator.hasNext()) {
System.out.println("");
}
//当前页面所有行的总数, 去掉+1为当前工作表的最后一行的行号
int rowSize = sheet.getLastRowNum() + 1;
//此时j为控制从第几行开始读取数据(避免前几行为表名等字段)第一行大标题,第二行表头,第三行开始读取数据
List<TestVo> voList = new ArrayList<>();
for (int j = 2; j < rowSize; j++) {
TestVo vo = new TestVo();
//读取Excel中第 j 行
Row row = sheet.getRow(j);
if (row == null) {
continue;
}
//是获取最后一个不为空的列是第几个,比最后一列列标大1
int cellSize = row.getLastCellNum();
for (int k = 1; k < cellSize; k++) {
Cell cell = row.getCell(k);
String str = "";
if (cell != null) {
str = cell.toString();
}
//根据excel中的列,给vo对象赋字段值
switch (k) {
case 1:
vo.setTitle(str);
break;
case 2:
vo.setAnswer(str);
break;
default:
break;
}
}
voList.add(vo);
}
response.setVoList(voList);
//释放资源
wb.close();
is.close();
} catch (IOException e) {
log.error("文件解析异常");
e.printStackTrace();
}
return response;
}
Java 解析excel文件使用POI-jar包
最新推荐文章于 2024-10-16 10:12:06 发布