EasyExcel 根据数据大于100条遍历分多sheet
时间: 2024-01-23 10:03:08 浏览: 128
EasyExcel可以根据数据量自动将数据分成多个sheet进行处理。你可以使用以下代码来遍历数据,并将数据分成多个sheet:
```java
// 数据总量
int totalCount = list.size();
// 每个sheet的数据量
int sheetSize = 100;
// sheet数量
int sheetCount = totalCount % sheetSize == 0 ? totalCount / sheetSize : totalCount / sheetSize + 1;
// 创建 ExcelWriter 对象
ExcelWriter writer = EasyExcel.write(response.getOutputStream(), clazz).build();
for (int i = 0; i < sheetCount; i++) {
// 分页查询数据
int start = i * sheetSize;
int end = Math.min(start + sheetSize, totalCount);
List<T> subList = list.subList(start, end);
// 创建 Sheet 对象
Sheet sheet = new Sheet(i + 1, 0, clazz);
sheet.setSheetName("Sheet" + (i + 1));
// 写入数据
writer.write(subList, sheet);
}
// 设置文件名和响应头
String fileName = "xxx.xlsx";
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
// 关闭流
writer.finish();
```
在这个例子中,我们首先计算了数据总量和每个sheet的数据量。然后,我们根据 sheet 数量创建了多个 Sheet 对象,并使用 writer.write() 方法将每个sheet的数据写入到相应的sheet中。最后,我们设置文件名和响应头,并关闭流。
需要注意的是,在每次循环中,我们使用 subList() 方法获取了当前sheet对应的数据子集,这样可以避免一次性加载大量数据导致内存溢出。
阅读全文