iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot+EasyPoi实现excel导出功能
  • 848
分享到

SpringBoot+EasyPoi实现excel导出功能

2024-04-02 19:04:59 848人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

在实际项目开发中,对于excel的导入导出还是很常见的需求,比如说将数据根据模板批量导入到数据库中,以及将数据库中的数据批量导出陈Excel的形式 现有需求: 根据检索条件查询列表并

在实际项目开发中,对于excel的导入导出还是很常见的需求,比如说将数据根据模板批量导入到数据库中,以及将数据库中的数据批量导出陈Excel的形式

现有需求: 根据检索条件查询列表并将结果导出到excel

Easypoi文档:https://easypoi.mydoc.io/#text_186900

EasyPoi的主要特点

1.设计精巧,使用简单
2.接口丰富,扩展简单
3.默认值多,write less do more
4.spring mvc支持,WEB导出可以简单明了

实现过程

1.创建一个Spring Boot项目

快速生成链接:start.spring.io

在这里插入图片描述

2.引入EasyPoi的pom依赖


<!--EasyPoi导入导出-->
<dependency>
   <groupId>cn.afterturn</groupId>
   <artifactId>easypoi-base</artifactId>
   <version>4.3.0</version>
</dependency>
<dependency>
   <groupId>cn.afterturn</groupId>
   <artifactId>easypoi-web</artifactId>
   <version>4.3.0</version>
</dependency>
<dependency>
   <groupId>cn.afterturn</groupId>
   <artifactId>easypoi-annotation</artifactId>
   <version>4.3.0</version>
</dependency>
  • easypoi-base 导入导出的工具包,可以完成Excel导出,导入,Word的导出,Excel的导出功能
  • easypoi-web 耦合了spring-mvc 基于AbstractView,极大的简化spring-mvc下的导出功能
  • easypoi-annotation 基础注解包,作用与实体对象上,拆分后方便Maven多工程的依赖管理

sax 导入使用xercesImpl这个包(这个包可能造成奇怪的问题哈),word导出使用poi-scratchpad,都作为可选包了

pom.xml中的所有依赖:


<dependencies>
     <!-- 导入web支持:springMVC开发支持,Servlet相关的程序 -->
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
     </dependency>

     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-devtools</artifactId>
         <scope>runtime</scope>
         <optional>true</optional>
     </dependency>
     <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
         <optional>true</optional>
     </dependency>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
     </dependency>
     <!-- mybatis相关的依赖 -->
     <!--mybatis-plus自动的维护了mybatis以及mybatis-spring的依赖,
     在SpringBoot中这三者不能同时的出现,避免版本的冲突,表示:跳进过这个坑-->
     <!--mybatis-plus-->
     <dependency>
         <groupId>com.baomidou</groupId>
         <artifactId>mybatis-plus-boot-starter</artifactId>
         <version>3.4.3</version>
     </dependency>
     <!--Mysql驱动-->
     <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <scope>runtime</scope>
     </dependency>
     <!-- alibaba的druid数据库连接池 -->
     <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>druid</artifactId>
         <version>1.1.20</version>
     </dependency>
     <!-- alibaba的druid数据库连接池 -->
     <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>druid-spring-boot-starter</artifactId>
         <version>1.1.20</version>
     </dependency>
     <!--swagger2依赖-->
     <dependency>
         <groupId>io.springfox</groupId>
         <artifactId>springfox-swagger2</artifactId>
         <version>2.9.2</version>
         <!--排除自身的依赖1.5.20版本-->
         <exclusions>
             <exclusion>
                 <groupId>io.swagger</groupId>
                 <artifactId>swagger-models</artifactId>
             </exclusion>
         </exclusions>
     </dependency>
     <dependency>
         <groupId>io.springfox</groupId>
         <artifactId>springfox-swagger-ui</artifactId>
         <version>2.9.2</version>
     </dependency>
     <!--此版本解决 example="" 造成的 空字符串""无法转成Number 问题-->
     <dependency>
         <groupId>io.swagger</groupId>
         <artifactId>swagger-models</artifactId>
         <version>1.5.21</version>
     </dependency>
     <!--EasyPoi导入导出-->
     <dependency>
         <groupId>cn.afterturn</groupId>
         <artifactId>easypoi-base</artifactId>
         <version>4.3.0</version>
     </dependency>
     <dependency>
         <groupId>cn.afterturn</groupId>
         <artifactId>easypoi-web</artifactId>
         <version>4.3.0</version>
     </dependency>
     <dependency>
         <groupId>cn.afterturn</groupId>
         <artifactId>easypoi-annotation</artifactId>
         <version>4.3.0</version>
     </dependency>

     <!--fastJSON-->
     <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>fastjson</artifactId>
         <version>1.2.71</version>
     </dependency>
 </dependencies>

3.编写excel工具类


package com.example.easypoiexceldemo.utils;

import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.BeanUtils;

import javax.servlet.ServletOutputStream;
import javax.servlet.Http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.text.SimpleDateFORMat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;


public class ExcelUtils {

    
    public static void exportExcel(HttpServletResponse response, String fileName, Collection<?> list, Class<?> pojoClass) throws IOException {
        if (StringUtils.isBlank(fileName)) {
            //当前日期
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            fileName = df.format(new Date());
        }
        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(fileName, fileName, ExcelType.HSSF), pojoClass, list);
        response.setCharacterEncoding("UTF-8");
        response.setHeader("content-Type", "application/vnd.ms-excel");
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xls");
        ServletOutputStream out = response.getOutputStream();
        workbook.write(out);
        out.flush();
    }

    
    public static void exportExcelToTarget(HttpServletResponse response, String fileName, Collection<?> sourceList, Class<?> targetClass) throws Exception {
        List targetList = new ArrayList<>(sourceList.size());
        for (Object source : sourceList) {
            Object target = targetClass.newInstance();
            BeanUtils.copyProperties(source, target);
            targetList.add(target);
        }
        exportExcel(response, fileName, targetList, targetClass);
    }


    
    public static void exportExcel(HttpServletResponse response, String title, String sheetName, String fileName, Collection<?> list, Class<?> pojoClass) throws IOException {
        if (StringUtils.isBlank(fileName)) {
            //当前日期
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            fileName = df.format(new Date());
        }
        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(title, sheetName, ExcelType.HSSF), pojoClass, list);
        response.setCharacterEncoding("UTF-8");
        response.setHeader("content-Type", "application/vnd.ms-excel");
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8") + ".xls");
        ServletOutputStream out = response.getOutputStream();
        workbook.write(out);
        out.flush();
    }
}

4.在实体类上加注解@Excel

我这边使用了lombok。getter setter和构造方法通过注解 @Data @AllArgsConstructor进行添加,不使用lombok也可手动添加。

要导出的数据可在实体类对应属性上方加**@Excel()注解**。可定义导出列的名称、宽度,以及性别可区分化(一般数据库中存储的性别为1和2),日期格式化等等。


package com.example.easypoiexceldemo.excel;

import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;

import java.util.Date;


@Data
public class ProductExcel {

    
    @Excel(name = "商品id")
    private Integer product_id;
    
    @Excel(name="商品标题")
    private String title;
    
    @Excel(name="商品副标题")
    private String sub_title;
    
    @Excel(name="商品售价")
    private Double sale_price;
    
    @Excel(name="创建者")
    private Integer create_by;
    
    @Excel(name="创建时间", format = "yyyy-MM-dd")
    private Date create_time;
    
    @Excel(name="修改时间", format = "yyyy-MM-dd")
    private Date update_time;
    
    @Excel(name="修改者id")
    private Integer update_by;
}

@Excel 作用到filed上面,是对Excel一列的一个描述

@Excel 的属性介绍:

在这里插入图片描述
在这里插入图片描述

5.Controller



    @GetMapping("/excel")
    @apiOperation("根据检索条件查询列表,导出excel")
    public void export( HttpServletResponse response) throws IOException {
        //根据条件检索列表
        QueryWrapper<Product> queryWrapper = new QueryWrapper();
        //根据条件检索商品列表
        List<Map<String, Object>> list = productService.selectList(queryWrapper);
        //将List<Map<String, Object>>结果集转换成List<ProductExcel>
        List<ProductExcel> productList = MapToEntity.setList(list,ProductExcel.class);
        //导出excel
        ExcelUtils.exportExcel(response,null,productList, ProductExcel.class);
    }

setList方法为工具类,用于将List<Map<String, Object>>结果集转换成List

MapToEntity工具类:


package com.example.easypoiexceldemo.utils;

import org.apache.commons.lang3.StringUtils;

import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;


public class MapToEntity {

    
    public static <T> List<T> setList(final List<Map<String, Object>> srcList, Class<T> clazz) {
        List<T> list = new ArrayList<>();
        for (int i=0;i<srcList.size();i++){
            try {
                T t = clazz.newInstance();
                Field[] fields = t.getClass().getDeclaredFields();
                for (Field field : fields) {
                    if (!"serialVersionUID".equals(field.getName())) {
                        //设置对象的访问权限,保证对private的属性的访问
                        field.setAccessible(true);
                        //读取配置转换字段名,并从map中取出数据
                        Object v = srcList.get(i).get(field.getName());
                        field.set(t, convert(v, field.getType()));
                    }
                }
                list.add(t);
            } catch (Exception ex) {
                ex.toString();
            }

        };
        return list;
    }

    
    private static <T> T convert(Object obj, Class<T> type) throws ParseException {
        if (obj != null && StringUtils.isNotBlank(obj.toString())) {
            if (type.equals(String.class)) {
                return (T) obj.toString();
            } else if (type.equals(BigDecimal.class)) {
                return (T) new BigDecimal(obj.toString());
            }else if(type.equals(Double.class)){
                return (T) Double.valueOf(obj.toString());
            }else if(type.equals(Integer.class)){
                return (T) Integer.valueOf(obj.toString());
            }else if(type.equals(Date.class)){
                if(obj!=null){
                    String timeStr = String.valueOf(obj);
                    String s[] = timeStr.split("T");
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    return (T) sdf.parse(s[0]+" "+s[1]);
                }else{
                    return null;
                }
            }
            else{
                //其他类型转换
                return (T) obj.toString();
            }

        }
        return null;
    }
}

6.启动项目,进行测试

项目启动成功后,在浏览器中输入 http://localhost:8083/product/excel,进行访问:

在这里插入图片描述

打开导出的excel文档:

在这里插入图片描述

到此这篇关于SpringBoot+EasyPoi实现excel导出的文章就介绍到这了,更多相关SpringBoot实现excel导出内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringBoot+EasyPoi实现excel导出功能

本文链接: https://www.lsjlt.com/news/135307.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot+EasyPoi实现excel导出功能
    在实际项目开发中,对于Excel的导入导出还是很常见的需求,比如说将数据根据模板批量导入到数据库中,以及将数据库中的数据批量导出陈Excel的形式 现有需求: 根据检索条件查询列表并...
    99+
    2024-04-02
  • SpringBoot+easypoi实现数据的Excel导出
    本文实例为大家分享了SpringBoot+easypoi实现数据的Excel导出的具体代码,供大家参考,具体内容如下 maven <dependency> ...
    99+
    2024-04-02
  • Easypoi轻松实现复杂excel文件导出功能
    之前做的excel文件导出都相对简单,用的都是公司自己封装的一些poi方法,导出内容都是表头+一行行的数据,但是这次需要导出的excel复杂度高了不少,自己用现有方法做比较麻烦,因此...
    99+
    2024-04-02
  • Easypoi如何实现复杂excel文件导出功能
    本篇内容介绍了“Easypoi如何实现复杂excel文件导出功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!之所以用Easypoi我是看中...
    99+
    2023-06-21
  • Java实现导出Excel功能
    文章参考《Qt5开发及实例(第4版)》陆文周 主编 一、建立Qt工程 1、选择类别 2、建立项目名称 3、选择Qt基类及修改名称 4、选择编译器(这边两个都选择,生成两个Deb...
    99+
    2024-04-02
  • elementUI+Springboot实现导出excel功能的全过程
    目录前言步骤依赖包element表格table引入包编写方法完整实例最终导出结果结语前言 在前面,我们其实已经完成了elementUI+springboot的导入功能springbo...
    99+
    2024-04-02
  • SpringBoot整合EasyExcel实现Excel表格导出功能
    目录栗子1.组件介绍2.配置文件SpringBoot项目pom.xml3.项目代码项目结构ExportController.javaMock.javaCitySheet.javaCo...
    99+
    2024-04-02
  • SpringBoot+Vue实现EasyPOI导入导出的方法详解
    目录前言一、为什么做导入导出二、什么是 EasyPOI三、项目简介项目需求效果图开发环境四、实战开发 核心源码前端页面后端核心实现五、项目源码小结前言 Hello~ ,前后端分离系列...
    99+
    2024-04-02
  • Vue如何实现导出Excel功能
    小编给大家分享一下Vue如何实现导出Excel功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1.前端主导流程:点击页面中导出按钮(注册点击事件)事件回调里面,发送请求后台数据对后台数据进行处理,完成想要的效果生成Exc...
    99+
    2023-06-20
  • Java如何实现导出Excel功能
    这篇文章将为大家详细讲解有关Java如何实现导出Excel功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。刚写了个导入Excel表格,现在来写个导出,其实形式都差不多,废话不多说,贴代码&...
    99+
    2023-06-21
  • JAVA怎么实现导出Excel功能
    Java可以通过使用Apache POI库来实现导出Excel功能。下面是一个简单的示例代码:```javaimport org.a...
    99+
    2023-10-08
    java
  • EasyExcel实现Excel文件导入导出功能
    一、EasyExcel简介 Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的fu...
    99+
    2023-09-15
    excel java Powered by 金山文档
  • C#使用NPOI实现Excel导入导出功能
    本文实例为大家分享了C#使用NPOI实现Excel导入导出的具体代码,供大家参考,具体内容如下 Excel导入 使用OpenFileDiolog控件和button结合,选择文件导入,...
    99+
    2024-04-02
  • Java中怎样实现导出Excel功能
    这篇文章将为大家详细讲解有关Java中怎样实现导出Excel功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用第三方库实现导出Excel业界有句话:不重复造轮子。 使用工具类可以减少日常繁琐的编码,减...
    99+
    2023-06-14
  • 《springboot中实现excel表格导出》
    《springboot中实现excel表格导出》 简介 在Spring Boot中,实现Excel表格导出的方式有很多种,以下是几种常见的方法: 使用Apache POI:Apache POI是一个开源的Java API,用于处理Micro...
    99+
    2023-08-23
    spring boot excel java
  • Springboot实现导入导出Excel的方法
    目录一、添加poi的maven依赖二、自定义注解(Excel属性标题、位置等)三、CustomExcelUtils编写四、定义导出实体类五、Controller层代码编写一、添加po...
    99+
    2024-04-02
  • 怎么用Vue代码实现导出Excel功能
    这篇“怎么用Vue代码实现导出Excel功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么用Vue代码实现导出Excel...
    99+
    2023-07-04
  • golang实现浏览器导出excel文件功能
    目录1.依赖包2.示例3.分析3.1先根据需求查询需要的list对象3.2新建文件,设置文件名,跟列名3.3设置标题单元格3.4设置内容单元格3.5流媒体返回web1.依赖包 imp...
    99+
    2024-04-02
  • C#中如何使用NPOI实现Excel导入导出功能
    本文小编为大家详细介绍“C#中如何使用NPOI实现Excel导入导出功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#中如何使用NPOI实现Excel导入导出功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-06-29
  • Spring Boot项目怎么实现Excel导入与导出功能
    本文小编为大家详细介绍“Spring Boot项目怎么实现Excel导入与导出功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring Boot项目怎么实现Excel导入与导出功能”文章能帮助大家解决疑惑,下面跟...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作