Springboot下使用easyExcel玩转Excel表的导出

Excel工具类以及OSS使用 1 maven依赖添加 <!-- easyExcel --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.8</version> </dependency> 阅读详情

1、Excel表格的导出:

1、搭建一个springboot项目:

https://blog.youkuaiyun.com/LemonSnm/article/details/87894940

 2、maven中加入EasyExcel所需包

        <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.1.6</version>
        </dependency>

2、模拟学生实体类Student

package com.lemon.entity;


import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;

/**
 * 学生类
 * @author lemon
 * @since 2020-05-26
 */
@ExcelIgnoreUnannotated()
public class Student {
    
    private Integer myId;

    @ExcelProperty(value = "学号",index = 0) //0 对应导出Excel表格的第一列
    private Integer id;

    @ExcelProperty(value = "姓名",index = 1)
    private String name;

    @ExcelProperty(value = "性别",index = 2)
    private String sex;

    @ExcelProperty(value = "班级",index = 3)
    private String grade;

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", grade='" + grade + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }


}

3、导出功能controller:

package com.lemon.controller;


import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.util.StringUtils;
import com.lemon.easyutils.EasyExcelListener;
import com.lemon.entity.Student;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.io.FileInputStream;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 测试controller
 * @author lemon
 * @since 2020/5/26 0026
 */
@Controller
@RequestMapping("/test")
public class TestController {

/**
 * 主页面
 * @author lemon
 * @since 2020/5/26 0026
 */
    @RequestMapping("/index")
    public String index(){
        return "/views/index";
    }

    /**
     * 导出
     * @author lemon
     * @since 2020/5/26 0026
     */
    @RequestMapping("/export")
    public void export(HttpServletRequest request, HttpServletResponse response) throws Exception {


        //模拟需要导出的数据
        List<Student> list = new ArrayList<Student>();
        Student student = new Student();
        student.setId(1);
        student.setName("1321");
        student.setSex("男");
        student.setGrade("一年级");
        for (int i = 0; i < 5; i++) {
            list.add(student);
        }

        //设置并导出
        // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");

        //设置文件名
        SimpleDateFormat fDate = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
        String fileName = "导出测试表" + fDate.format(new Date()) + ".xlsx";
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        EasyExcel.write(response.getOutputStream(), Student.class).sheet("sheet1").doWrite(list);
    }

}

4、导出功能的页面:

<html>
<head>
    <title>测试</title>
</head>

<body>
<button onclick="myExport()" >导出</button>
</body>
</html>

<script>

    function myExport() {
        window.location.href = "/test/export"
    }
</script>

5、测试:

输入http://localhost:8081/test/index

点击导出 选择导出位置:

 

一下为输出内容格式设置:

6、设置单元格格式为文本


import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;

import java.util.List;

/**
 * 设置单元格格式
 * @author lemon
 * @since 2020/8/11 0011
 */
public class EasyExcelRowWriteHandlerUtils implements CellWriteHandler {

    @Override
    public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer integer, Integer integer1, Boolean aBoolean) {

    }

    @Override
    public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer integer, Boolean aBoolean) {
        //设置单元格格式为文本
        Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
        CellStyle cellStyle = workbook.createCellStyle();
        DataFormat dataFormat = workbook.createDataFormat();
        cellStyle.setDataFormat(dataFormat.getFormat("@"));
        cell.setCellStyle(cellStyle);
        //设置0-30列为文本形式
        for (int i = 0; i < 30; i++) {
            writeSheetHolder.getSheet().setDefaultColumnStyle(i, cellStyle);
        }


    }

    @Override
    public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData, Cell cell, Head head, Integer integer, Boolean aBoolean) {

    }

    @Override
    public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<CellData> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {

    }
}

用法:

EasyExcelFactory.write(response.getOutputStream(),
Student.class).registerWriteHandler(new
EasyExcelRowWriteHandlerUtils()).sheet().doWrite(new ArrayList());

7、导出表格带下拉框


import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import org.apache.poi.ss.usermodel.DataValidation;
import org.apache.poi.ss.usermodel.DataValidationConstraint;
import org.apache.poi.ss.usermodel.DataValidationHelper;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xssf.usermodel.XSSFDataValidation;

import java.util.Map;

/**
 * 设置单元格下拉框
 * @author lemon
 * @since 2020/7/27
 */
public class EasyExcelSheetSelectUtils implements SheetWriteHandler {

    //第0列开始 设置某列的下拉内容
    private Map<Integer,String[]> mapDropDown;

    public EasyExcelSheetSelectUtils(Map<Integer, String[]> mapDropDown) {
        this.mapDropDown = mapDropDown;
    }

    @Override
    public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {

    }

    @Override
    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {

        Sheet sheet = writeSheetHolder.getSheet();
        ///开始设置下拉框 //设置下拉框
        DataValidationHelper helper = sheet.getDataValidationHelper();
        for (Map.Entry<Integer, String[]> entry : mapDropDown.entrySet()) {
            /***起始行、终止行、起始列、终止列**/
            CellRangeAddressList addressList = new CellRangeAddressList(1, 1000, entry.getKey(), entry.getKey());
            /***设置下拉框数据**/
            DataValidationConstraint constraint = helper.createExplicitListConstraint(entry.getValue());
            DataValidation dataValidation = helper.createValidation(constraint, addressList);
            /***处理Excel兼容性问题**/
            if (dataValidation instanceof XSSFDataValidation) {
                dataValidation.setSuppressDropDownArrow(true);
                dataValidation.setShowErrorBox(true);
            } else {
                dataValidation.setSuppressDropDownArrow(false);
            }
            sheet.addValidationData(dataValidation);
        }
    }
}

用法:

            //性别下拉框设置
            String[] sexStr = new String[]{"男","女"};
            //设置下拉框内容
            Map<Integer,String []> mapDropDown = new HashMap<>();
            //设置在第五列
            mapDropDown.put(5,sexStr);
            //设置在第7列
            mapDropDown.put(7,sexStr);

            EasyExcelFactory.write(response.getOutputStream(), Student.class).registerWriteHandler(new EasyExcelSheetSelectUtils(mapDropDown)).sheet().doWrite(new ArrayList());
 
            

 

 

 

SpringBoot利用SXSSFWorkbook导出带网络图片的Excel表格,并设置标题和正文的样式 阅读详情

相关推荐

【Excel】使用 SpringBoot 实现 Excel 文件的导入与导出

因为,这篇博文是在上一篇博文基础之上继续开发的。这两篇博文互有联系文件的导入就是文件的上传;文件的导出就是文件的下载。至于为什么是导入/导出Excel文件呢?因为Excel文件用的频率更多吧。顺便来复习下通过EasyExcel来操作Excel文件。...

m0_67401270的博客 4157

java-EasyExcel导出excel设置单元格为文本格式(含代码)

java-EasyExcel导出excel设置单元格为文本格式(含代码)

gorylee的博客 2万+

多场景easyExcel导出excel文件(一)

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

菜菜小菠菠的博客,专注于后端技术 6276

EasyExcel导出Excel设置单元格文本格式(亲测有效)

下面是一开始的代码, 是不生效的, 查了好多都是这么设置的, 我也是这么写的但是就是不生效, 然后查了资料好多也说是注册写处理器必须是一个, 不能是多个, 因为我的是注册两个写处理器, 然后我就去掉了一个处理, 但是TMD还是不生效, 后来查了资料, 试了好几次, 终于可以生效了, 下面的写法应该是2.0版本的写法, 因为我的是3.0+, 没有验证这个2.0+是否生效, 就不多说了.: 看下面代码吧, 重写下面任意两个其中的一个方法就可以了, 写入注册几个写处理器都是可以的, 然后就可以导出试一下了.

weixin_45131680的博客 3966

Springboot使用EasyExcel读写excel(详细)

文章目录Springboot使用EasyExcel读写Excel(超级详细) 本地读取 web上传 本地导出 web下载

yd的博客 1万+

SpringBoot整合EasyExcel实现Excel导入导出/上传下载至数据库

上一篇写了一个SpringBoot整合poi实现excel导入导出的,但是使用poi会有一些问题,这时阿里带着EasyExcel来了。 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用P

南城的博客 1万+

SpringBoot整合EasyExcel,Excel导入导出就靠它了

本文讲解了如何在SpringBoot项目中整合EasyExcel,实现Excel快捷导入导出,解析Excel导入导出的实现过程,提供了相关源码。

Designer 小郑的技术博客 1万+

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

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

weixin_65175398的博客 4789

SpringBoot整合easyexcel实现Excel的导出

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

一个程序员的成长 2万+

YOLO系列训练时出现loss出现nan值或者测试时P\R\map全部为0值的解决办法(GTX16xx系列显卡大坑)

YOLO系列训练时出现loss出现nan值或者测试时P\R\map全部为0值的解决办法(GTX16xx系列显卡大坑)

weixin_55249340的博客 3万+

AD936x Evaluation Software 详细配置

作者:ShownSun 工作室:时沿科技 文章目录AD936x Evaluation Software详细配置1 系统概述2 AD9361 Wireless Transceiver Evaluation Setup2.1 标签描述2.2 用户参数2.3详细配置3 AD936x RF Wizard3.1 标签描述3.2 用户参数3.3 详细配置4 AD936x Digital Filter Wizard4.1 标签描述4.1.1 时钟配置4.1.2 滤波器配置4.1.3 接收滤波器配置4.1.4 发射滤..

ShownSun博客 5195

SpringBoot中使用Easyexcel实现Excel导入导出功能(一)

excel表格的导入与导出,可以说是业务系统里比较常见的功能了,早些时候相信很多人都是使用POI实现excel的导入与导出功能,后来出现了easyexcel,从我自己的使用感受来说,我更喜欢使用easyexcel,除了封装的比较好外,最重要的是对超级大excel导入有了更好的方案,与POI相比,速度更快,占用内存更少。

凡夫编程 2万+

小红书爬取实战指南

以上方案仅供技术学习参考,请确保遵守目标网站的服务条款和相关法律法规。

monk all the way 6927

springboot整合EasyExcel导出excel表格

springboot整合EasyExcel实现导出excel表格,EasyExcel单元格样式设置,,EasyExcel单元格宽度设置,EasyExcel导出案例实战

qq_53604504的博客 2466

GIS小白也能看懂的实战:5步教你将ArcGIS里的等高线和水系完美导入CAD做规划图

本文详细介绍了如何将ArcGIS中的等高线和水系数据高效导入CAD,制作专业规划底图的5个关键步骤。从数据准备、ArcGIS处理到CAD优化,涵盖坐标系设置、数据裁剪、格式转换等实用技巧,特别适合设计规划领域的新手快速掌握GIS与CAD协同工作流程。

weixin_27966471的博客 426

量化交易——量化选股(多因子选股)

就是用过去的股票的收益率对多因子进行回归,得到一个回归方程,然后再把最新的因子值代入回归方程得到一个对未来股票收益的预判,然后再以此为依据进行选股。的方法是建立在市场无效或弱有效的前提之下,随着使用多因子选股模型的投资者数量的不断增加,有的因子会逐渐失效,而。就是根据各个因子的大小对股票进行打分,然后按照一定的权重加权得到一个总分,根据总分再对股票进行筛选。另一方面,一些因子可能在过去的市场环境下比较有效,而随着市场风格的改变,这些。波动的影响,避免在市场极度狂热或悲观的情况下作出非理性的。

jiucaixiuyang的博客 1790

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

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

summon的博客 3370

Python 爬虫实战:从零搭建第一个爬虫程序(附完整代码)

本文介绍了Python网络爬虫的入门实战,以豆瓣Top250电影榜单为例,详细讲解爬虫开发全流程。内容包括爬虫基础原理、环境搭建、请求发送与响应处理、数据解析与保存等核心环节,并提供了可直接运行的完整代码示例。文章还分析了常见问题解决方案,并强调了爬虫开发的合规注意事项。通过本教程,读者可快速掌握Python爬虫的基本思路和实操技巧,为后续深入学习BeautifulSoup、XPath等进阶技术打下基础。

2503_91057718的博客 2316

Springboot整合easyExcel导入导出Excel

背景: 最近公司有个需求要求可以导入、导出excel,因此在此记录学习一下如何使用Springboot整合easyExcel; 需求: 数据库中有张user表,有个业务要求可以导入、导出“用户名单.xls”表 一、准备: 创建项目: 关于springboot项目如何创建这里不再赘述,放一张项目结构图: 1、导入easyexcel、mybatis、mysql依赖 <!-- easyexc...

Felix_ar 5543

【Matlab】从零开始掌握 MATLAB 安装激活:从环境搭建到问题解决全指南

打开 MATLAB,点击 “主页 - 设置路径”;点击 “添加文件夹”,选择自定义的工作文件夹,点击 “保存”,重启 MATLAB 生效。MATLAB R2024a 的安装与激活是开启 MATLAB 学习的第一步,也是构建稳定学习环境的基础。本文从安装前准备、分步操作、验证测试、问题解决到环境优化,完整覆盖了新手所需的所有知识点 —— 核心要点在于:确认系统兼容、使用合法授权、选择纯英文安装路径、完成功能验证。

unber的博客 596

服务部署之配置WSUS更新服务(基于Windows配置 Server 2022)

服务部署之配置WSUS更新服务(基于Windows配置 Server 2022)

2301_77192876的博客 2214

Spring Boot使用EasyExcel导入导出Excel

Spring Boot使用EasyExcel导入导出Excel

吴名氏的博客 14万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

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

efm32 入门.pdf

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

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SpringBoot使用EasyExcel导出Excel

源码 GitHub: https://github.com/291685399/springboot-learning/tree/master/springboot-easyexcel01 EasyExcel是什么? Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问...

断橋殘雪的博客 9017

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

huhui806的博客 1万+
上一篇: 前端 传来js数组 java后端这样接收
下一篇: 虚拟机启动错误0x80004002
LemonSnm
博客等级 码龄8年 66粉丝 168原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值