Springboot+Easyexcel将数据写入模板文件并导出Excel

多场景easyExcel导出excel文件(一) 使用easyExcel导出excel文件,包括多级表头,多种实现方式,没有表头的动态值,导出图片和超链接和批注和公式,设置单元格和字体样式,导出多sheet,合并单元格,使用table表头,动态表头等场景, 阅读详情

Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,一个3M的excel用POI sax解析依然需要100M左右内存,改用easyexcel可以降低到几M,并且再大的excel也不会出现内存溢出;03版依赖POI的sax模式,在上层做了模型转换的封装,让使用者更加简单方便。

本文使用easyexcel对excel文件进行操作,来实现数据以excel形式导出的功能。

需求背景:

针对用户选择的数据,利用现有的excel模板,实现批量导出的功能。比如优快云也有类似的批量导出数据功能,这里需要导出时,按照模板文件的字段导出。

现有模板字段:

实现方式:springboot+easyexcel

一、导入依赖

<!--lombok-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

<!--操作excel工具包-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.0.5</version>
</dependency>

二、根据excel表头创建对应的实体类Pojo

ExcelTitile实体类

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

@Data
public class ExcelTitle {

    @ExcelProperty(value="事件名称", index=0)
    private String eventName;

    @ExcelProperty(value="需求负责人", index=1)
    private String prdManager;

    @ExcelProperty(value="技术负责人", index=2)
    private String techManager;

    @ExcelProperty(value="文档链接", index=3)
    private String prdDocs;

    @ExcelProperty(value="数据链接", index=4)
    private String statsDocs;

    @ExcelProperty(value="统计口径", index=5)
    private String reportCaliber;

这里采用了@ExcelProperty的注解,其中value表示列名,index表示列名的索引值。@Data 注解的主要作用是提高代码的简洁,使用这个注解可以省去代码中大量的get()、 set()、 toString()等方法;

三、Controller类接收请求

@RequestMapping(value = "/bulkOutput", method = RequestMethod.GET)
    public ResultBean bulkOutput(HttpServletResponse response) {

        // 重要! 设置返回格式是excel形式
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        // 设置编码格式
        response.setCharacterEncoding("utf-8");
        // 设置URLEncoder.encode 防止中文乱码
        String fileName = null;
        try {
            fileName = URLEncoder.encode("数据批量导出", "UTF-8").replaceAll("\\+", "%20");
        // 设置响应头
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");

        List<ExcelTitle> bulkOutputData = wildEventService.getBulkOutputData();

        // 模板文件保存在springboot项目的resources/static下
        Resource resource = new ClassPathResource("static/数据批量导出模板.xlsx");

        ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream())
                                           .withTemplate(resource.getInputStream()) // 利用模板的输出流
                                           .build();
        // 写入模板文件的第一个sheet 索引0    
        WriteSheet writeSheet = EasyExcel.writerSheet(0).build();

        // 将数据写入到模板文件的对应sheet中
        excelWriter.write(bulkOutputData, writeSheet);
        excelWriter.finish();
        } catch (UnsupportedEncodingException e) {
            return ResultBean.errorService(e.getMessage());
        } catch (IOException e) {
            return ResultBean.errorService(e.getMessage());
        }
        return ResultBean.success("数据导出成功!");
    }

上述代码中,首先对response进行了设置,设置了返回类型,响应头,以及导出下载时的文件名称。接下来,利用Resource resource = new ClassPathResource("static/数据批量导出模板.xlsx"); 读取项目下的模板文件,并调用easyexcel的写入方法。这里write(response.getOutputStream())表示写入response的输出流,即将文件返回给客户端进行下载。withTemplate(resource.getInputStream())表示读取模板文件进行写入。最后调用 WriteSheet writeSheet = EasyExcel.writerSheet(0).build();将苏剧写入模板文件的第一个sheet中(索引从0开始)。

四、Service层获取待写入数据

这里为了简易期间,构造一些数据如下

import com.example.demo.Pojo.ExcelTitle;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class BulkOutputService {

    public List<ExcelTitle> getOutputData()
    {

        List<ExcelTitle> resultList = new ArrayList<>();

        // 第一行数据
        ExcelTitle t1 = new ExcelTitle();
        t1.setEventName("测试数据1");
        t1.setTechManager("张三");
        t1.setPrdManager("张三");
        t1.setPrdDocs("http://prdDocs.com");
        t1.setStatsDocs("http://statsDocs.com");
        t1.setReportCaliber("reportCaliber");

        // 第二行数据
        ExcelTitle t2 = new ExcelTitle();
        t2.setEventName("测试数据2");
        t2.setTechManager("李四");
        t2.setPrdManager("李四");
        t2.setPrdDocs("http://prdDocs.com");
        t2.setStatsDocs("http://statsDocs.com");
        t2.setReportCaliber("reportCaliber");

        resultList.add(t1);
        resultList.add(t2);

        return resultList;
    }

}

这里构造了两行简易数据,实际场景中只需要根据自己的数据做替换就可以了。

有了上述步骤,就可以接下来执行代码查看导出效果了。

效果展示

启动springboot程序,在浏览器中输入请求: http://localhost:8080/bulkOutput, 可以发现返回的excel文件被浏览器下载,打开后内容如下:

可以看到,数据根据模板格式写入了文件,并以excel的形式导出。初步完成了我们预定的场景。

总结

本次实现的功能是利用现有模板,将数据批量导出成excel,借助于easyexcel来实现操作excel的功能。最重要的功能模块是Controller里的内容。

需要注意

  1. 需要加上response的响应类型和响应头来使得返回请求返回excel文件

  2. 写到Web流时,这里的ContentType和CharacterEncoding不要乱码,否则很容易乱码或者文件损坏

  3. 使用EasyExcel.withTemplate引入模板的输入流

使用easyexcel定制Excel模板导出(Jar包导出无法读取Excel模板解决方案) 使用easyexcel定制Excel模板导出(Jar包导出无法读取Excel模板解决方案) 当在项目中使用阿里的easyexcel读取固定模板添加所需数据时,将excel模板放在resources目录下,开发环境可以正常读取模板,但部署需将项目打包成jar部署在服务器容器中时,便会报找不到模板,网上没找到相应的解决办法,参考类似问题解决办法最后得以解决。 解决:使用 java - jar 包名 在服务器上运行。此时文件为打包文件,所以不能通过路径获取到文件。spring boot 中的文件只能通过流来进行 阅读详情

相关推荐

Easyexcel(4-模板文件)

Easyexcel模板导出,对象导出,map导出,对象嵌套对象导出,对象嵌套list列表导出

peng_gx的博客 2016

使用EasyExcel模版导出

使用EasyExcel模版导出

weixin_45735511的博客 1万+

【Easyexcel】使用easyexcel导出带有固定表头的excel代码,并且有合并单元格操作

另外,为了使导出的Excel列宽自适应,我们设置了sheet.setAutoWidth(Boolean.TRUE),而在设置表格样式时,我们使用了createTableStyle()方法来生成TableStyle实例。在上述代码中,我们使用EasyExcel创建了一个ExcelWriter对象,然后创建了一个Sheet对象和表头数据和合并单元格数据,最后设置表头和合并单元格,生成了随机的10行数据并进行了导出。在创建Range对象时,我们传入的参数分别为(起始行,起始列,结束行,结束列)。

后端研发工程师Marion的博客 1839

SpringBoot整合easyexcel实现Excel的导出

在一般不管大的或者小的系统中,各家的产品都一样,闲的无聊的时候都喜欢让我们这些程序员导出一些数据出来供他观赏,非说这是必须需求,非做不可,那么我们就只能苦逼的哼哧哼哧的写bug喽。 之前使用POI导出excel需要自己先去创建excel文件,还要创建sheet,写表头,操作起来确实很麻烦,针对产品这种随心而欲的需求我们能不能快速的做完这样一个产品看起来挺简单的功能。 基于这样一个快速开发的场景...

一个程序员的成长 2万+

Spring Boot整合 EasyExcel 实现复杂 Excel 表格的导入与导出功能

EasyExcel 是阿里巴巴开源的一款基于 Java 的简单、快速、强大的 Excel 处理工具。在实际应用中,Excel 的导入与导出是常见的需求,而 EasyExcel 提供了简便的 API,使得这些操作变得非常容易。本文将介绍如何在 Spring Boot 项目中整合 EasyExcel,实现复杂 Excel 表格的导入与导出功能。

weixin_65175398的博客 4788

easyExcel - 按模板导出

之前有介绍过如何使用easyExcel,以及写了两个入门的demo,这两个demo能应付在开发中大多数的导入和导出需求,不过有时候面对一些复杂的表格,就会有点不够用,该篇是如何使用模板实现导出功能在实际的开发过程中可能会遇到需要导出一些带有复杂表头的表格,比如:工资表和考勤表或者是类似于发票、报价单这种具有模板性质的表格如果仅仅通过代码去实现是比较困难的,通常情况下会写一个模板excel,模板中的需要变动的数据用占位符替代,导出的文件按照该模板填充数据easyexcel① 读取模板文件。

xhmico的博客 2万+

基于EasyExcel的数据导入导出(复制可用)

EasyExcel 复制即可用

m0_56726104的博客 2万+

SpringBoot导出Excel的四种方式

近期接到了一个小需求,要将系统中的数据导出为Excel,且能将Excel数据导入到系统。对于大多数研发人员来说,这算是一个最基本的操作了。但是……我居然有点方!好多年没有实操这种基础的功能了。我对于excel导入导出的印象还停留在才入行时的工作经历。配模板,建对应的实体类,写输入输出流…代码繁琐而低效,且不能很好的支持Excel中的格式调整、行列合并等各种复杂操作,每次回想起这些,我都会有一种深深的无力感。然,研发技术的更新换代堪称日新月异。这么多年过去了,也该有更优雅的方式实现这些功能了吧!

m0_60681411的博客 1万+

springboot easyexcel 导出excel案例及文件无法打开

文章目录背景介绍easyexcel 表头及数据表头简单合并web项目导出方式实践出真知遇到的问题前端联调时excel无法打开   导出数据是后端经典模块之一,从原有的poi到现在的easyexcel等等都在努力的帮助开发们缩小数据与excel之间的鸿沟。但是在简单的导出也会遇到一些有的没的问题,特地写个文章记录下~ 背景介绍 一般导出流程图如下: #mermaid-svg-odyQGCix6hzmT70n .label{font-family:'trebuchet ms', verdan

huhui806的博客 1万+

在F1C100s上跑GBA游戏:手把手教你用Buildroot配置SDL和移植gpsp模拟器

本文详细介绍了在全志F1C100s开发板上配置Buildroot、移植SDL库和gpsp模拟器的完整流程,帮助开发者实现在ARM9平台上流畅运行GBA游戏。内容涵盖环境配置、交叉编译、常见问题解决及性能优化技巧,特别针对'段错误'和'无声音'等典型问题提供实用解决方案。

weixin_42566424的博客 398

告别WSL:Ollama Windows原生部署与GPU加速实战

本文详细介绍了Ollama在Windows系统上的原生部署与GPU加速实战指南。告别WSL,通过官方原生应用直接调用NVIDIA和AMD显卡,实现更高效的本地大模型运行。文章涵盖系统准备、三步安装、模型拉取运行、GPU性能优化及高级配置,为Windows AI开发者提供一站式解决方案。

prometheus9mon的博客 534

SpringBoot整合EasyExcel模板导出Excel

创建SpringBoot项目 导入EasyExcel.jar <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.6</version> </dependency> 创建Excel模板 实体类 public class FillData { private S

RedLitchi is Blog 5314

工作:三菱PLC与伺服之CC-Link IE Field Network通讯应用

CC-LINK-IE

好记性不如烂笔头 2万+

SpringBoot整合EasyExcel实现Excel表格的导出功能

在后端管理系统的开发中,经常有需要,有些前端表格组件可以直接做到,但是不够灵活。因为前端拿到的数据始终是经过处理的,如果想拿到原版数据,必须后端处理。如下图:除了使用Apache POI包,还有没有其他的选择?当然有! 这里我给大家推荐一款非常简单且容易上手的开源组件:首先放出官网地址,欢迎大家star(目前已经24K): EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。64M内存20秒读取75M(46W行25列)的Excel(

summon的博客 3370

别再到处找了!2024最新银河麒麟V10全版本(飞腾/龙芯/兆芯)官方下载与安装保姆级教程

本文提供2024年银河麒麟V10操作系统全版本(飞腾/龙芯/兆芯)的官方下载与安装保姆级教程,涵盖版本选择、镜像获取、启动盘制作及安装优化等关键步骤,助您高效部署国产操作系统。

weixin_26846533的博客 485

使用 MATLAB/Simulink 对一个开关磁阻电机进行建模

*开关磁阻电机(Switched Reluctance Motor, SRM)**是一种新型的无刷电机,以其简单的机械结构、宽广的调速范围和较高的效率在工业应用中得到了广泛关注。SRM的独特之处在于其定子和转子均为凸极结构,并且通过改变绕组电流的方向来实现转矩的产生和控制。本教程将详细介绍如何使用对一个开关磁阻电机进行建模,并探讨其基本控制策略,特别是针对双凸极结构的SRM。本文介绍了如何使用构建一个开关磁阻电机的双凸极结构模型,并探讨了其基本控制策略。

amy_mhd的博客 203

Springboot 整合 easyexcel导入导出excel

1. 引入核心依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.6</version> ...

念念不忘,必有回响 1万+

SpringBoot 教程:SpringBoot多种方式实现静态Html页面跳转

本教程介绍了 Spring Boot 中实现静态 Html 页面跳转的常用方法,包括重定向跳转、直接返回 ModelAndView 对象以及使用 Thymeleaf 模板引擎。如果你的项目中使用了 Thymeleaf 模板引擎,那么可以利用它来实现静态页面的跳转。对于静态的 Html 页面,我们可以使用多种方式来实现跳转功能。重定向是一种常见的页面跳转方式,它通过发送 HTTP 重定向响应头来告知浏览器跳转到指定的页面。在 Spring Boot 中,我们可以将视图名称设置为静态页面的路径。

2301_79325657的博客 2448

easyexcel 根据模板导出_SpringBoot整合easyexcel

什么是easyexcel 什么是easyexcel,easyexcel是阿里开发的一款简易的excel导出的工具,在一般的后台管理中都少不了excel的导出。以前一般用的都是poi做导出的功能,但是这种原生的excel导出excel的功能是在太麻烦了,如果有架构师帮你封装好给你用那还好点。但是这种一般都是自己去整合,而且poi导出excel的功能会有很多bug,就比如最常见的oom异常,...

weixin_42560530的博客 4423

Qt代码-软件商店

ui->statusBar->showMessage(QString("%1 已卸载").arg(app["name"].toString()));ui->statusBar->showMessage(QString("开始下载 %1...").arg(app["name"].toString()));QString("%1 已下载完成,是否立即安装?ui->statusBar->showMessage(QString("%1 下载完成").arg(app["name"].toString()));

寒寒豆豆软件公司的博客 111

TPAMI 2025 | 从缺失碎片到杰作:基于上下文自适应扩散的图像修复

图像修复是一项具有挑战性的任务,尤其是要确保生成的内容与图像的现有部分无缝融合。尽管最近的扩散模型展现出了潜力,但它们在保持已知区域和未知(缺失)区域之间的连贯性方面常常遇到困难。这个问题源于扩散过程中缺乏明确的空间和语义对齐,导致生成的内容无法与原始图像平滑融合。此外,扩散模型通常依赖全局学习分布,而非局部特征,这使得生成的图像部分与现有图像部分之间存在不一致。在这项工作中,作者提出了ConFill,这是一个新颖的框架,引入了上下文自适应差异(CAD)模型,以确保在整个扩散过程中,已知区域和未知区域的中间

小白学视觉 240

2020最简单的java导出excel,使用easyexcel和准备好的excel模板进行数据填充导出

1.添加依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.1.6</version> <exclusions> <exclusion>

to_study的博客 7156

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

EasyExcel实现excel导出(多sheet)

EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。 他能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能

asdksd的博客 2万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

上一篇: 阿里资深专家打造从零开始学架构,含阿里内部技术栈PPT、PFD实战
下一篇: java实现二叉搜索树功能
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值