【開源資訊】MyExcel 3.7.0 發佈,屏蔽多線程處理細節

MyExcel,是一個集導入、導出、加密Excel等多項功能的Java工具包。

MyExcel採用聲明式語法來構建、讀取Excel,屏蔽POI的具體操作細節(對POI無感知),以開發常用的技術替代,使得構建(從簡單到高度複雜Excel)以及讀取Excel變得極為便利,且構建、讀取性能極為優異,佔用內存極低(具體,請移步參考MyExcel&阿里EasyExcel性能對比)。

如導入:

<code>List<artcrowd> result = SaxExcelReader.of(ArtCrowd.class)
.sheet(0) // 0代表第一個sheet,如果為0,可省略該操作,也可sheet("名稱")讀取
.rowFilter(row -> row.getRowNum() > 0) // 如無需過濾,可省略該操作,0代表第一行
.beanFilter(ArtCrowd::isDance) // bean過濾
.read(path.toFile());/<artcrowd>/<code>

本次為例行更新,具體更新如下:

  • DefaultStreamExcelBuilder新增asyncAppend方法,屏蔽多線程使用細節;
  • 優化FreemarkerTemplateHandler,增加對Java8時間類支持;
  • 優化讀取異常字段的信息;

屏蔽多線程使用細節(asyncAppend內部實現依然是多線程),在於降低異步導出門檻,方便Java初學者或多線程不熟悉的用戶能夠快速入手MyExcel流式導出,盡力減少用戶每一行代碼!!!

原流式導出方式:

<code>try (DefaultStreamExcelBuilder<artcrowd> streamExcelBuilder = DefaultStreamExcelBuilder
.of(ArtCrowd.class)
.threadPool(Executors.newFixedThreadPool(10))
.start()) {
// 多線程異步獲取數據並追加至excel,join等待線程執行完成
List<completablefuture> futures = new ArrayList<>();
for (int i = 0; i < 100; i++) {
CompletableFuture future = CompletableFuture.runAsync(() -> {
List<artcrowd> dataList = this.getDataList();
// 數據追加
streamExcelBuilder.append(dataList);
});
futures.add(future);
}
futures.forEach(CompletableFuture::join);
// 最終構建
Workbook workbook = defaultExcelBuilder.build();
AttachmentExportUtil.export(workbook, "藝術生信息", response);
}/<artcrowd>/<completablefuture>/<artcrowd>/<code>

優化後流式導出方式:

<code>try (DefaultStreamExcelBuilder<artcrowd> streamExcelBuilder = DefaultStreamExcelBuilder
.of(ArtCrowd.class)
.threadPool(Executors.newFixedThreadPool(10))
.start()) {
for (int i = 0; i < 100; i++) {
// 數據追加
streamExcelBuilder.asyncAppend(this::getDataList);
}
// 最終構建
Workbook workbook = defaultExcelBuilder.build();
AttachmentExportUtil.export(workbook, "藝術生信息", response);
}/<artcrowd>/<code>

具體請移步文檔:https://github.com/liaochong/myexcel/wiki/Excel%E6%B5%81%E5%BC%8F%E5%AF%BC%E5%87%BA

【開源資訊】MyExcel 3.7.0 發佈,屏蔽多線程處理細節


分享到:


相關文章: