寫在前面
不管是傳統軟體企業還是網際網路企業,不管是管理軟體還是面向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,後續我都會持續更新和維護,感謝大家長期以來對冰河的支援!!