提到Excel的導入導出,大家肯定都知道alibaba開源的EasyExcel,該項目的github位址為:https://github.com/alibaba/easyexcel。
這個項目非常活躍,項目誕生的目的就是為了簡化開發、降低記憶體消耗。我項目中也用過,但還是有一些槽點的,比如文檔很簡陋,功能做的不完善,不支援圖檔的讀取等。是以,今天給大家推薦另外一款Excel處理的工具:EasyPoi。
一、EasyPoi簡介
官網:http://www.afterturn.cn/
文檔:http://easypoi.mydoc.io/
EasyPoi功能如同名字easy,主打的功能就是容易,讓一個沒見接觸過poi的人員 就可以友善的寫出Excel導出,Excel模闆導出,Excel導入,Word模闆導出,通過簡單的注解和模闆 語言(熟悉的表達式文法),完成以前複雜的寫法 ,不如poi那麼自定義,不如jxl那麼多标簽,但是我們就是寫的少,寫的少。
EasyPoi的主要特點
- 設計精巧,使用簡單
- 接口豐富,擴充簡單
- 預設值多,write less do more
- spring mvc支援,web導出可以簡單明了
二、EasyPoi的功能介紹
Excel自适應xls和xlsx兩種格式,word隻支援docx模式,功能還是挺豐富的。
1.Excel導入
- 注解導入
- Map導入
- 大資料量導入sax模式
- 導入檔案儲存
- 檔案校驗
- 字段校驗
2.Excel導出
- 注解導出
- 模闆導出
- html導出
3.Excel轉html
4.word導出
5.pdf導出
三、重點功能介紹
1.注解
EasyPoi起因就是Excel的導入導出,最初的模闆是實體和Excel的對應,model--row,filed--col 這樣利用注解我們可以和容易做到excel到導入導出 經過一段時間發展,現在注解有5個類分别是
- @Excel 作用到filed上面,是對Excel一列的一個描述
- @ExcelCollection 表示一個集合,主要針對一對多的導出,比如一個老師對應多個科目,科目就可以用集合表示
- @ExcelEntity 表示一個繼續深入導出的實體,但他沒有太多的實際意義,隻是告訴系統這個對象裡面同樣有導出的字段
- @ExcelIgnore 和名字一樣表示這個字段被忽略跳過這個導導出
- @ExcelTarget 這個是作用于最外層的對象,描述這個對象的id,以便支援一個對象可以針對不同導出做出不同處理
2.Excel 模闆
模闆是處理複雜Excel的簡單方法,複雜的Excel樣式,可以用Excel直接編輯,完美的避開了代碼編寫樣式的雷區,同時指令的支援,也提了模闆的有效性。就像下面這樣使用,具體用法請看文檔。

3.Excel<->Html的互轉
4.Word模闆導出
5.圖檔的導入導出
@Test//圖檔導入
public void test() {
try {
ImportParams params = new ImportParams();
params.setNeedSave(true);
List<CompanyHasImgModel> result = ExcelImportUtil.importExcel(
new File(PoiPublicUtil.getWebRootPath("import/imgexcel.xls")),
CompanyHasImgModel.class, params);
for (int i = 0; i < result.size(); i++) {
System.out.println(ReflectionToStringBuilder.toString(result.get(i)));
}
Assert.assertTrue(result.size() == 4);
} catch (Exception e) {
e.printStackTrace();
}
}
}
//導出
@Excel(name = "公司LOGO", type = 2 ,width = 40 , height = 20,imageType = 1)
private String companyLogo;
6.Excel大資料導出
大資料導出是當我們的導出數量在幾萬,到上百萬的資料時,一次從資料庫查詢這麼多資料加載到記憶體然後寫入會對我們的記憶體和CPU都産生壓力,這個時候需要我們像分頁一樣處理導出分段寫入Excel緩解Excel的壓力 EasyPoi提供的是兩個方法 強制使用 xssf版本的Excel 。具體代碼看文檔,我們看下資源占用即可:
多次測試用時統計,速度還是可以接受的。
資料量 | 用時 | 檔案大小 | 列數 |
100W | 16.4s | 24.3MB | 5 |
100W | 15.9s | 24.3MB | 5 |
200W | 29.5s | 48.5MB | 5 |
100W | 30.8s | 37.8MB | 10 |
200W | 58.7s | 76.1MB |