easyExcel模版导出

本文介绍了在Java开发中利用EasyExcel工具处理特殊需求的Excel模版问题。首先,作者概述了EasyExcel的优点,并引用了官方文档和GitHub资源。接着,详细阐述了一个实际问题,即客户要求的特殊模版。为了解决这个问题,文章提出了表结构设计、模版规划和代码实现的步骤。在代码设计部分,展示了如何根据不同的类型查询数据并填充到模版中,最后导出Excel文件。文章还展示了部分关键代码片段,并邀请读者讨论可能存在的争议。虽然示例中数据库数据量有限,但整体解决方案能够有效应对类似需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一.前言

官方文档

二. 问题描述

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();

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

看结果

由于库里没太多数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值