不要总是重复造“轮子”

作为朋友,我真的建议你不要重复造轮子,网上现在很多工具库都写很成熟了,拿来就用即可。没有必要事事躬亲,没有必要事事都自己亲自下手去写代码。浪费时间,你不是打字员,而且,如果你自己又没有什么新idea,或者,自己重新写相同的工具类也没有什么性能上的提升,就麻烦你还是好好找找轮子吧,没有必要整天把时间耗在别人已经做过的事情上。

web生成Excel需求

相信你做Java这么久了,也或多或少也遇到过一些需要生成Excel报表的需求吧。毕竟办公软件还是微软是天下,Excel对于非编程人员来说,太重要了,可以说是必不可少的。本人工作也遇到过很大需要生成Excel报表的需求,但是,每一次都有一大段重复的代码,太冗余了,看起来一点都不简洁。

那么,有没有一个工具库可以最少的代码就可以完成这项任务的?或者就用一个注解就OK了呢?
有,而且,就用一个注解就可以。

代码实操

引入库

 <dependency>     <groupId>com.gaoicegroupId>     <artifactId>easyexcel-spring-boot-starterartifactId>     <version>1.0version> dependency>

在springboot的配置文件application.properties上加上一行:

# 是否解析带有 @ResponseExcel 注解的函数的返回值为文件下载com.gaoice.easyexcel.enable-response-excel=true

看清楚,加上@ResponseExcel注解,而不是 @ResponseBody注解,看清楚了哦!!!

    @RequestMapping("/downloadExcel")    @ResponseExcel(fileName="Java知识日历20201101测试",sheetName = "同一班的同学名册",columnNames= {"学生姓名","学号","年龄"},classFieldNames = { "name","stuNo","age" })    public List list() {        return getStudents();    }

没错!就这么简单,就一个注解,就一个注解,就一个注解。

只要加上@ResponseExcel就可以了,看看想一想,我们节省了多少开发时间,节省了多少代码。

测试截图



就这?
No!还可以更加复杂一点

这个工具库还提供了可以定制特殊需求方案,也是非常简单。你可以使用工具库里面的Model对象组合你的Excel 分别是:SheetInfo  和 ExcelFile 对象,可以让你灵活组合你的Excel,真的减少了很多冗余的代码。

这两个对象的用法,在文中最后的全部代码里面都有例子。放心哈!

全部代码

pom.xml

 <dependency>     <groupId>com.gaoicegroupId>     <artifactId>easyexcel-spring-boot-starterartifactId>     <version>1.0version> dependency>

application.properties

#############Java知识日历 微信公众号 测试专用###########

# 是否解析 ExcelFile 类型的返回值为文件下载com.gaoice.easyexcel.enable-excel-file=true# 是否解析 SheetInfo 类型的返回值为文件下载com.gaoice.easyexcel.enable-sheet-info=true# 是否解析带有 @ResponseExcel 注解的函数的返回值为文件下载com.gaoice.easyexcel.enable-response-excel=true

Student.java  (Model类)

package com.nh.modules.test.model;/** * @author Java知识日历   */public class Student {   private String name;   private String stuNo;   private int age;

   private ClassTeacher classTeacher;//该学生的班主任 public String getName() {  return name; } public void setName(String name) {  this.name = name; } public String getStuNo() {  return stuNo; } public void setStuNo(String stuNo) {  this.stuNo = stuNo; } public int getAge() {  return age; } public void setAge(int age) {  this.age = age; } public ClassTeacher getClassTeacher() {  return classTeacher; } public void setClassTeacher(ClassTeacher classTeacher) {  this.classTeacher = classTeacher; } }

ClassTeacher.java  (Model类)

package com.nh.modules.test.model;/** * @author Java知识日历   */public class ClassTeacher {   private String name;

 public String getName() {  return name; }

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

}

TestController.java

package com.nh.modules.test.controllers;

import java.util.ArrayList;import java.util.List;

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

import com.gaoice.easyexcel.SheetInfo;import com.gaoice.easyexcel.spring.boot.autoconfigure.ExcelFile;import com.gaoice.easyexcel.spring.boot.autoconfigure.annotation.ResponseExcel;import com.nh.modules.test.model.ClassTeacher;import com.nh.modules.test.model.Student;

/** * @author Java知识日历   *  * 在 Controller 上使用 @RestController 或者 @ResponseBody 会导致 starter 失效 */@Controller@RequestMapping("/test")public class TestController {

    /**     * 注解 @ResponseExcel 的必须值:classFieldNames     * sheetName 默认值为 default     * fileName 默认使用 sheetName 的值     * columnNames 默认使用 classFieldNames 的值     * sheetStyle 可以指定样式,默认为 DefaultSheetStyle.class     * 生效条件:     * enable-response-excel=true     * 使用 @ResponseExcel 注解     * 不使用 @ResponseBody 注解     *     * @return List     */    @RequestMapping("/downloadExcel")    @ResponseExcel(fileName="Java知识日历20201101测试",sheetName = "同一班的同学名册",columnNames= {"学生姓名","学号","年龄"},classFieldNames = { "name","stuNo","age" })    public List list() {        return getStudents();    }

    /**     * 生成测试数据     *     * @return List     */    private List getStudents() {        List list = new ArrayList();        Student stu = new Student();     stu.setName("Java知识日历");     stu.setAge(3);     stu.setStuNo("A0001");     ClassTeacher classTeacher = new ClassTeacher();     classTeacher.setName("Java课老师");     stu.setClassTeacher(classTeacher);     list.add(stu);for(int i = 0;i<10;i++) {         Student testStu = new Student();         testStu.setName("小明"+i+"号" );         testStu.setAge(6+i);         testStu.setStuNo("A000"+(i+2));         ClassTeacher classTeacher1 = new ClassTeacher();         classTeacher1.setName((i+1)+"课老师");         testStu.setClassTeacher(classTeacher1);         list.add(testStu);        }return list;    }/***其他特殊需要定制的需求。可以灵活组合,满足你个性定制的需求***//**     * 文件名默认使用 sheetName     * 生效条件:     * enable-sheet-info=true     * 返回值类型为 SheetInfo     * 不使用 @ResponseBody 注解     *     * @return SheetInfo     */@RequestMapping("/sheetInfo")public SheetInfo sheetInfo() {        String sheetName = "灵活组合测试";        String[] columnNames = {"学生姓名", "学号", "年龄"};        String[] classFieldNames = {"name", "stuNo", "age"};        List data = getStudents();return new SheetInfo(sheetName, columnNames, classFieldNames, data);    }/**     * 生效条件:     * enable-excel-file=true     * 返回值类型为 ExcelFile     * 不使用 @ResponseBody 注解     *     * @return ExcelFile     */@RequestMapping("/excelFile")public ExcelFile excelFile() {/* SheetInfo */        String sheetName = "灵活组合测试Sheet1";        String[] columnNames = {"学生姓名", "学号", "年龄"};        String[] classFieldNames = {"name", "stuNo", "age"};        List data = getStudents();        SheetInfo sheetInfo1 = new SheetInfo(sheetName, columnNames, classFieldNames, data);        String sheetName2 = "灵活组合测试Sheet2";        String[] columnNames2 = {"学生姓名", "学号", "年龄","班主任姓名"};        String[] classFieldNames2 = {"name", "stuNo", "age","classTeacher.name"};        SheetInfo sheetInfo2 = new SheetInfo(sheetName2, columnNames2, classFieldNames2, data);/* 通过 ExcelFile 自定义下载的文件名,放入多个 sheet */        ExcelFile excelFile = new ExcelFile();        excelFile.setFileName("ExcelFile可以自定义文件名和放入多个sheet");        excelFile.addSheet(sheetInfo1);        excelFile.addSheet(sheetInfo2);return excelFile;    }}

上面的TestController.java全部测试结果截图


ExcelFile对象生成的定制版Excel


SheetInfo对象生成的定制版Excel


使用@ResponseExcel注解的普通Excel


作者寄语

有兴趣的朋友可以copy我的代码测试一下,就可以发现使用一个注解 @ResponseExcel 就解决生成Excel的问题了,少了很多冗余代码,简洁了很多,看起来心情好多了。

原创不易啊!希望大家多多支持哈,后面会有更多更好的原创文章分享给大家的。希望大家能给我点个赞支持一下我,最好还点亮小花花(“在看”)啦。谢谢。

easyexcel注解样式无效_【Java神器】用@ResponseExcel注解将Java List直接转换为Excel文件。不好意思,今晚又可以早点下班了!...相关推荐

  1. easyexcel注解样式无效_使用Model读Excel模型时,只设置注解ExcelProperty的value值读取无效...

    我也遇到 自己实在没辙 自己 用反射 把数据 映射过去 ` package com.thermofisher.dsc.amanda.common.excel.listener; import com. ...

  2. Java开发的B/S程序生成并向客户端发送excel文件:浅谈MIME

    Java开发的B/S程序生成并向客户端发送excel文件:浅谈MIME 1.定义 MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型.是设定 ...

  3. easyexcel注解样式无效_easyexcel注解

    11个注解 @ExcelProperty @ColumnWith 列宽 @ContentFontStyle 文本字体样式 @ContentLoopMerge 文本合并 @ContentRowHeigh ...

  4. java通过桥访问excel_通过jdbc-odbc桥来访问excel文件

    通过jdbc-odbc桥来访问excel文件                                      pcera 说是对文件的操作有点牵强附会,毕竟这是对单一类型的文件具体操作 . ...

  5. @data注解不生效_你说啥什么?注解你还不会?

    点击蓝色字免费订阅,每天收到这样的好信息 前言:最近有不少粉丝关注本公众号.并且我已经成功开通了流量主同时会赚一点点广告费,我打算每个月把这部分钱拿出来给大家买点书刊,算是给大家一点福利吧.大家想买什 ...

  6. java命令行利用libreoffice将office文档转换为pdf文件失败的解决方案

    原因:libreoffice同时只支持两个文档转换的命令行,多于两个的命令行不会进行文档转换. 解决方案:在线程池的线程中,利用java阻塞队列BlockingQueue,设置容量为2,同时只允许两个 ...

  7. jxl读取html格式excel,基于Java+Selenium的WebUI自动化测试框架(十)-----读取Excel文件(JXL)...

    packagewebui.xUtils;importjava.io.File;importorg.testng.Reporter;importjxl.Cell;importjxl.Sheet;impo ...

  8. java 在线excel_Java实现最简单的在线打开保存Excel文件

    在项目开发过程中,经常会涉及到生成Excel报表,但往往系统只能通过后台生成Excel报表并保存到服务器上,若想在系统中打开Excel文件并进行编辑保存,有些人可能就没有思路了.因此,为了实现Exce ...

  9. java中 Excel文件解析及超大Excel文件读写

    本文主要对Excel中数据的解析和生成进行总结 前言 在应用程序的开发过程中,我们经常要用到Excel进行数据的导入或导出.所以,在通过Java语言实现此类需求时,通常会对Excel文件进行解析或生成 ...

最新文章

  1. 简历空空,如何编写一个面试时能拿的出手的真实项目?
  2. 华数大数据平台解决方案
  3. SQL数据库权限授予grant
  4. How to use Chrome HAR save HTTP performance
  5. 前端学习(1730):前端系列javascript之发布窗口布局上
  6. 避开使用XAML的性能陷阱
  7. MFC中Doc,View,MainFrmae,App各指针的互相获取
  8. odoo tree 排序
  9. STM32学习记录0003——STM32芯片解读
  10. java日期格式_java日期和时间的格式化
  11. 互联网版本(支持手机APP)云天售后服务软件上线
  12. MongoDB_基本操作
  13. Mbps和MB/s之间的换算
  14. 【Collect】免费图片库网站推荐(国外高清可商用)
  15. 【电源专题】脉宽调制(PWM)与脉冲频率调制(PFM)
  16. 管理用计算机修理费属于什么会计科目,维修费是什么会计科目
  17. spyder 护眼背景--纯黑色
  18. 物流货运平台大数据风控解决方案
  19. HTML中的表格及样式的设置
  20. 【Flutter实战】移动技术发展史

热门文章

  1. leetcode 720. Longest Word in Dictionary | 720. 词典中最长的单词(Trie前缀树)
  2. 【Java数据库】使用JDBC操作MySQL数据库、Batch批处理 、事务的概念
  3. python join函数_一行 Python 代码能实现这么多丧心病狂的功能?
  4. activemq的部署(三)
  5. 深入理解事件循环机制
  6. DTO(领域数据传输对象)是做什么的
  7. 【详细注释】1058 选择题 (20 分)
  8. [leetcode]1137. 第 N 个泰波那契数
  9. c++语言程序设计——头文件和引用系统头文件、用户头文件的定义及使用方法
  10. 云服务器转租赁协议,关于云服务器的租赁协议