目录

一.前言

官方文档

二. 问题描述

2.1问题描述复现

 2.2解决思路

2.2.1表结构设计

2.2.2规划模版

2.2.3代码设计(导出) 

一.前言

在之前的文章说过easyExcel的好处,这里就不作过多解释了

官方文档

GitHub - alibaba/easyexcel: 快速、简洁、解决大文件内存溢出的java处理Excel工具

快速开始:EasyExcel(文档已经迁移) · 语雀

二. 问题描述

在开发中我们会根据客户的需求来解决问题, 由于可户的模版要求比较特殊,我们来看一下

2.1问题描述复现

模版是这样的

如图:

 问题分析图:

 2.2解决思路

2.2.1表结构设计

进过分析我们将数据库表设计成这样的

2.2.2规划模版

2.2.3代码设计(导出) 

根据sql去查询出所有的总数,再按我们的类型进行查询出我们所需要的数据

这里的类型也比较多,跟笛卡尔积差不多吧

我们在这里要用常量的方式来定义我们的类型,这样就可以区分我们的不同类行了,再根据我们的不同类型, 调用mapper层查询语句, 将类型条见参数传进去就行了

代码:

        //生产经营性
        final String IS_PRODUCE_TYPE = "0";
        //非生产经营性
        final String NOT_IS_PRODUCE_TYPE = "1";
        //道路安全事故
        final String WAY_EVENT = "0";
        //建筑施工事故
        final String ARCHITECTURE_EVENT = "1";
        //非煤矿山事故
        final String COAL_EVENT = "2";
        //工贸事故
        final String INDUSTRY_EVENT = "3";

模版导出核心代码:

 //模版位置
        InputStream template = new PathMatchingResourcePatternResolver().getResource("templates/excels/事故调查首页月度事故表Excel导出模版.xlsx").getInputStream();
        response.setContentType("application/octet-stream");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码
        response.setHeader("Content-Disposition",
                "attachment;filename=" + java.net.URLEncoder.encode("事故调查首页月度事故表Excel导出模版.xlsx", "UTF-8"));
        //ExcelWriter该对象用于通过POI将值写入Excel
        ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(template).build();
        //构建excel的sheet
        WriteSheet writeSheet = EasyExcel.writerSheet().build();
Map<String, Integer> fileData = new HashMap<>();
        fileData.put("year", year);
        fileData.put("month", month);
        fileData.put("produce_type", num);
        fileData.put("produce_type1", produceTypeFormData.getNum() + 1);
        fileData.put("injureNumber", produceTypeFormData.getInjureNumber());
        fileData.put("deathNumber", produceTypeFormData.getDeathNumber());
        fileData.put("economicLoss", produceTypeFormData.getEconomicLoss());
excelWriter.fill(fileData, writeSheet);
        excelWriter.finish();

关于核心代码这里就不做解释了上面都有注解的, 对于核心代码网上存在很多争议, 希望大家留言讨论, 学习百家之长, 精己之技。

看结果

由于库里没太多数据

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐