MyExcelは、インポート、エクスポート、暗号化されたExcelなどの複数の機能を統合するJavaツールキットです。
MyExcelは、宣言型構文を使用してExcelを作成および読み取り、POIの特定の操作の詳細(POIを認識しない)をシールドし、それを一般的に使用されるテクノロジーの開発に置き換えます。 、および構築と読み取りのパフォーマンスは非常に優れており、メモリ消費量は非常に少ないです(詳細については、MyExcelとAli EasyExcelのパフォーマンス比較を参照してください)。
インポートなど:
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());
これは定期的な更新です。具体的な更新は次のとおりです。
- DefaultStreamExcelBuilderはasyncAppendメソッドを追加して、マルチスレッドの使用の詳細をシールドします。
- FreemarkerTemplateHandlerを最適化し、Java8時間クラスのサポートを追加します。
- 異常なフィールドの読み取り情報を最適化します。
マルチスレッドの詳細(asyncAppend内部実装はまだマルチスレッドです)の使用をシールドすることは、非同期エクスポートのしきい値を低くすることです。これにより、Java初心者またはマルチスレッドに慣れていないユーザーがMyExcelストリーミングエクスポートをすばやく開始し、ユーザーコードの各行を削減することができます。!!
元のストリーミングエクスポート方法:
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);
}
最適化されたストリーミングエクスポート方法:
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);
}
詳細については、ドキュメントに移動してください:https : //github.com/liaochong/myexcel/wiki/Excel%E6%B5%81%E5%BC%8F%E5%AF%BC%E5%87%BA