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

news2024/10/7 4:33:46

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

  • 一、导入依赖
  • 二、根据excel表头创建对应的实体类Pojo
  • 三、Controller类接收请求
  • 四、Service层获取待写入数据
  • 五、效果展示
  • 六、总结

一、导入依赖

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

话费电费燃气费94折充值,加v: sz08111,长期有效

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

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表示列名的索引值。

三、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里的内容。

需要注意

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/841479.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DevOps在项目管理中的魔法:简化与深化

什么是DevOps&#xff1f; 定义与核心思想 DevOps, 这个名词&#xff0c;在技术领域中饱受瞩目。但它到底是什么&#xff1f;首先&#xff0c;DevOps并不仅仅是一个技术或者工具&#xff0c;它首先是一种文化&#xff0c;一种思想。DevOps是Development&#xff08;开发&#…

SQL 数据科学:了解和利用联接

推荐&#xff1a;使用 NSDT场景编辑器助你快速搭建可编辑的3D应用场景 什么是 SQL 中的连接&#xff1f; SQL 联接允许您基于公共列合并来自多个数据库表的数据。这样&#xff0c;您就可以将信息合并在一起&#xff0c;并在相关数据集之间创建有意义的连接。 SQL 中的连接类型…

macOS下Django环境搭建-docker运行Django

1. macOS升级pip /Library/Developer/CommandLineTools/usr/bin/python3 -m pip install --upgrade pip 2. 卸载Python3.9.5版本 $ sudo rm -rf /usr/local/bin/python3 $ sudo rm -rf /usr/local/bin/pip3 $ sudo rm -rf /Library/Frameworks/Python.framework 3. 安装P…

【Linux操作系统】Vim:提升你的编辑效率

Vim是一款功能强大的文本编辑器&#xff0c;它具有高度可定制性和灵活性&#xff0c;可以帮助程序员和文本编辑者提高编辑效率。本文将介绍Vim的基本使用方法、常用功能和一些实用技巧。 文章目录 1. Vim的基本使用方法&#xff1a;2. 常用功能&#xff1a;2.1 文件操作&#…

Linux发行版分类与安装选择分析

1、引言 我们经常接触Linux&#xff0c;但是很多初学者往往面对众多的发行版不知所措。Ubuntu、CnetOS、Fedora等等。Linux众多的发行版让人眼花缭乱&#xff0c;本篇就来梳理一下目前Linux发行版的状况&#xff0c;让大家了解一个整体情况&#xff0c;理清不同版本的关系。 …

安全杂记 - 复现nodejs沙箱绕过

目录 一. 配置环境1.下载nodejs2.nodejs配置3.报错解决方法 二. nodej沙箱绕过1. vm模块2.使用this或引用类型来进行沙箱绕过 一. 配置环境 1.下载nodejs 官网&#xff1a;https://nodejs.org/en2.nodejs配置 安装nodejs的msi文件&#xff0c;默认配置一直下一步即可&#x…

【linux源码学习】【实验篇】使用bochs运行linux0.11系统(搭建一个自己的工作站)

目录 背景资源获取bochs环境搭建windowsbochs环境搭建linux声明 背景 最近看赵炯老师的《linux内核完全注释》&#xff0c;然后在最后一个习题里面看到使用bochs跑一下0.11的内核代码&#xff0c;本来觉得很难&#xff0c;但是如果做过一遍就会发现其实很简单&#xff0c;这个…

ld加上-static -lc参数报错`ld: cannot find -lc`处理方法

cat /etc/redhat-release看到操作系统是CentOS Linux release 7.6.1810&#xff0c;uname -r看到内核版本是3.10.0-957.el7.x86_64&#xff0c;as --version看到as的版本是2.27-34.base.el7&#xff0c;ld --version看到ld的版本是2.27-34.base.el7。 absCallWithStart.s里边…

Crescent QuickPak Crack

Crescent QuickPak Crack Crescent QuickPak是一个32位ActiveX组件的综合集合&#xff0c;用于使用Visual Basic开发应用程序&#xff0c;这将减少开发时间并提高生产力。Crescent QuickPak包含Internet功能&#xff0c;用于打开、读取和解析IIS日志文件&#xff0c;将日志文件…

Spring Boot如何整合mybatis

文章目录 1. 相关配置和代码2. 整合原理2.1 springboot自动配置2.2 MybatisAutoConfiguration2.3 debug过程2.3.1 AutoConfiguredMapperScannerRegistrar2.3.2 MapperScannerConfigurer2.3.4 创建MapperFactoryBean2.3.5 创建MybatisAutoConfiguration2.3.6 创建sqlSessionFact…

无涯教程-Perl - if...elsif...else语句函数

if 语句后可以跟可选的 elsif ... else 语句&#xff0c;这对于使用单个if ... elsif语句测试各种条件非常有用。 if...elsif...else - 语法 Perl编程语言中的 if ... elsif...else语句的语法是- if(boolean_expression 1) {# Executes when the boolean expression 1 is tr…

自然语言处理文本分割[Text segmentation]:PoNet算法使用多粒度Pooling结构替代attention的网络

NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等 专栏详细介绍:NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型…

基于react-native的简单消息确认框showModel

基于react-native的简单消息确认框showModel 效果示例图组件代码ShowModel/index.jsx使用案例device.js安装线性渐变色 效果示例图 组件代码ShowModel/index.jsx import React, {forwardRef, useImperativeHandle, useState} from react; import {View,Text,Modal,TouchableOp…

恒盛策略:15亿成立地产公司?华为紧急回应!10倍大牛股闪崩

今天上午A股商场和港股整体低位震动&#xff0c;但走势整体平稳&#xff0c;动摇不大。 A股商场方面&#xff0c;TMT赛道股走强&#xff0c;近期火热的券商板块则现分解&#xff0c;昨夜发布半年报的公司今天上午股价也分解明显。 港股商场&#xff0c;大都股票动摇不大&#…

【数据结构入门指南】单链表

概述&#xff1a; 由于顺序表插入和删除元素需要移动大量数据&#xff0c;导致运行效率下降。因此引入了另一种数据结构 —— 链表。链表又分为单链表和双链表。单链表结构简单&#xff0c;一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构&#xff0c;如哈希桶、…

Windows下安装Scala(以Scala 2.11.12为例)

Windows下安装Scala&#xff08;以Scala 2.11.12为例&#xff09; 一、Scala2.11.12官网下载二、Scala2.11.12网盘下载三、Scala各版本下载地址四、Scala安装4.1、点击 scala-2.11.12.msi 文件安装4.2、设置环境变量 %SCALA_HOME%4.3、环境变量Path添加条目%SCALA_HOME%\bin 四…

安卓读取,添加,更新,删除联系人,读取短信

目录 读取联系人 添加联系人 更新联系人 删除联系人 读取短信 读取联系人 安卓可以通过contentResolver来读取联系人表&#xff0c;联系人表的Uri信息是&#xff1a;content://com.android.contacts/data/phones 从而输出联系人信息&#xff0c; 需要相关权限&#xff1a…

如何选择最适合您的Excel处理库?

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 引言 GcExcel和POI是两个应用于处理Excel文件的技术库。为了帮助开发者更好地了解它们…

Wisej.NET Crack,Wisej.NET的核心功能

Wisej.NET Crack&#xff0c;Wisej.NET的核心功能 Wisej.NET是一个跨平台的web框架&#xff0c;用于使用.NET和C#/VB.NET而不是HTML和JavaScript构建现代HTML5应用程序。它包含创建任务关键型web应用程序所需的一切&#xff0c;包括UI组件、会话处理、状态管理和后端集成。借助…

【C语言学习——————预处理3000字讲解】

欢迎阅读新一期的c语言学习模块————预处理 ✒️个人主页&#xff1a;-_Joker_- &#x1f3f7;️专栏&#xff1a;C语言 &#x1f4dc;代码仓库&#xff1a;c_code &#x1f339;&#x1f339;欢迎大佬们的阅读和三连关注&#xff0c;顺着评论回访&#x1f339;&#x1f339…