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文件。不好意思,今晚又可以早点下班了!...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 复制出来的文本都是大写_好用又冷门的Wo
- 下一篇: amd 深度学习模型部署_Web服务部署