百万级数据高效导出 Excel:Hutool 实战指南
使用 Hutool 导出百万级的 Excel 数据可以分为以下几个步骤:
- 引入 Hutool 的 Excel 模块
在 pom.xml 中引入 hutool-all 依赖:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.10</version>
</dependency>
- 准备数据
假设需要导出一百万条数据,可以先随机生成一百万个 Person 对象,每个对象包含 id、name 和 age 三个属性。
public class Person {
private Long id;
private String name;
private Integer age;
// 省略 getter 和 setter 方法
}
public static List<Person> generateData(int count) {
List<Person> list = new ArrayList<>(count);
Random random = new Random();
for (int i = 0; i < count; i++) {
Person person = new Person();
person.setId((long) i);
person.setName('Name' + i);
person.setAge(random.nextInt(100));
list.add(person);
}
return list;
}
- 分批导出数据
由于一次性导出百万级的数据会导致内存溢出,需要将数据分批导出。可以将数据分成多个 Sheet,每个 Sheet 导出一部分数据。
public static void exportExcel(List<Person> dataList, String filePath, int batchSize) {
ExcelWriter writer = ExcelUtil.getWriter(filePath);
// 每个 Sheet 导出 batchSize 条数据
int sheetCount = (dataList.size() + batchSize - 1) / batchSize;
for (int i = 0; i < sheetCount; i++) {
int fromIndex = i * batchSize;
int toIndex = Math.min((i + 1) * batchSize, dataList.size());
List<Person> batchList = dataList.subList(fromIndex, toIndex);
// 导出 Sheet
writer.setSheet(i);
writer.write(batchList);
}
writer.close();
}
- 调用导出方法
最后调用导出方法即可将数据写入 Excel 文件中。
public static void main(String[] args) {
List<Person> dataList = generateData(1000000);
String filePath = "D:/data.xlsx";
int batchSize = 10000;
exportExcel(dataList, filePath, batchSize);
}
原文地址: https://www.cveoy.top/t/topic/nibj 著作权归作者所有。请勿转载和采集!