当前位置: 首页 > article >正文

easyExcel的使用

目录

 

easyExcel

基本使用easyExcel

1.导入依赖

2.创建pojo类

3.测试

 设置表头名字

合并表头

设置日期的格式

 忽略指定表头的列信息

设置单元格大小 

导入excel

 例子:导出一个指定页码最新交易点股票的相关信息表

1.设置接口

2.业务实现


 

easyExcel

作用:操作excel数据

基本使用easyExcel

1.导入依赖

<!--引入easyexcel-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.0.4</version>
</dependency>

注意:使用该版本的easyExcel版本jdk版本最好为8,太高会导致版本不兼容

2.创建pojo类

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Person {
    private String name;
    private Integer age;
    private String addr;
    private Date birthday;
}

3.测试

    @Test
    public void testPerson(){
        List<Person>persons=new ArrayList<>();
        for(int i=1;i<=10;i++){
            Person person = Person.builder().name("赫赫" + i).age(10 + i).addr("北京" + i).birthday(new Date()).build();
            persons.add(person);
        }
        //使用easyExcel导出excel表
        EasyExcel.write("D:\\easyExcel\\test.xls", Person.class).sheet("个人信息表").doWrite(persons);
    }

24ca7707e0d24235b89d48321a602370.png

 设置表头名字

在pojo类的成员变量中使用@ExcelProperty注解

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Person {
    @ExcelProperty(value = {"名字"},index = 0)
    private String name;
    @ExcelProperty(value = {"年龄"},index = 1)
    private Integer age;
    @ExcelProperty(value = {"地址"},index = 2)
    private String addr;
    @ExcelProperty(value = {"生日"},index = 3)
    private Date birthday;
}

083e612b96564953b11ba9833554a117.png

合并表头

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Person {
    @ExcelProperty(value = {"个人的基本信息","名字"},index = 0)
    private String name;
    @ExcelProperty(value = {"个人的基本信息","年龄"},index = 1)
    private Integer age;
    @ExcelProperty(value = {"个人的基本信息","地址"},index = 2)
    private String addr;
    @ExcelProperty(value = {"个人的基本信息","生日"},index = 3)
    private Date birthday;
}

c9e1e58df4a34e188cfbf65f35a3c329.png 

设置日期的格式

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Person {
    @ExcelProperty(value = {"个人的基本信息","名字"},index = 0)
    private String name;
    @ExcelProperty(value = {"个人的基本信息","年龄"},index = 1)
    private Integer age;
    @ExcelProperty(value = {"个人的基本信息","地址"},index = 2)
    private String addr;
    @ExcelProperty(value = {"个人的基本信息","生日"},index = 3)
    @DateTimeFormat("yyyy/MM/dd")//设置导出excel的日期的格式
    //注意:使用的是com.alibaba.excel.annotation.format.DateTimeFormat
    private Date birthday;
}

fe49de355455464cabdc76e0a35ebcaf.png 

 忽略指定表头的列信息

使用@ExcelIgnore

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Person {
    @ExcelProperty(value = {"个人的基本信息","名字"},index = 0)
    private String name;
    @ExcelProperty(value = {"个人的基本信息","年龄"},index = 1)
    private Integer age;
    @ExcelProperty(value = {"个人的基本信息","地址"},index = 2)
    private String addr;
    @ExcelProperty(value = {"个人的基本信息","生日"},index = 3)
    @DateTimeFormat("yyyy/MM/dd")//设置导出excel的日期的格式
    //注意:使用的是com.alibaba.excel.annotation.format.DateTimeFormat
    @ExcelIgnore
    private Date birthday;
}

085aaf7d57b346fd8965e53a443764c1.png

设置单元格大小 

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@HeadRowHeight(value = 35) // 表头行高
@ContentRowHeight(value = 25) // 内容行高
@ColumnWidth(value = 50) // 列宽
public class Person {
    @ExcelProperty(value = {"个人的基本信息","名字"},index = 0)
    private String name;
    @ExcelProperty(value = {"个人的基本信息","年龄"},index = 1)
    private Integer age;
    @ExcelProperty(value = {"个人的基本信息","地址"},index = 2)
    private String addr;
    @ExcelProperty(value = {"个人的基本信息","生日"},index = 3)
    @DateTimeFormat("yyyy/MM/dd")//设置导出excel的日期的格式
    //注意:使用的是com.alibaba.excel.annotation.format.DateTimeFormat
    @ExcelIgnore
    private Date birthday;
}

e61863cfb1b54928bc6a44f077cfa7cf.png

导入excel

/**
     * excel数据格式必须与实体类定义一致,否则数据读取不到
     */
    @Test
    public void testRead(){
        List<Person>persons=new ArrayList<>();
        //使用easyExcel读取excel表格信息
        EasyExcel.read("D:\\easyExcel\\test.xls", Person.class, new AnalysisEventListener<Person>() {
            //从表头开始逐行开始解析excel表的每行数据
            //会把每行的数据封装到o对象中
            @Override
            public void invoke(Person o, AnalysisContext analysisContext) {
                persons.add(o);//向List集合中添加数据
            }
            //读取完毕执行
            @Override
            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                System.out.println("read over");
            }
        }).sheet("个人信息表").doRead();
    }

 例子:导出一个指定页码最新交易点股票的相关信息表

1.设置接口

这里使用的是HttpServletResponse来导出excel数据,故方法类型为void

   /**
     * 导出指定页码最新交易点股票的相关信息
     * @param page 指定页码
     * @param pageSize 每页的大小
     * @param response
     */
    @GetMapping("/stock/export")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "page", value = "当前页数", required = false, defaultValue = "1"),
            @ApiImplicitParam(name = "pageSize", value = "每页的记录数", required = false, defaultValue = "20")
    })
    @ApiOperation("导出指定页码最新交易点股票的相关信息")
    public void exportStockPageInfo(
            @RequestParam(value = "page",required = false,defaultValue = "1")Integer page,
            @RequestParam(value = "pageSize",required = false,defaultValue = "20")Integer pageSize,
            HttpServletResponse response){
        stockService.exportStockPageInfo(page,pageSize,response);
    }

2.业务实现

   /**
     * 导出指定页码最新交易点股票的相关信息
     * @param page 指定页码
     * @param pageSize 每页的大小
     * @param response
     */
    @Override
    public void exportStockPageInfo(Integer page, Integer pageSize, HttpServletResponse response) {
        //1.获取股票的信息
        R<PageResult<StockUpDownDomain>> stockPageInfo = this.getStockPageInfo(page, pageSize);
        List<StockUpDownDomain> rows = stockPageInfo.getData().getRows();
        //2.导出excel
        // 这里使用swagger 会导致各种问题,请直接用浏览器或者用postman
        //设置响应的内容类型为excel
        response.setContentType("application/vnd.ms-excel");
        //设置响应内容的编码格式
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyExcel没有关系
        try {
            String fileName = URLEncoder.encode("股票信息表", "UTF-8");
            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
            EasyExcel.write(response.getOutputStream(), StockUpDownDomain.class).sheet("股票相关信息").doWrite(rows);
        } catch (IOException e) {
            log.error("当前页码:{},每页大小:{},当前时间:{},错误信息:{}",page,pageSize,DateTime.now().toString("yyyy-MM-dd HH:mm:ss"),e.getMessage());
            //通知前端异常
            // 设置响应的内容类型为 JSON
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
            R<Object> error = R.error(ResponseCode.ERROR);
            try {
                //把该数据转换成json数据格式
                String jsonData = new ObjectMapper().writeValueAsString(error);
                response.getWriter().print(jsonData);
            } catch (IOException ex) {
                log.error("exportStockPageInfo:响应数据失败,时间:{}",DateTime.now().toString("yyyy-MM-dd HH:mm:ss"));
            }
        }
    }

 

 


http://www.kler.cn/a/288229.html

相关文章:

  • 博物馆实景复刻:开启沉浸式文化体验的新篇章
  • python selenium库的使用:通过兴趣点获取坐标
  • 物料数据对接:轻易云助力聚水潭与金蝶云星空集成方案
  • 入侵排查之Linux
  • 基于微信小程序的平安驾校预约平台的设计与实现(源码+LW++远程调试+代码讲解等)
  • 前端搭建低代码平台,微前端如何选型?
  • 国外服务器单独ip多少钱
  • 【Day07】
  • Mybatis面试题(四)
  • x264 编码器 AArch64汇编系列:quant 量化相关汇编函数
  • m-bus电能表最大的优点是什么?
  • echarts graphChart关系图简单逻辑实现
  • linux-squid代理服务器
  • 微信小程序垃圾回收的前景方向
  • 09-02 周一 Ubuntu上使用docker-compose部署elasticsearch和kibana服务
  • k8s-pod 实战七 (PreStop 和 PostStart 详细分析)
  • .NET 一款具备签名用于绕过防护的工具
  • Git之2.35版本重要特性及用法实例(六十三)
  • 【前端面试】挖掘做过的nextJS项目4——全栈性案例
  • CNN在处理文本和图像时有什么共同点和不同点
  • Clobotics 计算机视觉场景存储实践:多云架构、 POSIX 全兼容、低运维的统一存储
  • 【Java】继承性【主线学习笔记】
  • React 入门第九天:与后端API的集成与数据管理
  • MySQL 使用C语言链接
  • 力扣238题详解:除自身以外数组的乘积的多种解法与模拟面试问答
  • 【Qt】对话框