前言
MyExcel,是一個集導入、導出、加密Excel等多項功能的Java工具包。
MyExcel採用聲明式語法來構建、讀取Excel,屏蔽POI的具體操作細節(對POI無感知),以開發常用的技術替代,使得構建(從簡單到高度複雜Excel)以及讀取Excel變得極爲便利。
定位|Target
- 導入:提供簡便的API,讀取Excel內容,並轉化爲List< Bean >。
- 導出:可快速導出海量數據的簡單列表,可生成高複雜度佈局的Excel,複雜佈局指的是包含多種不規則合併單元格、背景色、字體大小、斜體等,可自動劃分Excel生成zip壓縮包。
MyExcel 3.3.0.GA更新內容
- 修復字體加粗樣式與顏色樣式無法共存問題;
- 修復SaxExcelReader讀取多sheet異常問題;
- 修復超鏈接無下劃線問題;
- 修復csv生成與讀取未識別編碼問題;
- 修復Bean字段重名無覆蓋問題;
- 修復Bean父類字段默認導出在子類之後問題;
- 支持圖片導入;
- 支持模板圖片導出;
- 支持帶括號負值形式(財務格式)讀取;
- 支持BigInteger讀取;
- 新增DefaultExcelReader\SaxExcelReader noTrim方法;
- 優化DefaultExcelReader\SaxExcelReader,默認讀取時trim;
- 優化DefaultStreamExcelBuilder生產者消費者模式,避免消費者線程不受控風險;
- 優化讀取邏輯,降低內存分配頻率;
代碼示例
例如導入:
List<ArtCrowd> result = SaxExcelReader.of(ArtCrowd.class)
.sheet(0) // 0代表第一個,如果爲0,可省略該操作,也可sheet("名稱")讀取
.rowFilter(row -> row.getRowNum() > 0) // 如無需過濾,可省略該操作,0代表第一行
.beanFilter(ArtCrowd::isDance) // bean過濾
.read(path.toFile());//
另外,MyExcel一直在實際生產環境中使用,每天導出、讀取Excel接近上億數據,內存佔用、抖動極低,足夠應對絕大部分應用場景。
例如導出:
@GetMapping("/default/excel/example")
public void defaultBuild(HttpServletResponse response) throws Exception {
List<ArtCrowd> dataList = this.getDataList();
Workbook workbook = DefaultExcelBuilder.of(ArtCrowd.class)
.build(dataList);
AttachmentExportUtil.export(workbook, "考生信息", response);
}