推广

springboot+easyExcel实现导出操作

iseeyu3年前 (2024-02-21)推广139

sheet

开始

本项目使用的是springboot + vue +elementUI 实现,由于需要使用导出excel功能,所以浅入了easyExcel模块。

1、导入easyExcel坐标依赖
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.6</version>
        </dependency>

easyExcel官方文档:https://www.yuque.com/easyexcel/doc/quickstart

2、实体类编写

在这里使用了lombok插件,使用easyExcel只需要设置导出的excel表列名,使用@ExcelProperty(value=””)注解。具体配置列名、数据转换,日期格式,自定义excel表格样式,请去官网查看。

实体类部分图

3、controller编写
/**
     * 导出档案
     */
    @RequestMapping("/export")
    public void export(@RequestParam Map<String, Object> params, HttpServletResponse response) throws IOException {
        OutputStream outputStream = response.getOutputStream();
        // 获取数据
        PageUtils page = archService.getStatistics(params);
        // 获取农合档案信息
        List<ArchEntity> archEntityList = (List<ArchEntity>) page.getList();
        // 遍历设置List
        if (archEntityList.size() > 0) {
            List<FamilyEntity> familyEntityList = new ArrayList<>();
            List<CardEntity> cardEntityList = new ArrayList<>();
            List<PayEntity> payEntityList = new ArrayList<>();
            for (int i = 0; i < archEntityList.size(); i++) {
                // 获取家庭档案
                familyEntityList.add(i, archEntityList.get(i).getFamilyEntity());
                // 获取慢性病卡档案
                cardEntityList.add(i, archEntityList.get(i).getCardEntity());
                // 获取慢性病报销信息
                payEntityList.add(i, archEntityList.get(i).getPayEntity());
            }
            try {
                // 设置response
                response.setContentType("application/vnd.ms-excel");
                response.setCharacterEncoding("utf-8");
                // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
                String fileName = URLEncoder.encode("统计信息", "UTF-8");
                response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
                //新建ExcelWriter
                ExcelWriter excelWriter = EasyExcel.write(outputStream).build();
                //获取archSheet对象
                WriteSheet archSheet = EasyExcel.writerSheet(0, "农合信息档案").head(ArchEntity.class).build();
                //获取参合人员信息,向archSheet写入数据
                excelWriter.write(archEntityList, archSheet);
                //获取archSheet对象
                WriteSheet familySheet = EasyExcel.writerSheet(1, "参合家庭档案").head(FamilyEntity.class).build();
                //获取家庭参合信息,向familySheet写入数据
                excelWriter.write(familyEntityList, familySheet);
                //获取cardSheet对象
                WriteSheet cardSheet = EasyExcel.writerSheet(2, "慢性病卡信息").head(CardEntity.class).build();
                //获取家庭参合信息,向cardSheett写入数据
                excelWriter.write(cardEntityList, cardSheet);
                //获取paySheet对象
                WriteSheet paySheet = EasyExcel.writerSheet(3, "报销记录").head(PayEntity.class).build();
                //获取家庭参合信息,向paySheet写入数据
                excelWriter.write(payEntityList, paySheet);
                //关闭流
                excelWriter.finish();
                outputStream.flush();
            } catch (IOException e) {
                log.error("导出异常{}", e.getMessage());
            }
        }
    }
  • 1、创建OutputStream对象
OutputStream outputStream = response.getOutputStream();
  • 2、设置头、类型、编码格式
// 设置response
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = URLEncoder.encode("统计信息", "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
  • 3、创建ExcelWriter对象
//新建ExcelWriter
ExcelWriter excelWriter = EasyExcel.write(outputStream).build();
  • 4、创建WriteSheet对象,调用EasyExcel.writerSheet()方法写入参数
//获取archSheet对象
WriteSheet archSheet = EasyExcel.writerSheet(0, "农合信息档案").head(ArchEntity.class).build();

0为第一个模板(sheet),名称是农合信息档案。head()中传入的参数为实体类

  • 5、调用excelWriter.write()向sheet模板写入参数
//获取参合人员信息,向archSheet写入数据
excelWriter.write(archEntityList, archSheet);

向excelWriter.write()方法中传入List数据与WriteSheet对象

  • 6、关闭excelWriter.finish()
//关闭流
excelWriter.finish();
  • 7 、关闭outputStream.flush();
 outputStream.flush();
3、前端界面编写
// 导出档案
    exportHandle () {
      this.$nextTick(() => {
        this.$http({
          url: this.$http.adornUrl('/mxbbx/arch/export'),
          method: 'get',
          responseType: 'blob',
          params: this.$http.adornParams({
            'page': this.pageIndex,
            'limit': this.pageSize,
            'groupId': this.dataForm.groupId,
            'apName': this.dataForm.apName,
            'areaTime': this.dataForm.areaTime,
            'drName': this.dataForm.drName
          })
        }).then(({data}) => {
          // 创建Blob对象
          let blob = new Blob([data], { type: 'application/vnd.ms-excel;charset=utf-8' })
          // 获取路径
          let url = window.URL.createObjectURL(blob)
          // 创建a标签
          const link = document.createElement('a')
          // 设置a标签链接参数
          link.href = url
          // 重命名文件
          link.download = '报销信息.xlsx'
          link.click()
          // 下载完成释放URL 对象
          URL.revokeObjectURL(url)
          // 移除a标签
          document.body.removeChild(link)
        })
      })
    },

注意事项
1、这里我使用的axios异步调用处理(和ajax没啥大区别)
2、请求参数中设置:responseType: ‘blob’,将返回响应类型设置为blob
3、在返回成功then()中,创建a标签,并为a标签设置超链接,并设置点击下载文件流。如果不使用创建a标签的方式,将不会显示下载弹窗!!!(大坑,后端成功了,前端一直没有出现下载文件的弹窗,可能是vue的原因,在html中无需设置)

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/57557.html

相关文章

西安企业做百度推广,一个月花三千和花三万到底差在哪?

4|最近跟几个西安的老板聊天,发现一个挺有意思的现象:同样做百度推广,有人一个月花三千块,询盘不断;有人一个月砸三万,水花都没见着。问他们区别在哪,大多数人说不清楚,只知道'钱花了,没效果'。 5| 6|百度推广这东西,说复杂也复杂,说简单也简单。核心就一件事:让你的潜在客户搜某个词的时候,你的信息...

我想当策划,大学应该选什么专业?

我想当策划,大学应该选什么专业?

学,广告,传播,公关,这些专业其实都可以。另外也可以学像汉语言文学,以及一些跟文学相关的一些专业,会对你找工作有帮助。但是,你想从事这个这份职业,除了专业的学习之外,更多的是,你要在上学的时候积极参与一些更营销策划相关的社会实践。比如说你可以做一些兼职,比如说帮别人去写稿,...

服装市场营销策略分析,“定位不慎满盘皆输”

服装市场营销策略分析,“定位不慎满盘皆输”

不同的区域需要不同的策略,而不同的营销策略需要不同的销售思路来配合。因此,在研究女装产品销售思路之前,最好先对于市场与营销策略做一次深入地了解。1.市场区域化(market segmentation):目标营销的第一步,是将整个市场拆分成若干个同性质的小市场。2.目标市场的...

晚间悦读丨你的思维方式,决定你的人生高度!

晚间悦读丨你的思维方式,决定你的人生高度!

越长大,越发现,能够决定你人生高度的,往往是你的认知层次。 你的认知在哪个层级,你的人生就处在什么状态。你认知的高度,决定了你人生的高度。 那如何才能升级方式、提升认知能力呢?可以从这三个方面做出改变。 NO. 1 改变态度 有人...

编写项目营销策划方案六大要点

编写项目营销策划方案六大要点

现在商业发展非常迅速,的需求非常的大,但是要做好营销策划是有一定难度的,我把自己做营销策划的一些体会在这里分享给朋友们。营销策划方案六大要点我们先说项目营销策划方案这个话题。大部分的营销策划人都是在企业里工作,大部分项目之初都是来源于一个想法,创始人、老板或者创始团队的一个...

【商场营销策划】如何进行商场营销策划?

【商场营销策划】如何进行商场营销策划?

商场是策划者们关注的永恒话题,那么究竟该如何作好商场营销策划呢?掌握以下这几点营销策略设计原则,至关重要!1.义利兼顾的原则。商场在获取利润的同时要充分考虑到消费者的合法利益和商场的长远利益。在作商场活动营销策略方案的时候应该将这一点作为首要的原则。对商场有利而对顾客不利的...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片