Java對象和Excel轉換工具XXL-EXCEL

一、簡介

1.1 概述

XXL-EXCEL 是一個靈活的Java對象和Excel文檔相互轉換的工具。

一行代碼完成Java對象和Excel之間的轉換。

1.2 特性

  • 1、Excel導出:支持Java對象裝換爲Excel,並且支持File、字節數組、Workbook等多種導出方式;
  • 2、Excel導入:支持Excel轉換爲Java對象,並且支持File、InputStream、文件路徑、Workbook等多種導入方式;
  • 3、全基礎數據類型支持:Excel的映射Java對象支持設置任意基礎數據類型,將會自動完整值注入;
  • 4、Field寬度自適應;
  • 5、多Sheet導出:導出Excel時支持設置多張sheet;
  • 6、多Sheet導入:導入Excel時支持設置多張sheet,通過 "@ExcelSheet.name" 註解匹配Sheet;

1.4 下載

文檔地址

源碼倉庫地址

源碼倉庫地址 Release Download
https://github.com/xuxueli/xxl-excel Download
https://gitee.com/xuxueli0323/xxl-excel Download

技術交流

1.5 環境

  • JDK:1.7+

二、快速入門

2.1 引入maven依賴

<!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-excel-core/ -->
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-excel</artifactId>
    <version>1.0.0</version>
</dependency>

2.2 定義Java對象

@ExcelSheet(name = "商戶列表", headColor = HSSFColor.HSSFColorPredefined.LIGHT_GREEN)
public class ShopDTO {

    @ExcelField(name = "商戶ID")
    private int shopId;

    @ExcelField(name = "商戶名稱")
    private String shopName;

    public ShopDTO() {
    }

    public ShopDTO(int shopId, String shopName) {
        this.shopId = shopId;
        this.shopName = shopName;
    }

    public int getShopId() {
        return shopId;
    }

    public void setShopId(int shopId) {
        this.shopId = shopId;
    }

    public String getShopName() {
        return shopName;
    }

    public void setShopName(String shopName) {
        this.shopName = shopName;
    }

}

2.3 Excel導出:Object 轉換爲 Excel

// 參考測試代碼:com.xuxueli.poi.excel.test.Test

/**
 * Excel導出:Object 轉換爲 Excel
 */
ExcelExportUtil.exportToFile(filePath, shopDTOList);

2.4 Excel導入:Excel 轉換爲 Object

// 參考測試代碼:com.xuxueli.poi.excel.test.Test

/**
 * Excel導入:Excel 轉換爲 Object
  */
List<Object> list = ExcelImportUtil.importExcel(filePath, ShopDTO.class);

三、總體設計

3.1 功能定位

XXL-EXCEL 是在 Java 對象和 Excel 文檔之間進行轉換的迅速而靈活的工具。

藉助 XXL-EXCEL,一個Java類對象可以完整描述一張Excel表,XXL-EXCEL 做的事情就是把Java對象映射成Excel文件,同時保證性能和穩定。

3.2 Java 對象 和 Excel映射關係

-- Excel Java 對象
Sheet Java對象列表
表頭 Sheet首行 Java對象Field
數據 Sheet一行記錄 Java對象列表中一個元素

3.3 核心註解:ExcelSheet

功能:描述Sheet信息,註解添加在待轉換爲Excel的Java對象類上,可選屬性如下。

ExcelSheet 說明
name 表/Sheet名稱
headColor 表頭/Sheet首行的顏色

3.4 核心註解:ExcelField

功能:描述Sheet的列信息,註解添加在待轉換爲Excel的Java對象類的字段上,可選屬性如下。

ExcelField 說明
name 屬性/列名稱

四、版本更新日誌

版本 V1.0.0,新特性[2017-09-13]

  • 1、Excel導出:支持Java對象裝換爲Excel,並且支持File、字節數組、Workbook等多種導出方式;
  • 2、Excel導入:支持Excel轉換爲Java對象,並且支持File、InputStream、文件路徑、Workbook等多種導入方式;

版本 V1.1.0,新特性[2017-12-14]

  • 1、字段支持Date類型。至此,已經支持全部基礎數據類型。
  • 2、Java轉換Excel時,字段類型改爲從Field上讀取,避免Value爲空時空指針問題。
  • 3、升級POI至3.17版本;
  • 4、支持設置Field寬度;如果不指定列寬,將會自適應調整寬度;
  • 5、多Sheet導出:導出Excel時支持設置多張sheet;
  • 6、多Sheet導入:導入Excel時支持設置多張sheet,通過 "@ExcelSheet.name" 註解匹配Sheet;

版本 V1.1.1,新特性[迭代中]

  • 1、支持設置Field水平位置,如居中、居左;
  • 2、底層API優化,預約多Sheet操作支持;
  • 3、空Cell導入拋錯問題修復;
  • 4、Cell數據類型識別優化,全類型支持;
  • 5、導入時支持空Excel;導出時限制非空,否則無法進行類型推導。

TODO LIST

  • 1、單個Excel多Sheet導出導出;
  • 2、列合併導入導出;
  • 3、行合併導入導出;
  • 4、HSSFWorkbook=2003/xls、XSSFWorkbook=2007/xlsx 兼容支持;
  • 5、流式導入:多批次導入數據;
  • 7、流式導出:分頁方式導出數據;
  • 6、單錶行數限制:2003/xls=65536,2007/xlsx=1048576;行數限制內進行性能測試和優化;
  • 8、排序的字段,對時間等其他類型的處理。
  • 9、Java已經支持全基礎數據類型導入導出,但是Excel僅支持STRING類型CELL,需要字段屬性支持定義CELL類型;
  • 10、同一個單元格,橫向、豎向拆分多個單元格;List屬性;
  • 11、Excel導入多Sheet支持;
  • 12、CellType導入、導出全類型支持,如Date等;

五、其他

5.1 項目貢獻

歡迎參與項目貢獻!比如提交PR修復一個bug,或者新建 Issue 討論新特性或者變更。

5.2 用戶接入登記

更多接入的公司,歡迎在 登記地址 登記,登記僅僅爲了產品推廣。

5.3 開源協議和版權

產品開源免費,並且將持續提供免費的社區技術支持。個人或企業內部可自由的接入和使用。

  • Licensed under the GNU General Public License (GPL) v3.
  • Copyright (c) 2015-present, xuxueli.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章