什么是easyexcel,easyexcel是阿里开发的一款简易的excel导出的工具,在一般的后台管理中都少不了excel的导出。
以前一般用的都是poi做导出的功能,但是这种原生的excel导出excel的功能是在太麻烦了,如果有架构师帮你封装好给你用那还好点。
但是这种一般都是自己去整合,而且poi导出excel的功能会有很多bug,就比如最常见的oom异常,导出数据量太多,或者批量导入导出都会有一点问题。
写一个简单的导出就得封装一大片代码可能还有问题。
public static List<Object[]> importExcel(String fileName) {
log.info("导入解析开始,fileName:{}",fileName);
try {
List<Object[]> list = new ArrayList<>();
InputStream inputStream = new FileInputStream(fileName);
Workbook workbook = WorkbookFactory.create(inputStream);
Sheet sheet = workbook.getSheetAt(0);
//获取sheet的行数
int rows = sheet.getPhysicalNumberOfRows();
for (int i = 0; i < rows; i++) {
//过滤表头行
if (i == 0) {
continue;
}
//获取当前行的数据
Row row = sheet.getRow(i);
Object[] objects = new Object[row.getPhysicalNumberOfCells()];
int index = 0;
for (Cell cell : row) {
if (cell.getCellType() == CELL_TYPE_NUMERIC) {
objects[index] = (int) cell.getNumericCellValue();
}
if (cell.getCellType() == CELL_TYPE_STRING) {
objects[index] = cell.getStringCellValue();
}
if (cell.getCellType() == CELL_TYPE_BOOLEAN) {
objects[index] = cell.getBooleanCellValue();
}
if (cell.getCellType() == CELL_TYPE_ERROR) {
objects[index] = cell.getErrorCellValue();
}
index++;
}
list.add(objects);
}
log.info("导入文件解析成功!");
return list;
}catch (Exception e){
log.info("导入文件解析失败!");
e.printStackTrace();
}
return null;
}
封装了一大片,结果还有可能出毛病。
加入pom文件
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
加上注释
编写代码
@GetMapping("/excel")
@ApiOperation(value = "导出", notes = "导出")
public void excel(HttpServletResponse response) throws IOException {
String fileName = "黑名单导入模板_" + sdf.format(new Date()) + ".xls";
response.setHeader("Content-disposition",
"attachment;filename=" + new String(fileName.getBytes("gb2312"), "ISO8859-1"));// 设置文件头编码格式
response.setContentType("APPLICATION/OCTET-STREAM;charset=UTF-8");// 设置类型
// response.setHeader("Cache-Control", "no-cache");// 设置头
// response.setDateHeader("Expires", 0);// 设置日期头
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
List<Label> labelList = lableService.findAll();
EasyExcel.write(response.getOutputStream(), Label.class).sheet("模板").doWrite(labelList);
}
完美导出
都可以简单的完成,方便多了,而且阿里的封装性避免了一些批量导入导出和oom等一些的问题