EasyExcel写出包含多个sheet页的Excel

EasyExcel导出包含多个sheet页的Excel

1.引入依赖

引入如下的EasyExcel的依赖,或直接下载jar包

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.1.1</version>
        </dependency>

2.构建数据封装bean(测试数据封装bean,除了类中的注解,其他信息无需过多关注)

2.1User类

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentStyle;
import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
import com.alibaba.excel.enums.poi.VerticalAlignmentEnum;

// @ColumnWidth作用:设置全局列宽为20
@ColumnWidth(20)
// @ContentStyle作用:设置全局内容居中
@ContentStyle(verticalAlignment = VerticalAlignmentEnum.CENTER, horizontalAlignment = HorizontalAlignmentEnum.CENTER)
public class User {

    // @ExcelProperty作用:设置列标题名称
    @ExcelProperty("姓名")
    private String name;
    @ExcelProperty("年龄")
    private int age;
    @ExcelProperty("身高")
    private int height;

    public User() {
    }

    public User(String name, int age, int height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", height=" + height +
                '}';
    }
}}
}", height=" + height +
                '}';
    }
}

2.2Department类

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentStyle;
import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
import com.alibaba.excel.enums.poi.VerticalAlignmentEnum;

// 设置全局列宽为20
@ColumnWidth(20)
// 设置全局内容居中
@ContentStyle(verticalAlignment = VerticalAlignmentEnum.CENTER, horizontalAlignment = HorizontalAlignmentEnum.CENTER)
public class Department {

    // @ExcelProperty作用:设置列标题名称
    @ExcelProperty({"部门基本属性", "部门名称"})
    private String deptName;

    @ExcelProperty({"部门基本属性", "部门Code"})
    private String deptCode;

    @ExcelProperty({"部门其他属性", "部门地址"})
    private String deptLocation;

    @ExcelProperty({"部门其他属性", "部门类型"})
    private String deptType;

    public Department() {
    }

    public Department(String deptName, String deptCode, String deptLocation, String deptType) {
        this.deptName = deptName;
        this.deptCode = deptCode;
        this.deptLocation = deptLocation;
        this.deptType = deptType;
    }

    public String getDeptName() {
        return deptName;
    }

    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }

    public String getDeptCode() {
        return deptCode;
    }

    public void setDeptCode(String deptCode) {
        this.deptCode = deptCode;
    }

    public String getDeptLocation() {
        return deptLocation;
    }

    public void setDeptLocation(String deptLocation) {
        this.deptLocation = deptLocation;
    }

    public String getDeptType() {
        return deptType;
    }

    public void setDeptType(String deptType) {
        this.deptType = deptType;
    }

    @Override
    public String toString() {
        return "Department{" +
                "deptName='" + deptName + '\'' +
                ", deptCode='" + deptCode + '\'' +
                ", deptLocation='" + deptLocation + '\'' +
                ", deptType='" + deptType + '\'' +
                '}';
    }
}   ", deptType='" + deptType + '\'' +
                '}';
    }
}

2.3Goods类

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentStyle;
import com.alibaba.excel.enums.poi.HorizontalAlignmentEnum;
import com.alibaba.excel.enums.poi.VerticalAlignmentEnum;

// 设置全局列宽为20
@ColumnWidth(20)
// 设置全局内容居中
@ContentStyle(verticalAlignment = VerticalAlignmentEnum.CENTER, horizontalAlignment = HorizontalAlignmentEnum.CENTER)
public class Goods {

    // @ExcelProperty作用:设置列标题名称
    @ExcelProperty({"零食基本属性", "名称"})
    private String goodsName;

    @ExcelProperty({"零食基本属性", "类型"})
    private String goodsType;

    @ExcelProperty({"相关时间", "生产日期"})
    private String goodsProduceDate;

    @ExcelProperty({"相关时间", "保质期"})
    private String goods2Date;

    @ExcelProperty({"工厂", "核心厂"})
    private String goodsFactoryAddressMain;

    @ExcelProperty({"工厂", "副厂"})
    private String goodsFactoryAddressChild;

    public Goods() {
    }

    public Goods(String goodsName, String goodsType, String goodsProduceDate, String goods2Date, String goodsFactoryAddressMain, String goodsFactoryAddressChild) {
        this.goodsName = goodsName;
        this.goodsType = goodsType;
        this.goodsProduceDate = goodsProduceDate;
        this.goods2Date = goods2Date;
        this.goodsFactoryAddressMain = goodsFactoryAddressMain;
        this.goodsFactoryAddressChild = goodsFactoryAddressChild;
    }

    public String getGoodsName() {
        return goodsName;
    }

    public void setGoodsName(String goodsName) {
        this.goodsName = goodsName;
    }

    public String getGoodsType() {
        return goodsType;
    }

    public void setGoodsType(String goodsType) {
        this.goodsType = goodsType;
    }

    public String getGoodsProduceDate() {
        return goodsProduceDate;
    }

    public void setGoodsProduceDate(String goodsProduceDate) {
        this.goodsProduceDate = goodsProduceDate;
    }

    public String getGoods2Date() {
        return goods2Date;
    }

    public void setGoods2Date(String goods2Date) {
        this.goods2Date = goods2Date;
    }

    public String getGoodsFactoryAddressMain() {
        return goodsFactoryAddressMain;
    }

    public void setGoodsFactoryAddressMain(String goodsFactoryAddressMain) {
        this.goodsFactoryAddressMain = goodsFactoryAddressMain;
    }

    public String getGoodsFactoryAddressChild() {
        return goodsFactoryAddressChild;
    }

    public void setGoodsFactoryAddressChild(String goodsFactoryAddressChild) {
        this.goodsFactoryAddressChild = goodsFactoryAddressChild;
    }

    @Override
    public String toString() {
        return "Goods{" +
                "goodsName='" + goodsName + '\'' +
                ", goodsType='" + goodsType + '\'' +
                ", goodsProduceDate='" + goodsProduceDate + '\'' +
                ", goods2Date='" + goods2Date + '\'' +
                ", goodsFactoryAddressMain='" + goodsFactoryAddressMain + '\'' +
                ", goodsFactoryAddressChild='" + goodsFactoryAddressChild + '\'' +
                '}';
    }
}

3.SheetInfoBean类

SheetInfoBean是用来封装sheet页相关信息的,使用bean将sheet页相关信息封装起来,可以使代码更加简洁优雅,可以根据实际需求,自行设计bean

import java.util.List;

public class SheetInfoBean {

    /**
     * sheet页名称
     */
    private String sheetName;

    /**
     * sheet标题bean
     */
    private Class<?> headClass;

    /**
     * sheet页数据
     */
    private List<?> dataList;

    public SheetInfoBean() {
    }

    public SheetInfoBean(String sheetName, Class<?> headClass, List<?> dataList) {
        this.sheetName = sheetName;
        this.headClass = headClass;
        this.dataList = dataList;
    }

    public String getSheetName() {
        return sheetName;
    }

    public void setSheetName(String sheetName) {
        this.sheetName = sheetName;
    }

    public Class<?> getHeadClass() {
        return headClass;
    }

    public void setHeadClass(Class<?> headClass) {
        this.headClass = headClass;
    }

    public List<?> getDataList() {
        return dataList;
    }

    public void setDataList(List<?> dataList) {
        this.dataList = dataList;
    }

    @Override
    public String toString() {
        return "SheetInfoBean{" +
                "sheetName='" + sheetName + '\'' +
                ", headClass=" + headClass +
                ", dataList=" + dataList +
                '}';
    }
}

4.测试

以下是测试代码

@Test
    void test04() {
        // 构造用户数据
        List<User> userList = new ArrayList<>();
        userList.add(new User("小红", 18, 168));
        userList.add(new User("小白", 17, 165));
        userList.add(new User("小蓝", 18, 169));

        // 构造部门数据
        List<Department> deptList = new ArrayList<>();
        deptList.add(new Department("java开发部", "DEV001", "南京", "总部"));
        deptList.add(new Department("测试部", "TEST001", "上海", "研发中心"));
        deptList.add(new Department("财务", "ECONOMY001", "南京", "总部"));

        // 构造产品数据
        List<Goods> goodsList = new ArrayList<>();
        goodsList.add(new Goods("小面包", "速食", "2023-07-21", "3天", "成都", "上海"));
        goodsList.add(new Goods("旺旺仙贝", "膨化食品", "2023-07-21", "3天", "仙贝中心", "山寨仙贝厂"));
        goodsList.add(new Goods("领克03", "汽车", "2023-07-21", "永久", "领克工厂", "领克副厂"));

        // 构造各个sheet页相关信息
        List<SheetInfoBean> sheetInfoList = new LinkedList<>();
        sheetInfoList.add(new SheetInfoBean("用户信息", User.class, userList));
        sheetInfoList.add(new SheetInfoBean("部门信息", Department.class, deptList));
        sheetInfoList.add(new SheetInfoBean("产品信息", Goods.class, goodsList));

        // 导出文件
        File file = new File("C:\\Users\\Administrator\\Desktop\\多sheet导出测试.xlsx");
        try(ExcelWriter excelWriter = EasyExcel.write(file).build()) {
            WriteSheet writeSheet;
            for (SheetInfoBean bean : sheetInfoList) {
                // 构建sheet对象
                writeSheet = EasyExcel.writerSheet(bean.getSheetName()).head(bean.getHeadClass()).build();
                // 写出sheet数据
                excelWriter.write(bean.getDataList(), writeSheet);
            }
            // 关流
            excelWriter.finish();
        } catch (Exception e) {
            // do something you want
        }
    }

5.运行结果

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

6.总结

以上是EasyExcel一个Excel文件导出多个sheet页的demo代码,其中重点代码为

 try(ExcelWriter excelWriter = EasyExcel.write(file).build()) {
  WriteSheet writeSheet;
  for (SheetInfoBean bean : sheetInfoList) {
     // 构建sheet对象
     writeSheet = EasyExcel.writerSheet(bean.getSheetName()).head(bean.getHeadClass()).build();
     // 写出sheet数据
     excelWriter.write(bean.getDataList(), writeSheet);
  }
  // 关流
  excelWriter.finish();
} catch (Exception e) {
 // do something you want
}

大家可以根据自己的需求,将该代码片段进行改造或封装成工具类,以适应自己的业务需求

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RT-Thread快速入门-定时器管理

1时钟节拍 任何操作系统都需要提供一个时钟节拍&#xff0c;以供系统处理所有和时间有关的事件&#xff0c;如延时、线程的时间片轮转调度以及定时器超时等。时钟节拍&#xff08;OS Tick&#xff09;是操作系统中最小的时间单位。 时钟节拍是特定的周期性中断&#xff0c;这…

Spring Boot 整合 分布式搜索引擎 Elastic Search 实现 搜索、分页与结果过滤

文章目录 ⛄引言一、酒店搜索和分页⛅需求分析⚡源码编写 二、酒店结果过滤⌚需求分析⏰修改搜索业务 ✅效果图⛵小结 ⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据…

【java实习评审】对热门小说更新时的聚集访问流量进行性能优化优化,有较好的设计

大家好&#xff0c;本篇文章分享一下【校招VIP】免费商业项目“推推”第一期书籍详情模块java同学的文档周最佳作品。该同学来自西安建筑科技大学软件工程专业。 本项目亮点难点&#xff1a;1 热门书籍在更新点的访问压力&#xff0c;2 书籍更新通知的及时性和有效性&#xff…

浅谈能源管理系统在水泥行业中设计分析

安科瑞 华楠 摘要&#xff1a;水泥企业作为我国产业结构中重要的耗能产业&#xff0c;同时对环境的污染也比较大&#xff0c;因此在水泥企业中建立能源管理系统&#xff0c;对水泥企业的生产过程过程进行全过程的监控和管理&#xff0c;对于降低企业的能源消耗和提高企业的经济…

24 鼠标常用事件

鼠标进入&#xff1a;enterEvent鼠标离开&#xff1a;leaveEvent鼠标按下&#xff1a;mousePressEvent鼠标释放&#xff1a;mouseRelaseEvent鼠标移动&#xff1a;mouseMoveEvent 提升为自定义控件MyLabel 代码&#xff1a; //mylabel.h #ifndef MYLABEL_H #define MYLABEL_H#…

ESP32(MicroPython) 两轮差速五自由度机械臂小车

这次的项目在软件上没多少调整&#xff0c;但本人希望分享一下硬件上的经验。 小车使用两轮差速底盘&#xff0c;驱动轮在小车中间&#xff0c;前后都要万向轮。这种形式可以实现0转弯半径&#xff0c;但受万向轮及用于加高的铜柱的规格限制&#xff0c;两个万向轮难以调到相同…

基于netlify生成custom SSL certificate

&#xff08;1&#xff09;腾讯云申请 &#xff08;2&#xff09;域名控制台解析 &#xff08;3&#xff09;Nginx下载&#xff08;crt: CA certificate Chain)

C++教程 从0开始

0基础C教程 从0开始 课堂现在开始 如需学习 请订阅该标签 什么是C&#xff1f; 这个不是太重要 自行查看该链接即可 C_百度百科C&#xff08;c plus plus&#xff09;是一种计算机高级程序设计语言&#xff0c;由C语言扩展升级而产生&#xff0c;最早于1979年由本贾尼斯特劳…

轻量级Firefox Send替代方案Gokapi

想不到一个域名的变动会影响这么大&#xff0c;访问量出现断崖式下跌。由此可见&#xff0c;平时的访问应该只是一些 RSS 的访问而已。 上面是 Pageviews&#xff0c;下面是 Uniques 今天略有回升 难怪那些大公司要花钱买域名了&#xff0c;不过老苏是个佛系的人&#xff0c;一…

使用MQ发送对象错误

说明&#xff1a;使用RabbitMQ发送消息&#xff0c;消息是对象&#xff0c;出现下面这样的错误&#xff1b; 错误信息&#xff1a;Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of com.hmall.item.pojo.Item (no Cr…

通过问题解决者手册推动你的结果 - 提高思维能力的 17 种方法

大部分人对产品管理的理解都是解决问题&#xff0c;这是他们的主要工作——找出客户的问题是什么并解决它们。但现在&#xff0c;热衷于解决问题的问题是&#xff0c;当我们看到问题时&#xff0c;本能反应是“我该如何解决它&#xff1f;” 这意味着&#xff1a;当我试图自己解…

SPEC CPU 2006 docker gcc:4 静态编译版本 Ubuntu 22.04 LTS 测试报错Invalid Run

runspec.sh #!/bin/bash source shrc ulimit -s unlimited runspec -c gcc41.cfg -T all -n 1 int fp > runspec.log 2>&1 & tail -f runspec.log runspec.log 由于指定了-T all&#xff0c;导致-n 1 失效&#xff0c;用例运行了三次&#xff08;后续验证&…

iptables的备份和还原

iptables的备份和还原 1、写在命令行当中的都是临时设置 2、把规则配置写在服务的文件当中&#xff0c;形成永久有效 备份&#xff1a;把iptables里面所有的配置都保存在/opt/ky30.bak中 iptables-save > /opt/ky30.bak 例&#xff1a; 默认配置文件在/etc/sysconfig/ip…

自然语言处理NLP介绍——NLP简介

目录 内容先进性说明内容大纲概要云服务器的使用 内容先进性说明 内容大纲概要 云服务器的使用

STM32MP157驱动开发——GPIO 和 和 Pinctrl 子系统的概念

文章目录 Pinctrl 子系统重要概念概述重要概念pin controller&#xff1a;client device&#xff1a; 代码中怎么引用 pinctrl GPIO 子系统重要概念概述在设备树中指定引脚在驱动代码中调用 GPIO 子系统头文件常用函数实例&#xff1a; BSP工程师针对芯片的寄存器写Pinctrl子系…

HTTPS安全套接字层超文本传输协议

HTTPS安全套接字层超文本传输协议 HTTPS简介HTTPS和HTTP的主要区别客户端在使用HTTPS方式与Web服务器通信时的步骤SSL/TLS协议的加密&#xff08;握手&#xff09;过程为什么数据传输阶段使用对称加密HTTPS 的优点HTTPS 的缺点HTTPS 的优化证书优化会话复用 HTTPS简介 HTTP协议…

PPT逻辑设计与完美呈现

PPT逻辑设计与完美呈现 https://haoxinyunxueyuan.zhixueyun.com/#/study/course/detail/detailInfoCD00——朱宁川 logo设计神器: https://www.zitijia.com/logodiy/index 一 PPT设计 第一章、PPT的灵魂设计-5W PPT灵魂设计(5W) 以终为始&#xff0c;从目标出发 why 目…

防抖和节流

1. 防抖 1.1 定义 针对高频触发事件&#xff0c;让事件处理函数的逻辑代码延迟一段时间再执行&#xff0c;如果在延迟的这段时间再次触发&#xff0c;则重新开始计时&#xff0c;直到在计时的这段时间内没有再次触发&#xff0c;则执行事件处理函数的逻辑代码 原因&#xff…

(五)RabbitMQ-进阶 死信队列、延迟队列、防丢失机制

Lison <dreamlison163.com>, v1.0.0, 2023.06.23 RabbitMQ-进阶 死信队列、延迟队列、防丢失机制 文章目录 RabbitMQ-进阶 死信队列、延迟队列、防丢失机制死信队列延迟队列延迟队列介绍**延迟队列_死信队列_的实现**延迟队列_插件实现下载插件RabbitMQ 配置类RabbitMQ …

SpringCloudAlibaba微服务实战系列(一)Nacos服务注册发现

SpringCloudAlibaba微服务实战系列&#xff08;一&#xff09;Nacos服务注册发现 实战前先做一个背景了解。 单体架构、SOA和微服务 单体架构&#xff1a;近几年技术的飞速发展&#xff0c;各种各样的服务已经进入到网络化。单体架构发布时只需要打成一个war或jar包发布即可&a…