JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

[MyExcel] 容量拆分&压缩导出

wys521 2024-11-10 13:18:05 精选教程 18 ℃ 0 评论

?MyExcel,是一个集导入、导出、加密 Excel 等多项功能的 Java 工具包。

我们知道,理论上Excel保存的数据量是和硬盘大小相关的,那把大量同类数据保存到一份Excel中总是最合适的吗?

显然不是,因为硬盘虽然很大,可以存储大量数据,但是内存相对来说就小的多,在打开非常大的Excel时就会非常吃力,甚至无法打开。

为了能够让用户快速打开Excel,在导出非常大的数据量的Excel时我们可以采取生成多个Excel,每个Excel中仅仅保存指定数量的数据来解决上述问题。

我们看一下在MyExcel中拆分的具体流程。

案例

导出5000行数据,拆分成多个Excel,每个Excel中存放800数据,且最终以压缩包的形式导出给用户。

效果如下:

依赖导入

Maven:

<dependency>

	<groupId>com.github.liaochong</groupId>

	<artifactId>myexcel</artifactId>

	<version>4.3.3</version>

</dependency>

Gradle:

compile group: 'com.github.liaochong', name: 'myexcel', version: '4.3.3'

导出实现

在DefaultStreamExcelBuilder中有个方法用于设置每个Excel的容量。

public DefaultStreamExcelBuilder<T> capacity(int capacity)

一旦调用该方法,则默认会将导出的数据进行拆分到多个Excel。

在最终导出Excel时选用导出为zip文件:

public Path buildAsZip(String fileName)

如果希望自行处理导出的多Excel文件,也可以在导出Excel时选用导出为文件列表:

public List<Path> buildAsPaths()

以下是完整的代码实现:

try (DefaultStreamExcelBuilder<Car> streamExcelBuilder = DefaultStreamExcelBuilder
                .of(Car.class)
                .sheetName("Car sheet")
                // 容量设定
                .capacity(80_0000)
                .start()) {
    for (int i = 0; i < 500_0000; i++) {
        // 数据追加
        Car car = new Car();
        car.setBrand("品牌"+i);
        car.setColor("颜色"+i);
        streamExcelBuilder.append(car);
    }
    // 最终构建
    Path zip = defaultExcelBuilder.buildAsZip("汽车数据压缩包");
}

public class Car {
   @ExcelColumn(title="品牌")
   private String brand;
  
   @ExcelColumn(title="颜色")
   private String color;
}

最后

MyExcel功能非常丰富,如需了解其他功能,请留言或移步仓库文档:Home · liaochong/myexcel Wiki · GitHub

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表