一.选定easypoi版本(maven依赖)
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>4.2.0</version>
</dependency>
二.导出的方式
1.默认写死的实体顺序导出
1.定义实体User类,实体类上有注解,注解属性: name 导出excel的表头 orderNum 字段在excel的顺序 replace 替换 将数字转为对应的含义
public class User implements Serializable {
private static final long serialVersionUID = -6909818297910280264L;
@Excel(name = "用户id",orderNum = "0")
private Integer userId;
@Excel(name = "用户姓名",orderNum = "1")
private String userName;
@Excel(name = "用户年龄",orderNum = "2")
private Integer age;
@Excel(name = "用户地址",orderNum = "3")
private String userAddress;
@Excel(name = "性别", replace = {"男_10", "女_20"} ,orderNum = "4")
private Integer sex;
}
2.controller层代码 注意:方法的请求格式只能是get请求,post将失败
@GetMapping("/exportOrderList")
public String exportOrderList(HttpServletResponse response,HttpServletRequest request){
List<User> exportList = getUserList();
try {
String excelName = "用户信息表";
response.setHeader("content-Type","application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(excelName , "UTF-8") + ".xls");
response.setCharacterEncoding("UTF-8");
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(null, excelName), User.class, exportList);
workbook.write(response.getOutputStream());
} catch (IOException e) {
return "exportOrderList=====ERROR=====";
}
return null;
}
private List<User> getUserList(){
List<User> resultList = new ArrayList<>();
User user = new User();
user.setUserId(1);
user.setUserName("李玉刚");
user.setAge(32);
user.setUserAddress("新贵妃醉酒");
user.setSex(20);
User user1 = new User();
user1.setUserId(2);
user1.setUserName("刘德华");
user1.setAge(59);
user1.setUserAddress("冰雨");
user1.setSex(10);
resultList.add(user);
resultList.add(user1);
return resultList;
}
3.导出截图
2.动态表头导出
1.创建一个表头实体
public class DynamicTablePo implements Serializable{
private static final long serialVersionUID = 8991244829305414889L;
//表头名字
private String filedShowName;
//表头key值和查询出来的数据的实体相对应
private String filedCode;
//表头顺序
private Integer orderNum;
//字段数据类型
private Integer dataType;
}
2.创建想要的表头集合(这里是实现动态表头的定义)
private List<DynamicTablePo> getTalePoList() {
List<DynamicTablePo> resultList = new ArrayList<>();
DynamicTablePo tablePo = new DynamicTablePo();
tablePo.setFiledShowName("用户名称");
tablePo.setFiledCode("userName");
tablePo.setOrderNum(1);
tablePo.setDataType(0);
DynamicTablePo tablePo1 = new DynamicTablePo();
tablePo1.setFiledShowName("用户地址");
tablePo1.setFiledCode("userAddress");
tablePo1.setOrderNum(2);
tablePo1.setDataType(0);
resultList.add(tablePo);
resultList.add(tablePo1);
return resultList;
}
3.controller层代码
@GetMapping("/moveExport")
public String moveExport(HttpServletResponse response,HttpServletRequest request){
List<User> exportList = getUserList();
List<DynamicTablePo> tablePoList = getTalePoList();
List<ExcelExportEntity> beanList = new ArrayList<ExcelExportEntity>(tablePoList.size());
for (DynamicTablePo tablePo : tablePoList){
ExcelExportEntity entity = new ExcelExportEntity();
entity.setName(tablePo.getFiledShowName());
entity.setKey(tablePo.getFiledCode());
entity.setOrderNum(tablePo.getOrderNum());
if (tablePo.getDataType() == 1){//TODO 这块控制一下,是不是要写成数值型,默认
entity.setType(BaseEntityTypeConstants.DOUBLE_TYPE);
}
beanList.add(entity);
}
try {
String excelName = "用户信息表";
ExportParams exportParams = new ExportParams(excelName, "sheet1");
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, beanList , exportList);
response.setHeader("content-Type","application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(excelName + "导出表", "UTF-8") + ".xls");
response.setCharacterEncoding("UTF-8");
workbook.write(response.getOutputStream());
workbook.close();
} catch (FileNotFoundException e) {
return "导出选中的单据 exportOrderList=====ERROR=====";
} catch (IOException e) {
return "导出选中的单据 exportOrderList=====ERROR=====";
}
return null;
}
重点代码:ExcelExportUtil.exportExcel(exportParams, beanList , exportList);
beanList :动态表头集合
exportList:动态数据集合
4.导出截图