開發大部分系統需要進行數據的導出,發現阿里的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! 完成啦!