写在前面

不管是传统软件企业还是互联网企业,不管是管理软件还是面向C端的互联网应用。都不可避免的会涉及到报表操作,而对于报表业务来说,一个很重要的功能就是将数据导出到Excel。如果我们在业务代码中,嵌入很多导出Excel的逻辑,那我们的代码就会变得异常臃肿,不利于维护,而且导出Excel的核心逻辑基本相同。那我们能否将导出Excel的核心逻辑封装成一个工具,当我们需要导出Excel时,只是向工具简单的传入数据呢?于是乎,mykit-excel诞生了!

mykit-excel的github链接地址为:https://github.com/sunshinelyz/mykit-excel 欢迎各位小伙伴Star和Fork源码,也欢迎大家pr你牛逼哄哄的代码,我们一起来养肥它!

框架简述

mykit-excel插件是通用的Excel导入导出框架,旨在提供通用的Excel导入导出功能,支持以注解方式选择JavaBean中的部分字段导出,并提供注解指定Excel列标题和排序功能。

框架结构

  • mykit-excel-annotation: mykit-excel框架的注解模块,提供注解标识类中的哪些字段需要导出到Excel
  • mykit-excel-common: mykit-excel框架的通用工具类,提供通用的工具模板
  • mykit-excel-servlet: mykit-excel框架提供的Web模块,能够支持Web请求导出Excel
  • mykit-excel-springmvc: mykit-excel框架提供的SpringMVC模块,能够支持Web请求导出Excel
  • mykit-excel-test: mykit-excel框架提供的常规测试模块
  • mykit-excel-springboot: mykit-excel框架提供的SpringBoot测试模块

测试用例

(1)测试常规导出Excel工具类的Java类为:io.mykit.excel.springboot.normal.export.TestExportExcelUtils,直接运行该类即可。

(2)测试注解导出Excel工具类的Java类为:io.mykit.excel.springboot.annotation.export.TestAnnotationExportExcelUtils,直接运行该类即可。

(3)测试SpringMVC导出Excel的Java类为io.mykit.excel.springboot.normal.springmvc.NormalExportExcelContorller,运行SpringBoot的启动类io.mykit.excel.springboot.MykitExcelCoreApplication之后,使用resources/html目录下的normalExportExcel.html文件导出Excel即可。如果设置的IP和端口与mykit-excel-springboot模块不同,则修改normalExportExcel.html文件中的IP和端口即可。

(4)测试基于注解导出Java类为io.mykit.excel.springboot.annotation.springmvc.AnnotationExportExcelController,运行SpringBoot的启动类io.mykit.excel.springboot.MykitExcelCoreApplication 之后,使用resources/html目录下的annotationExportExcel.html文件导出Excel即可。如果设置的IP和端口与mykit-excel-springboot模块不同,则修改annotationExportExcel.html文件中的IP和端口即可。

注解说明

如果使用注解方式导出Excel,则需要在JavaBean的属性字段上添加@ExcelColumn注解,此注解中有三个属性,分别如下:

  • isExport:表示是否将当前字段导出到Excel,true:是;false:否
  • title:导出到Excel时的当前列的标题;
  • sort:当前字段导出到Excel的列时,在Excel中的位置,值越小,当前列越靠前。

使用方式

普通方式导出Excel

如果是普通的Java项目,只是将Excel文件导出到本地磁盘,则只需要在项目的pom.xml文件中增加如下配置

<dependency>
<groupId>io.mykit.excel</groupId>
<artifactId>mykit-excel-common</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>

创建测试JavaBean

@Data
public class Student implements Serializable {
private static final long serialVersionUID = -2987207599880734028L;
private int id;
private String name;
private String sex; public Student(){ } public Student(int id, String name, String sex){
this.id = id;
this.name = name;
this.sex = sex;
}
}

接下来,在程序中按照如下方式导出Excel文件即可

public static void main(String[] args) throws Exception{
ExportExcelUtils<Student> utils = new ExportExcelUtils<Student>();
List<Student> list = new ArrayList<Student>();
for (int i = 0; i < 10; i++) {
list.add(new Student(111,"张三","男"));
list.add(new Student(111,"李四","男"));
list.add(new Student(111,"王五","女"));
}
String[] columnNames = { "ID", "姓名", "性别" };
utils.exportExcel("用户导出", columnNames, list, new FileOutputStream("E:/test.xls"), ExportExcelUtils.EXCEL_FILE_2003);
}

导出的文件如下所示

注解方式导出Excel

如果是普通的Java项目,以注解方式将Excel文件导出到本地磁盘,则只需要在项目的pom.xml文件中增加如下配置

<dependency>
<groupId>io.mykit.excel</groupId>
<artifactId>mykit-excel-common</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>

创建测试JavaBean

(1) 创建父类JavaBean

@Data
public class Person implements Serializable {
private static final long serialVersionUID = 3251965335162340137L; @ExcelColumn(isExport = true, title = "编号", sort = 2)
private String id ; @ExcelColumn(isExport = true, title = "姓名", sort = 3)
private String name; public Person(){
} public Person(String id, String name){
this.id = id;
this.name = name;
}
}

(2) 创建子类JavaBean

@Data
public class Student extends Person{
private static final long serialVersionUID = -6180523202831503132L; @ExcelColumn(isExport = false, title = "班级编号", sort = 1)
private String classNo; private Integer score; @ExcelColumn(isExport = true, title = "爱好", sort = 5)
private String hobby; public Student(){
} public Student(String id, String name, String classNo, Integer score, String hobby){
super(id, name);
this.classNo = classNo;
this.score = score;
this.hobby = hobby;
}
}

接下来,在程序中按照如下方式导出Excel文件即可

public class TestAnnotationExportExcelUtils {
public static void main(String[] args) throws FileNotFoundException {
// 准备数据
List<Student> list = new ArrayList<Student>();
for (int i = 1; i <= 10; i++) {
list.add(new Student("00" + i, "张三", "001", 100, "篮球"));
}
AnnotationExcelExportUtils<Student> utils = new AnnotationExcelExportUtils<Student>();
utils.exportExcel("用户导出", list, new FileOutputStream("e:/E:/test.xls"), Student.class, AnnotationExcelExportUtils.EXCEL_FILE_2003);
}
}

导出的文件如下所示

Web方式导出Excel

如果是基于Java Web或Spring MVC项目,需要导出Excel,则需要在项目的pom.xml文件中,加入如下配置

<dependency>
<groupId>io.mykit.excel</groupId>
<artifactId>mykit-excel-servlet</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>

创建测试JavaBean

@Data
public class Student implements Serializable {
private static final long serialVersionUID = -2987207599880734028L;
private int id;
private String name;
private String sex; public Student(){ } public Student(int id, String name, String sex){
this.id = id;
this.name = name;
this.sex = sex;
}
}

接下来,在程序中按照如下方式导出Excel文件即可

@RequestMapping("/excel")
public void getExcel(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 准备数据
List<Student> list = new ArrayList<Student>();
for (int i = 0; i < 10; i++) {
list.add(new Student(111,"张三","男"));
list.add(new Student(111,"李四","男"));
list.add(new Student(111,"王五","女"));
}
String[] columnNames = { "ID", "姓名", " 性别"};
String fileName = "springboot_excel";
ExportExcelWrapper<Student> util = new ExportExcelWrapper<Student>();
util.exportExcel(fileName, fileName, columnNames, list, response, ExportExcelUtils.EXCEL_FILE_2003);
}

导出的文件如下所示

基于注解的Web方式导出Excel

如果是基于Java Web或Spring MVC项目,需要基于注解导出Excel,则需要在项目的pom.xml文件中,加入如下配置

<dependency>
<groupId>io.mykit.excel</groupId>
<artifactId>mykit-excel-servlet</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>

创建测试JavaBean

(1) 创建父类JavaBean

@Data
public class Person implements Serializable {
private static final long serialVersionUID = 3251965335162340137L; @ExcelColumn(isExport = true, title = "编号", sort = 2)
private String id ; @ExcelColumn(isExport = true, title = "姓名", sort = 3)
private String name; public Person(){
} public Person(String id, String name){
this.id = id;
this.name = name;
}
}

(2) 创建子类JavaBean

@Data
public class Student extends Person{
private static final long serialVersionUID = -6180523202831503132L; @ExcelColumn(isExport = false, title = "班级编号", sort = 1)
private String classNo; private Integer score; @ExcelColumn(isExport = true, title = "爱好", sort = 5)
private String hobby; public Student(){
} public Student(String id, String name, String classNo, Integer score, String hobby){
super(id, name);
this.classNo = classNo;
this.score = score;
this.hobby = hobby;
}
}

接下来,在程序中按照如下方式导出Excel文件即可

@Controller
@RequestMapping(value = "/annotation/export")
public class AnnotationExportExcelController { @RequestMapping("/excel")
public void getExcel(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 准备数据
List<Student> list = new ArrayList<Student>();
for (int i = 1; i <= 10; i++) {
list.add(new Student("00" + i, "张三", "001", 100, "篮球"));
}
String fileName = "springboot_excel";
ExportExcelWrapper<Student> wrapper = new ExportExcelWrapper<Student>();
wrapper.annotationExportExcel(fileName, fileName, list, Student.class, response, ExportExcelWrapper.EXCEL_FILE_2003);
}
}

导出的文件如下所示

前端测试代码

前端测试代码放在mykit-excel-springboot模块的src/main/resources/html目录下,修改html文件中的连接地址后,将其放在Tomcat或其他Web容器中,进行测试即可。

测试方式

常规测试

直接运行mykit-excel-springboot项目中的io.mykit.excel.springboot.normal.export.TestExportExcelUtils类即可

基于注解的常规测试

直接运行mykit-excel-springboot项目中的io.mykit.excel.springboot.annotation.export.TestAnnotationExportExcelUtils类即可

Web测试

(1)启动mykit-excel-springboot项目,即运行mykit-excel-springboot项目中的io.mykit.excel.springboot.MykitExcelCoreApplication

(2)将mykit-excel-springboot项目的src/main/resources/html下的normalExportExcel.html文件发布到Tomcat等Web容器中访问normalExportExcel.html文件的连接地址, 打开页面点击“Submit”按钮即可。

基于注解的Web测试

(1)启动mykit-excel-springboot项目,即运行mykit-excel-springboot项目中的io.mykit.excel.springboot.MykitExcelCoreApplication类。

(2)将mykit-excel-springboot项目的src/main/resources/html下的annotationExportExcel.html文件发布到Tomcat等Web容器中访问annotationExportExcel.html文件的连接地址, 打开页面点击“Submit”按钮即可。

重磅福利

微信搜一搜【冰河技术】微信公众号,关注这个有深度的程序员,每天阅读超硬核技术干货,公众号内回复【PDF】有我准备的一线大厂面试资料和我原创的超硬核PDF技术文档,以及我为大家精心准备的多套简历模板(不断更新中),希望大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开怀大笑的路,加油。如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。如果有幸我们江湖再见!

另外,我开源的各个PDF,后续我都会持续更新和维护,感谢大家长期以来对冰河的支持!!

我把这个贼好用的Excel导出工具开源了!!的更多相关文章

  1. 基于jdk1.7实现的excel导出工具类

    通用excel导出工具类,基于泛型.反射.hashmap 以及基于泛型.反射.bean两种方式 import java.io.*;import java.lang.reflect.Field;impo ...

  2. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

  3. EXCEL导出工具类及调用

    一.Excel导出工具类代码 package com.qiyuan.util; import java.io.OutputStream; import java.io.UnsupportedEncod ...

  4. excel导出工具

    介绍 excel导出工具 整个项目的代码结构如下 com \---utils +---demo # 案例相关 | | ExcelExportApplication.java # springboot启 ...

  5. 自己写的java excel导出工具类

    最近项目要用到excel导出功能,之前也写过类似的代码.因为这次项目中多次用到excel导出.这次长了记性整理了一下 分享给大伙 欢迎一起讨论 生成excel的主工具类: public class E ...

  6. 一个很好的通用 excel 导出工具类

    此类用主要 jxl +注解+流 实现扩展性很强,jxl性能会比poi好一点,值得我们学习. package oa.common.utils; import java.io.OutputStream; ...

  7. excel导出工具类

    package com.jianwu.util.excel; import com.google.common.collect.Lists;import com.jianwu.exception.Mo ...

  8. 「starter推荐」简单高效Excel 导出工具

    EasyExcel EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. 64M内存1分钟内读取75M(46W行25列)的E ...

  9. 转:POI操作Excel导出

    package com.rd.lh.util.excel; import java.beans.PropertyDescriptor; import java.io.FileOutputStream; ...

随机推荐

  1. MarkDown编辑器中改变文本字体颜色大小

    法一 有点类似前端里 <font face="微软雅黑" size=4 color=red>输入的文字</font> 其中 face对应字体 size 大小 ...

  2. [ASP.NET Core开发实战]基础篇03 中间件

    什么是中间件 中间件是一种装配到应用管道,以处理请求和响应的组件.每个中间件: 选择是否将请求传递到管道中的下一个中间件. 可在管道中的下一个中间件前后执行. ASP.NET Core请求管道包含一系 ...

  3. 10行实现最短路算法——Dijkstra

    今天是算法数据结构专题的第34篇文章,我们来继续聊聊最短路算法. 在上一篇文章当中我们讲解了bellman-ford算法和spfa算法,其中spfa算法是我个人比较常用的算法,比赛当中几乎没有用过其他 ...

  4. SpringBoot搭建环境

    选择文件新建一个项目 选择:Spring Initializr,其他配置不变,点击下一步 这里一般写包名和项目名,这里我就默认,直接点击下一步 这里选择:Web  --> Spring Web ...

  5. Java实现随机生成由字母、数字组合的N位随机数

    通过Math.random函数生成所需的字符所有序列,通过判断当前字符是否属于大小写.数字,符合者加入数组内,直到数组存储N位为止,最后把当前数组转为字符串返回调用处. /** * 随机生成由数字.字 ...

  6. jmeter连接redis取数据

    1.导入fastjson-1.2.2.jar.jedis-2.2.1.jar到 jmeter\lib\ext\ 下 2.新建BeanShell Sampler import com.alibaba.f ...

  7. Selenium-WebDriver安装

    一.chrome浏览器: 根据chrome浏览器版本,下载对应的驱动 chromedriver版本 支持的Chrome版本 v2.37 v64-66 v2.36 v63-65 v2.35 v62-64 ...

  8. 2020重新出发,JAVA高级,JVM种设计模式

    Java的23种设计模式全面解析 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路.它不是语法规定,而是一套用来提高代码可复用性.可维护性.可读性.稳健 ...

  9. d3力导图绘制节点间多条关系平行线的方法

    之前用d3做了多条线之间的绘图是曲线表示的,现在产品要求改成平行线的样式,经过在网上的调研和自己的尝试,实践出一个可用的方法,分享给大家,先展示下结果: 事先声明,本方法是在以下参考网站上进行的结合和 ...

  10. Azure Storage 系列(五)通过Azure.Cosmos.Table 类库在.Net 上使用 Table Storage

    一,引言 上一篇文章我们在.NET 项目中添加了 “WindowsAzure.Storage” 的 NuGet 包进行操作Table 数据,但是使用的 “WindowsAzure.Storage”  ...