EasyExcel的使用—详解(前端发送请求后端接收)

该博客介绍了如何在Java后端使用EasyExcel库来处理Excel数据导出。首先,引入Apache POI和EasyExcel的依赖。然后,前端通过Element-UI表单组件和复选框选择需要导出的数据,并通过axios发送POST请求到后台。在后端,创建一个实体类对应Excel的列标题,并使用Lombok简化代码。最后,Controller层接收请求,Service层调用EasyExcel的写操作将数据写入Excel并返回响应。

一、引入依赖

<!--xls-->
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.17</version>
    </dependency>
    <!--xlsx-->
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>3.17</version>
    </dependency>
    <dependency>
      <!--excel-->
      <groupId>com.alibaba</groupId>
      <artifactId>easyexcel</artifactId>
      <version>2.1.1</version>
    </dependency>

二、前端的内容(如何发送数据给后台)

1.需要一个button按钮

  <%--导出excel表格--%>
                <el-button type="primary" @click="ExportData">导出</el-button>

2.element-ui表单组件及复选框

 通过这两个组件实现将复选框选中的表单数据传递给后台

复选框的使用

(1)我们需要将我们要导出的表单的第一列添加复选框

 <%--选择框--%>
                    <el-table-column  type="selection" width="40">
                    </el-table-column>

(2)在data数据存放区域定义我们选中数据的存放数组

 //选择框选择的数据
data:{
                //复选框选中的数据
                selectionData:[],
}

 (3)获取选中数据的方法

handleSelectionChange(val) {
                    this.selectionData = val;
                    //我们也可以采用以下方法获取
                  /*  for(var i = 0;i < val.length;i++){
                        this.selectionData.push(val[i]);
                    }*/
                },

 此时我们已经做到能够获取到选中的表单数据了

3.向后端发起请求(导出button按钮的点击事件)

我们需要将选中的数据发送给后台

ExportData(){
                    //这里是向后端发送请求
                    axios.post("/inventory/ExportData",this.selectionData).then(function (result){
                         //这里是后端返回的数据
                        if(result.data.code===2000){
                            that.$message.success(result.data.msg);
                        }
                    })

                },

三、后端接收数据()

1.entity层我们要封装一个导出数据的实体类,属性一定要与前端发送给后台的数据相对应

(1)我们封装实体类的属性其实就是们导出excel表格的标题

(2)为每个属性加上标题注解@ExcelProperty("你的字段名称")

(3)一定要有lombok

lombok的依赖

   <!--lombok依赖-->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.24</version>
    </dependency>
@Data
@AllArgsConstructor
@NoArgsConstructor
public class IntoryData {
    @ExcelProperty("盘点编号")
    private String invenId;
    @ExcelProperty("盘点员")
    private String staffName;
    @ExcelProperty("盘点时间")
    private String invenTime;
    @ExcelProperty("审核员")
    private String auditName;
    @ExcelProperty("审核时间")
    private String examTime;
    @ExcelProperty("state")
    private String state;
    @ExcelProperty("所属分店")
    private String branchName;
}

2.Controller层接收前端发送的数据

Controller层和Service层先写哪一个都可以

//导出excel表格方法
    @RequestMapping("/ExportData")
    public CommonResult ExportData(HttpServletResponse response, @RequestBody List<IntoryData> params){
        System.out.println(params);
        CommonResult commonResult = exportDataService.ExportData(response,params);
        return commonResult;
    }

3.Service层的方法

@Service
public class ExportDataServiceImpl implements ExportDataService {
    public CommonResult ExportData(HttpServletResponse response, List<IntoryData> params) {
        //实现excel写的操作
        //1、设置写入文件夹地址和excel文件名称
        //我们也可以通过工具随机生成名字
        //随机生成字符串String s = UUID.randomUUID().toString();
        /*生成当前年月日+随机字符串
            Calendar calendar=Calendar.getInstance();
             String name=calendar.get(Calendar.YEAR)+"/"+(calendar.get(Calendar.MONTH)+1)+"/"+calendar.get(Calendar.DATE)+"/"+ UUID.randomUUID().toString()*/
        //这个是我们固定设置的名字
        String fileName = "E://盘点信息.xlsx";

        //2、调用EasyExcel里面方法实现写的操作
        //write两个参数:参数1:文件路径名称   参数2:参数实体类class
        EasyExcel.write(fileName,IntoryData.class).sheet("盘点信息").doWrite(params);
        return new CommonResult(2000,"导出成功",null);
    }
}

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值