easyexcel注解样式无效_【Java神器】用@ResponseExcel注解将Java List直接转换为Excel文件。不好意思,今晚又可以早点下班了!...
不要总是重复造“轮子”
作为朋友,我真的建议你不要重复造轮子,网上现在很多工具库都写很成熟了,拿来就用即可。没有必要事事躬亲,没有必要事事都自己亲自下手去写代码。浪费时间,你不是打字员,而且,如果你自己又没有什么新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文件。不好意思,今晚又可以早点下班了!...相关推荐
- easyexcel注解样式无效_使用Model读Excel模型时,只设置注解ExcelProperty的value值读取无效...
我也遇到 自己实在没辙 自己 用反射 把数据 映射过去 ` package com.thermofisher.dsc.amanda.common.excel.listener; import com. ...
- Java开发的B/S程序生成并向客户端发送excel文件:浅谈MIME
Java开发的B/S程序生成并向客户端发送excel文件:浅谈MIME 1.定义 MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型.是设定 ...
- easyexcel注解样式无效_easyexcel注解
11个注解 @ExcelProperty @ColumnWith 列宽 @ContentFontStyle 文本字体样式 @ContentLoopMerge 文本合并 @ContentRowHeigh ...
- java通过桥访问excel_通过jdbc-odbc桥来访问excel文件
通过jdbc-odbc桥来访问excel文件 pcera 说是对文件的操作有点牵强附会,毕竟这是对单一类型的文件具体操作 . ...
- @data注解不生效_你说啥什么?注解你还不会?
点击蓝色字免费订阅,每天收到这样的好信息 前言:最近有不少粉丝关注本公众号.并且我已经成功开通了流量主同时会赚一点点广告费,我打算每个月把这部分钱拿出来给大家买点书刊,算是给大家一点福利吧.大家想买什 ...
- java命令行利用libreoffice将office文档转换为pdf文件失败的解决方案
原因:libreoffice同时只支持两个文档转换的命令行,多于两个的命令行不会进行文档转换. 解决方案:在线程池的线程中,利用java阻塞队列BlockingQueue,设置容量为2,同时只允许两个 ...
- jxl读取html格式excel,基于Java+Selenium的WebUI自动化测试框架(十)-----读取Excel文件(JXL)...
packagewebui.xUtils;importjava.io.File;importorg.testng.Reporter;importjxl.Cell;importjxl.Sheet;impo ...
- java 在线excel_Java实现最简单的在线打开保存Excel文件
在项目开发过程中,经常会涉及到生成Excel报表,但往往系统只能通过后台生成Excel报表并保存到服务器上,若想在系统中打开Excel文件并进行编辑保存,有些人可能就没有思路了.因此,为了实现Exce ...
- java中 Excel文件解析及超大Excel文件读写
本文主要对Excel中数据的解析和生成进行总结 前言 在应用程序的开发过程中,我们经常要用到Excel进行数据的导入或导出.所以,在通过Java语言实现此类需求时,通常会对Excel文件进行解析或生成 ...
最新文章
- 简历空空,如何编写一个面试时能拿的出手的真实项目?
- 华数大数据平台解决方案
- SQL数据库权限授予grant
- How to use Chrome HAR save HTTP performance
- 前端学习(1730):前端系列javascript之发布窗口布局上
- 避开使用XAML的性能陷阱
- MFC中Doc,View,MainFrmae,App各指针的互相获取
- odoo tree 排序
- STM32学习记录0003——STM32芯片解读
- java日期格式_java日期和时间的格式化
- 互联网版本(支持手机APP)云天售后服务软件上线
- MongoDB_基本操作
- Mbps和MB/s之间的换算
- 【Collect】免费图片库网站推荐(国外高清可商用)
- 【电源专题】脉宽调制(PWM)与脉冲频率调制(PFM)
- 管理用计算机修理费属于什么会计科目,维修费是什么会计科目
- spyder 护眼背景--纯黑色
- 物流货运平台大数据风控解决方案
- HTML中的表格及样式的设置
- 【Flutter实战】移动技术发展史
热门文章
- leetcode 720. Longest Word in Dictionary | 720. 词典中最长的单词(Trie前缀树)
- 【Java数据库】使用JDBC操作MySQL数据库、Batch批处理 、事务的概念
- python join函数_一行 Python 代码能实现这么多丧心病狂的功能?
- activemq的部署(三)
- 深入理解事件循环机制
- DTO(领域数据传输对象)是做什么的
- 【详细注释】1058 选择题 (20 分)
- [leetcode]1137. 第 N 个泰波那契数
- c++语言程序设计——头文件和引用系统头文件、用户头文件的定义及使用方法
- 云服务器转租赁协议,关于云服务器的租赁协议