首先说一下,我的需求是前端点击导出,后端直接把所有的订单数据导出到excel中,并且通过流的形式返回到前端。
下面就开始。
- 既然要用easyExcel,那么就先引入pom依赖,
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
- 创建一个要导出的字段模板类,这里@ExcelProperty是excel中的列名称,@ColumnWidth是列宽
@Data
public class OrderModel {
@ColumnWidth(18)
@ExcelProperty("提交时间")
private String createTime;
@ColumnWidth(50)
@ExcelProperty("收件人信息")
private String recipientsInfo;
@ColumnWidth(50)
@ExcelProperty("人员类别")
private String personTypeInfo;
@ColumnWidth(50)
@ExcelProperty("备注")
private String remark;
}
- 直接查数据然后导出,写一个控制层接口
注意,URLEncoder类导入java.net.URLEncoder,这个包;至于返回的数据可以根据业务来定义,这里就写void
@GetMapping("/excel")
public void excel(HttpServletResponse response) {
//这里代码去掉了,就是获取要导出的数据集合 orderModelList
OutputStream os = null;// 取得输出流
try {
os = response.getOutputStream();
response.setHeader("content-disposition", "attachment;fileName="+ URLEncoder.encode("订单信息"+ System.currentTimeMillis() + ".xlsx","UTF-8") );// 设定输出文件头,这里fileName=后面跟的就是文件的名称,可以随意更改
} catch (IOException e) {
e.printStackTrace();
}
EasyExcel.write(os, OrderModel.class).sheet("订单数据").doWrite(orderModelList);//sheet()里面的内容是工作簿的名称
response.reset();// 清空输出流
}
搞定,其他的一些东西可以去官网
2021.01.16
- 突然想到之前做了一个该功能的一个拓展,具体要求是前端选择要导出的数据,我首先想到的就是用post接收前端选中的数据,然后再用流返回给前端。但是试了很久一直报错,很来百度好像是因为post请求的原因导致不能这样写,然后就投机取巧让前端在地址栏把要导出的数据给我携带过来(因为系统并不是很大,数据也不是很多,一页只展示10条,然后就最多只能选十条,就不必担心get请求过长的问题)。
- 当然这样做可能要截取,很麻烦,所以就把要导出的id整一个json串拼在参数后面如:
http://192.168.16.9:8021/jasoboss/crm/business/export?adminId=139&boIdJson=%5B1%5D
这里的boIdJson就是我后台要接受的id集合,后面是一个json格式然后通过encodeURI转码后的结果如下图:
转码地址:https://www.sojson.com/encodeurl.html
- 后台接收直接转集合就行
List<Long> clueIdList = JSONArray.parseArray(clueIdJson, Long.class)
解决!!!
可能很基础,也可能解决的方法不对,但是刚入行的我也算一次提升吧,如果有什么地方错了还麻烦大神帮忙指正,提前感谢,加油!!!