无模板、表头单行数据
controller:
@GetMapping("/xxx/download")
@Log("xxx")
@ApiOperation("xxx")
@PreAuthorize("@el.check('xxx','xxx:xxx')")
public void downloadxxxx(HttpServletResponse response, xxxQueryCriteria criteria) throws IOException {
xxxService.downloadxxx(xxxService.queryxxx(criteria), response);
}
xxxQueryCriteria
查询条件
@Data
public class xxxQueryCriteria {
@Query(type = Query.Type.IN)
private List<Long> list;
@Query(type = Query.Type.BETWEEN)
private List<String> createTime;
@Query(type = Query.Type.INNER_LIKE)
private String userName;
}
`
xxxService
public interface SybRptMchttermtransService extends BaseService<SybRptMchttermtrans> {
List<实体类> queryxxx(xxxQueryCriteria criteria);
void downloadxxx(List<实体类> convert, HttpServletResponse response)throws IOException;
}
xxxImpl
@Override
public List<实体类> queryxxx(xxxQueryCriteria criteria){
return xxxMapper.queryList(criteria);
}
@Override
public void downloadxxx(List<实体类> all, HttpServletResponse response) throws IOException {
List<Map<String,Object>> list = new ArrayList<>();
for (实体类 info :all){
Map<String,Object> map = new LinkedHashMap<>();
map.put("表头1",info.getxxx());
map.put("表头2",info.getxxx());
map.put("表头3",info.getxxx());
map.put("表头4",info.getxxx());
map.put("表头5",info.getxxx());
map.put("表头6",info.getxxx());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
@Override
public void downloadxxx(List<实体类> all, HttpServletResponse response) throws IOException {
//模板文件存放路径 一般放到配置文件中
String templateFileNamePath = "xxxx";
List<Map<String,Object>> list = new ArrayList<>();
for (实体类 info :all){
Map<String,Object> map = new LinkedHashMap<>();
map.put("aaa",info.getxxx());
map.put("bbb",info.getxxx());
map.put("ccc",info.getxxx());
list.add(map);
}
FileUtil.downloadTemplateExcel(templateFileNamePath, list,response);
}
FileUtil
/**
* 导出excel
*/
public static void downloadExcel(List<Map<String, Object>> list, HttpServletResponse response) throws IOException {
String tempPath =System.getProperty("java.io.tmpdir") + IdUtil.fastSimpleUUID() + ".xlsx";
File file = new File(tempPath);
BigExcelWriter writer= ExcelUtil.getBigWriter(file);
// 一次性写出内容,使用默认样式,强制输出标题
writer.write(list, true);
//response为HttpServletResponse对象
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
//test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
response.setHeader("Content-Disposition","attachment;filename=file.xlsx");
ServletOutputStream out=response.getOutputStream();
// 终止后删除临时文件
file.deleteOnExit();
writer.flush(out, true);
//此处记得关闭输出Servlet流
IoUtil.close(out);
}
按模板导出
适用 于自定义导出文件的表头 或表头需要合并单元格等
前半部分一样,这里主要看工具类
eg:
FileUtil
/**
* 按模板导出excel
*/
//templateFileName 为模板文件存储路径
public static void downloadTemplateExcel(String templateFileName,List<Map<String, Object>> list, HttpServletResponse response) throws IOException {
//将模板数据放入到临时excel中
String tempPath =System.getProperty("java.io.tmpdir") + IdUtil.fastSimpleUUID() + ".xlsx";
com.alibaba.excel.ExcelWriter excelWriter = EasyExcel.write(tempPath).withTemplate(templateFileName).build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
excelWriter.fill(list, fillConfig, writeSheet);
excelWriter.finish();
//写入到浏览器中
File file = new File(tempPath);
BigExcelWriter writer= ExcelUtil.getBigWriter(file);
//response为HttpServletResponse对象
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
//test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
response.setHeader("Content-Disposition","attachment;filename=file.xlsx");
ServletOutputStream out=response.getOutputStream();
// 终止后删除临时文件
file.deleteOnExit();
writer.flush(out, true);
//此处记得关闭输出Servlet流
IoUtil.close(out);
}
pom.xml:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.10</version>
</dependency>
vue接收后端数据
前端接收导出文件并命名:xxx数据.xlsx
doExport() {
download(crud.url + '/download', crud.getQueryParams()).then(result => {
downloadFile(result, crud.title + '数据', 'xlsx')
}).catch(() => {
})
},