MyExcel,是一個集導入、導出、加密Excel等多項功能的Java工具包。
MyExcel採用聲明式語法來構建、讀取Excel,屏蔽POI的具體操作細節(對POI無感知),以開發常用的技術替代,使得構建(從簡單到高度複雜Excel)以及讀取Excel變得極爲便利,且構建、讀取性能極爲優異,佔用內存極低。
特點
可生成任意複雜表格:本工具使用迭代單元格方式進行Excel繪製,可生成任意複雜度Excel,提供多種寬度策略;
零學習成本:使用Html作爲模板,學習成本幾乎爲零,無需關心POI本身任何操作;
支持常用背景色、邊框、字體等樣式設置:具體參見菜單樣式支持部分;
支持.xls、.xlsx、.csv:支持生成.xls、.xlsx後綴的Excel以及.csv文件;
支持公式導出:支持Excel模板中設置公式,降低服務端的計算量;
支持低內存SXSSF模式:支持低內存的SXSSF模式,可利用極低的內存生成.xlsx;
支持生產者消費者模式導出:支持生產者消費者模式導出,無需一次性獲取所有數據,分批獲取數據配合SXSSF模式實現真正意義上海量數據導出;
支持多種模板引擎:已內置Freemarker、Groovy、Beetl、Thymeleaf等常用模板引擎Excel構建器;
提供默認Excel構建器,直接輸出簡單Excel:無需編寫任何Html,已內置默認模板,可直接根據POJO數據列表輸出;
支持一次生成多sheet:以table作爲sheet單元,支持一份Excel文檔中多sheet導出;
支持Excel容量設定:支持設定Excel容量,到達容量後自動新建Excel,可構建成zip壓縮包導出;
導入示例
// (推薦)方式一:全部讀取後處理,SAX模式,避免OOM,建議大量數據使用
List<ArtCrowd> result = SaxExcelReader.of(ArtCrowd.class)
.sheet(0) // 0代表第一個,如果爲0,可省略該操作
.rowFilter(row -> row.getRowNum() > 0) // 如無需過濾,可省略該操作,0代表第一行
.beanFilter(ArtCrowd::isDance) // bean過濾
.read(path.toFile());// 可接收inputStream
// (推薦)方式二:讀取一行處理一行,可自行決定終止條件,SAX模式,避免OOM,建議大量數據使用
// readThen有兩種重寫接口,返回Boolean型接口允許在返回False情況下直接終止讀取
SaxExcelReader.of(ArtCrowd.class)
.sheet(0) // 0代表第一個,如果爲0,可省略該操作
.rowFilter(row -> row.getRowNum() > 0) // 如無需過濾,可省略該操作,0代表第一行
.beanFilter(ArtCrowd::isDance) // bean過濾
.readThen(path.toFile() ,artCrowd -> {System.out.println(artCrowd.getName);});// 可接收inputStream
public class ArtCrowd {
// index代表列索引,從0開始
private String name;
private String age;
private Date birthday;
}
導出示例
List<ArtCrowd> dataList = this.getDataList();
Workbook workbook = DefaultExcelBuilder.of(ArtCrowd.class)
.build(dataList);
AttachmentExportUtil.export(workbook, "藝術生信息", response);
// 加密導出
// AttachmentExportUtil.encryptExport(workbook, "藝術生信息", response,"123456");
}
並且與阿里easyexcel庫對比,同文件測試內存佔用約爲對方的三分之一。目前這個開源庫已經在項目中廣泛使用。
本文分享自微信公衆號 - 自增程序員(javaipp)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。