大家好,我是冰河~~

不管是传统软件企业还是互联网企业,不管是管理软件还是面向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”按钮即可。

写在最后

如果你想进大厂,想升职加薪,或者对自己现有的工作比较迷茫,都可以私信我交流,希望我的一些经历能够帮助到大家~~

推荐阅读:

  • 《实践出真知:全网最强秒杀系统架构解密,不是所有的秒杀都是秒杀!!》
  • 《从零到上亿用户,我是如何一步步优化MySQL数据库的?(建议收藏)》
  • 《我用多线程进一步优化了亿级流量电商业务下的海量数据校对系统,性能再次提升了200%!!(全程干货,建议收藏)》
  • 《我用多线程优化了亿级流量电商业务下的海量数据校对系统,性能直接提升了200%!!(全程干货,建议收藏)》
  • 《我用10张图总结出了这份并发编程最佳学习路线!!(建议收藏)》
  • 《高并发场景下一种比读写锁更快的锁,看完我彻底折服了!!(建议收藏)》
  • 《全网最全性能优化总结!!(冰河吐血整理,建议收藏)》
  • 《三天撸完了MyBatis,各位随便问!!(冰河吐血整理,建议收藏)》
  • 《奉劝那些刚参加工作的学弟学妹们:要想进大厂,这些并发编程知识是你必须要掌握的!完整学习路线!!(建议收藏)》
  • 《奉劝那些刚参加工作的学弟学妹们:要想进大厂,这些核心技能是你必须要掌握的!完整学习路线!!(建议收藏)》
  • 《奉劝那些刚参加工作的学弟学妹们:这些计算机与操作系统基础知识越早知道越好!万字长文太顶了!!(建议收藏)》
  • 《我用三天时间开发了一款老少皆宜的国民级游戏,支持播放音乐,现开放完整源代码和注释(建议收藏)!!》
  • 《我是全网最硬核的高并发编程作者,CSDN最值得关注的博主,大家同意吗?(建议收藏)》
  • 《毕业五年,从月薪3000到年薪百万,我掌握了哪些核心技能?(建议收藏)》
  • 《我入侵了隔壁妹子的Wifi,发现。。。(全程实战干货,建议收藏)》
  • 《千万不要轻易尝试“熊猫烧香”,这不,我后悔了!》
  • 《清明节偷偷训练“熊猫烧香”,结果我的电脑为熊猫“献身了”!》
  • 《7.3万字肝爆Java8新特性,我不信你能看完!(建议收藏)》
  • 《在业务高峰期拔掉服务器电源是一种怎样的体验?》
  • 《全网最全Linux命令总结!!(史上最全,建议收藏)》
  • 《用Python写了个工具,完美破解了MySQL!!(建议收藏)》
  • 《SimpleDateFormat类到底为啥不是线程安全的?(附六种解决方案,建议收藏)》
  • 《MySQL 8中新增的这三大索引,直接让MySQL起飞了,你竟然还不知道!!(建议收藏)》
  • 《撸完Spring源码,我开源了这个分布式缓存框架!!(建议收藏)》
  • 《亿级流量高并发秒杀系统商品“超卖”了,只因使用的JDK同步容器中存在这两个巨大的坑!!(踩坑实录,建议收藏)》
  • 《奉劝那些刚参加工作的学弟学妹们:要想学好并发编程,这些并发容器的坑是你必须要注意的!!(建议收藏)》

好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,我是冰河,我们下期见~~

公司的报表工具太难用,我三天撸了个Excel工具,运营小姐姐直呼太好用了,现已开源!!(建议收藏)相关推荐

  1. 首批 iPhone 13 用户直呼太“坑”:​拍照有马赛克、不能用高刷、还与 Apple Watch “失联”?...

    整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) iPhone 13 到底香不香,早在 9 月 15 号的苹果秋季发布会上给了我们答案.对此,自然是仁者见仁智者见智:有人认为 iPhon ...

  2. 首批 iPhone 13 用户直呼太“坑”:​拍照有马赛克、与 Apple Watch “失联”、第三方 App 还不能用高刷?

    iPhone 13 到底香不香,早在 9 月 15 号的苹果秋季发布会上给了我们答案.对此,自然是仁者见仁智者见智:有人认为 iPhone 13 "加量不加价"挺划算,有人则认为 ...

  3. 开发小程序,05 后程序员直呼“太简单”?

    作者 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 在今年 Stack Overflow 的开发者调查报告里,我们发现一项有趣的数据:调查的 9 万名开发者中,70.8% 的开发者早在 1 ...

  4. 卧槽!这网站也太全了吧!!!学习、设计、开发、资源下载等各类高质量网站推荐【建议收藏】

    有了这些网站,开发,设计速度提升了n倍,效率提升了,薪资自然就涨涨涨 声明: 本网址从网上搜寻而来,有的网址在使用时如出现过期情况,请反馈 欢迎有好的网站的私聊进行分享 本帖会不定期更新,建议收藏 设 ...

  5. 女生适不适合学软件测试?学完了的小姐姐都说太香了!

    软件测试工程师是个没有性别歧视的职业,甚至很多企业倾向招女性,那么如果你认为女性不适合学IT,那就错了,历史上的女程序员比比皆是,而高薪热门的软件测试行业更是对女性甚为"友好". ...

  6. 太难了!国内手机出货量大幅下降:华为跌幅小,小米跌惨了

    5月8日,根据国际数据公司IDC发布的手机季度跟踪报告显示,2020年第一季度,中国智能手机市场出货量约6600万台,同比下滑20.3%. 报告显示,华为.vivo.OPPO.小米.苹果等手机品牌的出 ...

  7. Excel作图太难看,掌握这7种酷炫可视化图表,老板直呼太牛了

    做汇报是打工人永远的痛,业绩差的时候领导把汇报方案从头骂到尾,业绩不错想在领导面前炫一下的时候,发现自己只会用Excel做难看的柱状图.折线图,就像下面这种,即使看得出业绩提升,但图表也确实拉垮. 其 ...

  8. 人脸识别撞脸名画_与名画“撞脸”火爆数博会 观众直呼“太好玩”【高清组图】...

    人民网贵阳5月26日电 (赵静 刘政宁)"这个太好玩了." 25日,记者在2016数博会蚂蚁金服展会现场看到,一款趣味测试"遇见名画中的自己"火爆全场,现场测试 ...

  9. 基础夯实,字节内部总结240道算法LeetCode刷题笔记,直呼太全

    1.什么是算法 算法(algorithm,[ˈælɡərɪðəm],计算程序):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出.简单来说算法就是一系列的计算步骤,用来将 ...

最新文章

  1. redmine mysql配置_Redmine安装指南一:railsinstaller+apache+mysql(推荐)
  2. Java 调用Oracle的存储过程
  3. 跟我学Spring Cloud(Finchley版)-07-Ribbon入门
  4. Coursera自动驾驶课程第14讲:Linear and Nonlinear Kalman Filters
  5. 2017-2018年Scrum状态调查报告
  6. python3 json_Python3 解析复杂结构的 json
  7. Python使用pip安装/卸载包
  8. jpcap的配置方法
  9. textarea标签的文字居中解决方法
  10. 在Linux下配置打印机
  11. C语言 牛顿法 解方程,如何用科学计算器求方程的解(牛顿法解方程具体步骤)...
  12. 差异表达基因变化倍数_差异基因表达分析,如何寻找差异表达的基因?
  13. stylus 设置全局样式_vue 公共样式处理_全局styl文件
  14. 华为钱包开卡显示服务器异常,华为手机喜迎微信指纹支付 会遇到的11大常见问题!...
  15. 实现socket监听所有网络命名空间
  16. python裁剪图片大小
  17. 苹果企业证书_IOS_苹果企业签名_企业签名的圈外证书 拒绝频繁掉签!
  18. 内存换CPU CPU换内存例子
  19. 你好,你是谁,可不可以向我出示源代码让我确认身份
  20. RecyclerView 配合 DiffUtil,RecyclerView局部刷新

热门文章

  1. linux制作deepin启动盘制作工具,深度启动盘制作工具(Deepin Boot Maker)
  2. 咖说 | 写给女朋友的 DeFi 笔记:半天 2 亿美元的 BarnBridge是什么?
  3. Excel中鲜为人知的“照相机”功能(收藏)
  4. automotive 安卓开发_谷歌首次提及「Android Automotive」,是安卓车机系统亮相前奏?...
  5. 微信小程序邀请判断登陆信息(邀请前做其他操作)
  6. return的常见用法
  7. 移动端h5网页调用支付宝支付接口
  8. 小学生该学什么编程语言入门?
  9. 使用SQL语句创建数据库和数据库表
  10. java 五角星十个坐标_如何求五角星十个顶点的坐标