记录使用EasyExcel实现导出功能

这篇具有很好参考价值的文章主要介绍了记录使用EasyExcel实现导出功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        之前项目中用的都是传统的POI格式导出。这个东西看起来很拉跨,而且如果数据量大的话还容易直接接口超时卡死,试过设置超时时间也没啥卵用。后来听说了阿里巴巴的EasyExcel,就小用了一下。反正目前来说用的还算舒服。

传统POI方式导出:

记录使用EasyExcel实现导出功能

一大堆字段都扔这里面,下面用二维数组的方式一顿赋值。一旦哪个值顺序没弄明白。直接凉凉。而且字段多的话,看着贼别扭。还不好对应。

EasyExcel方式:

记录使用EasyExcel实现导出功能 

看起来很简洁。把字段对应方式都扔到单独一个bean类了。下面一步一步看是怎么弄的。


实体类:

首先来一个bean类,里面放的就是要导出的字段。

记录使用EasyExcel实现导出功能

@ExcelProperty(value = "xxx") 这个注解里面标注中文含义。

这个里面还有个index = ""的属性,但是我没用到。这个应该是标识顺序的。如果像我这样没写,那就是默认顺序。从上到下。


记录使用EasyExcel实现导出功能

当时还有个需求是EXCEL的列头有颜色,所以用这个注解,给上了个色。这个42是颜色对应数字。每一个颜色都有对应的数字,详情参见下面颜色对比图:

记录使用EasyExcel实现导出功能


 

如果有字段不需要在EXCEL中显示的话,我们用这个注解忽略掉就可以:

记录使用EasyExcel实现导出功能

@ExcelIgnore注解,表示该字段不需要导出。 


查询完毕之后:

记录使用EasyExcel实现导出功能

 我们可以在查询之后的list进行自己的业务处理。

红框里面的,是可以忽略的字段。根据自己的业务来判断这个字段是否需要导出到EXCEL中。

例如我这个代码。if里面写上业务逻辑,如果满足的话:

创建一个set集合,然后将不想导出的字段放入,然后调用:

sheet.setExcludeColumnFieldNames(),将集合传入进去。

这样就不会导出该字段。 

实测速度确实是比传统的POI快。

完整伪代码如下:

    @GetMapping(value = "export")
    public void export(@RequestParam Map<String, String> params, HttpServletResponse response) {
        try {
            log.info("报表-开始导出时间:{}", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now()));
            String beginTime = params.get("beginTime");// 开始时间
            String endTime = params.get("endTime");// 结束时间
            if (null == beginTime || "".equals(beginTime) ||
                    null == endTime || "".equals(endTime)) {// 时间条件必须输入
                response.getOutputStream().write("查询时间条件为空,无法进行导出操作!".getBytes("UTF-8"));
                response.getOutputStream().close();
                return;
            }

            // 告诉浏览器用什么软件可以打开此文件
            response.setHeader("content-Type", "application/vnd.ms-excel");
            // 下载文件的默认名称
            String filename = "" + DateUtils.formatDate(DateUtils.currentDate(), "yyyyMMddHHmmss") + ".xlsx";
            response.setHeader("Content-Disposition", "attachment;filename=" + filename);

            String sheetName = "";

            List<XXX> list = clickHouseService.findByExport(params);

            //todo:自己的业务逻辑处理代码
            ...........    
            ...........

            //该方法是将excel写到本地。咱们是通过接口传到前端页面,所以这个方法不需要。
            // EasyExcel.write(filename,XXX.class).sheet(sheetName).doWrite(list);


            ServletOutputStream outputStream = response.getOutputStream();
            //新建ExcelWriter
            ExcelWriter excelWriter = EasyExcel.write(outputStream).build();
            //新建sheet
            WriteSheet sheet = EasyExcel.writerSheet(0, sheetName).head(XXX.class).build();

            //如果...,那么导出的EXCEL中不应该包含X这列
            if (自己的逻辑判断条件) {
                Set<String> excludeColumnFiledNames = new HashSet<String>();
                excludeColumnFiledNames.add("X 要忽略的字段,跟上面XXX实体类中相同");
                sheet.setExcludeColumnFiledNames(excludeColumnFiledNames);
            }


            //写回给前端
            excelWriter.write(list, sheet);
            //关闭流
            excelWriter.finish();
            outputStream.flush();
            log.info("报表-结束导出时间:{}", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now()));
        } catch (Exception e) {
            e.printStackTrace();
            log.error("导出报表,出现异常:", e);
        } finally {
            try {
                if (null != response.getOutputStream()) {
                    response.getOutputStream().close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
@Data
@HeadRowHeight(80)
@HeadFontStyle(fontHeightInPoints = 10)
public class XXXX {


    @HeadStyle(fillForegroundColor=颜色数字)
    @ExcelProperty(value = "字段中文含义")
    private String XXX;
    

    @ExcelIgnore
    private String XXX;
}

 文章来源地址https://www.toymoban.com/news/detail-459898.html

到了这里,关于记录使用EasyExcel实现导出功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用EasyExcel实现导入和导出

    简单实现导入和导出 POM FileUtil controller Service ServiceImpl ExceptionPersonListener ExceptionPersonImportExcel

    2024年02月13日
    浏览(37)
  • 使用EasyExcel实现Excel的导入导出

    在真实的开发者场景中,经常会使用excel作为数据的载体,进行数据导入和导出的操作,使用excel的导入和导出有很多种解决方案,本篇记录一下EasyExcel的使用。 EasyExcel是一个开源的项目,是阿里开发的。EasyExcel可以简化Excel表格的导入和导出操作,使用起来简单快捷,易上手

    2023年04月15日
    浏览(51)
  • 使用EasyExcel实现Excel表格的导入导出

    Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。 easyexcel重

    2024年02月12日
    浏览(46)
  • java实现excel的导出之使用easyExcel

    在我们的项目需求中,经常会遇到导出的需求,其中excel的导出最为常见。生成Excel比较有名的框架有Apache poi,jxl等,但他们都存在一个严重的问题就是非常的耗内存,如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc. EasyExcel是阿里巴巴

    2024年02月15日
    浏览(46)
  • Java 使用 EasyExcel 实现导入导出(新手篇教程)

    官网镇楼↓,觉得我写的不好的同学可以去官网看哦 EasyExcel 示例: 如上一个简易 Excel 表格,表头占了两行,且第三列开始才为有效数据,那么我们应该如何导入? 建造实体类 首先无论是导入还是导出,都需要先建对应的实体类  如图所示,因为我的示例 Excel 一共需要读

    2024年04月17日
    浏览(41)
  • springboot中使用EasyExcel实现Excel 导入导出

    EasyExcel 是一款基于 Java 的简单易用的 Excel 文件操作工具。它提供了丰富的 API,可以方便地读取、写入和操作 Excel 文件,支持常见的 Excel 操作,如读取/写入单元格数据、合并单元格、设置样式、处理大数据量等。EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将

    2024年02月12日
    浏览(67)
  • 使用EasyExcel实现excel导出,支持百万大数据量导出-----超简单

    通过设置sheet数量,完成分批导出,每个sheet存100万数据,每次查询插入20万数据,避免超时,内存溢出等问题,可以根据服务器配置调整参数设置。 1.引入依赖 2.创建对应的实体类 @ExcelProperty设置的就是导出的列名,还可以设置排序等等 3.核心导出代码 4.配置类 至此就完成导

    2024年02月11日
    浏览(62)
  • 使用POI和EasyExcel来实现excel文件的导入导出

    废话不多说咱们直接上干货!!!! 一.读取Excel表格 【1】使用POI读取excel表格中的数据 POI还可以操作我们这个word文档等等,他不仅仅只能弄Excel,而JXI只能操作excel 1.POI的结构,我们可以更具文件的类去选择 相关的对象我当前是使用的XLSX来操作的 HSSF - 提供读写Microsoft

    2024年02月05日
    浏览(59)
  • 教您如何三分钟搞定EasyExcel导入与导出功能

    文章目录 目录 前言 一、EasyExcel是什么? 二、使用步骤 1.引入库 2.导入 2.1创建对应excel表格的实体类 2.2后端接收请求入口 2.3业务处理 2.4监听器处理数据 3.导出 3.1创建导出格式生成对应的excel表格的实体类,这个可以看2.1 3.2后端接收请求入口 3.3业务处理 4.合并工具类 总结 该

    2024年02月03日
    浏览(43)
  • 使用EasyExcel实现模板下载、数据导入功能

    1.在你的工程下添加模板文件 2.编写代码实现下载功能 controller serviceImpl 好了,到这里,一个简单的下载模板功能就实现了。不过我在项目运行中遇到了一些坑,下面记录一下。 3.项目中遇到的坑:excel文件在springboot的maven项目下打了jar包后损坏 4.解决办法:试了很多种,主要

    2024年02月13日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包