前后端分离,springboot结合easyExcel实现导出excel

首先说一下,我的需求是前端点击导出,后端直接把所有的订单数据导出到excel中,并且通过流的形式返回到前端。

下面就开始。

  1. 既然要用easyExcel,那么就先引入pom依赖,
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>easyexcel</artifactId>
   <version>2.2.6</version>
</dependency>
  1. 创建一个要导出的字段模板类,这里@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;

}
  1. 直接查数据然后导出,写一个控制层接口
    注意,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)

解决!!!
可能很基础,也可能解决的方法不对,但是刚入行的我也算一次提升吧,如果有什么地方错了还麻烦大神帮忙指正,提前感谢,加油!!!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值