1.导出模块,导出中有中文文件名称,设置格式
/**
* 以流方式响应回给客户端,返回值类型设置成void
*
* @param response 输出excel表格,让用户下载
*/
@PostMapping("/exportExcel")
public void exportExcel(ZqRewardProjectContract zqRewardProjectContract,HttpServletResponse response){
try {
// 设置内容格式 以及 编码方式(文件指定可以修改)
// response.setContentType("application/vnd.ms-excel");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
//attachment指定独立文件下载 不指定则回浏览器中直接打开
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = URLEncoder.encode("数据", "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
// response.setHeader("Content-Disposition","attachment;filename="+new String("数据.xlsx".getBytes(),"UTF-8"));
//输出文件流 调用服务层方法,获取excel对象放入输出流
Page<ZqRewardProjectContract> page = getPage();
List<ZqRewardProjectContract> list = zqRewardProjectContractService.findAll(page, zqRewardProjectContract);
//导出excel
EasyExcel.write(response.getOutputStream(), ZqRewardProjectContract.class).sheet(0).doWrite(list);
} catch (Exception e) {
e.printStackTrace();
}
}
2.导入,直接导入和异步导入(可以处理重复和设置参数)
/**
* ajax文件上传,前端传递的文件对象为file
*
* @param file 前端上传的excel文件
* @return
*/
@PostMapping("/importExcel")
public String importExcel(MultipartFile file){
//从解析器中获取excel文件流,传入到服务层进行读取处理
try {
EasyExcel.read(file.getInputStream(),ZqRewardProjectContract.class,new EasyExcelListener<ZqRewardProjectContract>(zqRewardProjectContractService) ).sheet("表").doRead();
} catch (Exception e) {
e.printStackTrace();
return "导入失败";
}
return "导入成功";
}
/**
* ajax文件上传,前端传递的文件对象为file
*
* @param file 前端上传的excel文件
* @return
*/
@PostMapping("/importExcel2")
public String importExcel2(MultipartFile file){
//从解析器中获取excel文件流,传入到服务层进行读取处理
try {
// EasyExcel.read(file.getInputStream(),ZqRewardProjectContract.class,new EasyExcelListener<ZqRewardProjectContract>(zqRewardProjectContractService) ).sheet("表").doRead();
List<ZqRewardProjectContract> list = EasyExcel.read(file.getInputStream(),ZqRewardProjectContract.class,new EasyExcelListener<ZqRewardProjectContract>(zqRewardProjectContractService) ).sheet("表").doReadSync();
//处理数据
for (int i = 0,n = list.size(); i < n; i++) {
list.get(i).set区域("县市");
}
zqRewardProjectContractService.saveOrUpdateBatch(list);
} catch (Exception e) {
e.printStackTrace();
return "导入失败";
}
return "导入成功";
}
3.多sheet导出
4.输出多个sheet,自定义表头 这里部分代码