开发大部分系统需要进行数据的导出,发现阿里的eayExcel插件极为好用,仅需一个注解,加上几行代码轻松搞定excel导出。话不多说直接贴代码
1、pom.xml 引入jar包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>1.1.2-beta5</version>
</dependency>
2、实体类必须继承,index为表头顺序
public class Mine extends BaseRowModel{
/**
* 类别
*/
@ExcelProperty(value = "类别", index = 1)
private String type;
/**
* 名称
*/
@ExcelProperty(value = "矿山名称", index = 2)
private String name;
}
2、controller 入口类
/**
* 数据导出
* @param search
* @param response
*/
@RequestMapping(value = "/exportDateToExcel")
public void exportDateToExcel(Mine search, HttpServletResponse response) {
//根据条件查询导出的数据
List<Mine> list = service.findAll(search, pageable).getContent();
try {
Map<String, List<? extends BaseRowModel>> map = new HashMap<>();
map.put("数据信息", list);
ExcelUtil.createExcelStreamMutilByEaysExcel(response, map, ExcelTypeEnum.XLSX, "数据信息("+ExcelUtil.fileName()+").xlsx");
} catch (Exception e) {
e.printStackTrace();
}
}
2.Excel工具类
public class ExcelUtil {
/**
* @Author jian
* @Description 导出excel 支持一张表导出多个sheet
* @Param OutputStream 输出流
* Map<String, List> sheetName和每个sheet的数据
* ExcelTypeEnum 要导出的excel的类型 有ExcelTypeEnum.xls 和有ExcelTypeEnum.xlsx
*/
public static void createExcelStreamMutilByEaysExcel(HttpServletResponse response, Map<String, List<? extends BaseRowModel>> SheetNameAndDateList, ExcelTypeEnum type, String fileName) throws UnsupportedEncodingException {
try {
response.setContentType("multipart/form-data");
response.setCharacterEncoding("utf-8");
response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.replaceAll(" ", "").getBytes("utf-8"), "iso8859-1"));
ServletOutputStream out = response.getOutputStream();
ExcelWriter writer = new ExcelWriter(out, type, true);
setSheet(SheetNameAndDateList, writer);
writer.finish();
out.flush();
System.out.println("导出完成");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 以当前时间生成文件名
* @return
*/
public static String fileName() {
String fileName = "";
try {
fileName = new String(
(new SimpleDateFormat("yyyy-MM-dd").format(new Date())).getBytes(), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return fileName;
}
/**
* @Author jian
* @Description //setSheet数据
*/
private static void setSheet(Map<String, List<? extends BaseRowModel>> SheetNameAndDateList, ExcelWriter writer) {
int sheetNum = 1;
for (Map.Entry<String, List<? extends BaseRowModel>> stringListEntry : SheetNameAndDateList.entrySet()) {
Sheet sheet = new Sheet(sheetNum, 0, stringListEntry.getValue().get(0).getClass());
sheet.setSheetName(stringListEntry.getKey());
writer.write(stringListEntry.getValue(), sheet);
sheetNum++;
}
}
OK! 完成啦!