EasyExcel 公共导出方法满足数据过大分多个sheet
时间: 2023-07-29 19:09:10 浏览: 55
是的,EasyExcel提供了一种可以按照指定的条数或行数将数据分批次导出到多个sheet的功能。我们可以使用`ExcelWriterSheetBuilder`来实现这个功能。下面是一个示例代码:
```java
// 创建一个ExcelWriterSheetBuilder对象
ExcelWriterSheetBuilder excelWriterSheetBuilder = EasyExcel.write(fileName).head(headList);
// 设置每个sheet的数据行数
int batchSize = 10000;
// 循环遍历数据,每次写入batchSize行数据到一个sheet中
for (int i = 0; i < dataList.size(); i += batchSize) {
List<T> batchData = dataList.subList(i, Math.min(i + batchSize, dataList.size()));
excelWriterSheetBuilder.sheet("Sheet" + (i / batchSize + 1)).doWrite(batchData);
}
```
这段代码将数据分批次写入到多个sheet中,每个sheet中最多包含10000行数据。你可以根据实际情况调整`batchSize`的值来适应不同的数据量。另外,`fileName`是要导出的Excel文件名,`headList`是Excel表头信息,`dataList`是要导出的数据列表。
相关问题
EasyExcel 公共方法导出满足分多sheet
如果需要使用 EasyExcel 导出数据时,需要满足分多 sheet 的需求,可以使用以下公共方法:
1. 定义 ExcelWriter 对象,用于导出 Excel 文件:
```java
ExcelWriter excelWriter = EasyExcel.write(fileName).build();
```
2. 定义 Sheet 对象,用于创建 sheet:
```java
Sheet sheet = new Sheet(sheetNo, headLineMun, clazz);
```
其中,`sheetNo` 表示 sheet 的编号,`headLineMun` 表示表头行数,`clazz` 表示数据的类型。
3. 循环遍历数据,将数据写入 sheet:
```java
for (List<T> dataList : dataListList) {
sheet.setSheetName(sheetName + sheetNo);
excelWriter.write(dataList, sheet);
sheetNo++;
}
```
其中,`dataListList` 表示数据列表的列表,即多个 sheet 的数据列表,`sheetName` 表示 sheet 的名称。
4. 写入并关闭 ExcelWriter 对象:
```java
excelWriter.finish();
```
完整代码示例:
```java
public static void exportExcel(String fileName, List<List<T>> dataListList, String sheetName, int headLineMun, Class<T> clazz) {
ExcelWriter excelWriter = EasyExcel.write(fileName).build();
int sheetNo = 1;
for (List<T> dataList : dataListList) {
Sheet sheet = new Sheet(sheetNo, headLineMun, clazz);
sheet.setSheetName(sheetName + sheetNo);
excelWriter.write(dataList, sheet);
sheetNo++;
}
excelWriter.finish();
}
```
easyexcel 数据导出多个sheet表
可以使用EasyExcel来实现多个sheet表的数据导出。下面是一个示例代码:
```
// 创建工作簿对象
Workbook workbook = new Workbook();
// 创建Sheet1
Sheet sheet1 = workbook.createSheet("Sheet1", 0);
// 向Sheet1中写入数据
List<List<Object>> data1 = new ArrayList<>();
sheet1.setAutoWidth(true);
sheet1.setHead(createTestListStringHead());
for (int i = 0; i < 10; i++) {
List<Object> item = createTestListStringContent(i);
data1.add(item);
}
sheet1.write(data1, true);
// 创建Sheet2
Sheet sheet2 = workbook.createSheet("Sheet2", 1);
// 向Sheet2中写入数据
List<List<Object>> data2 = new ArrayList<>();
sheet2.setAutoWidth(true);
sheet2.setHead(createTestListStringHead());
for (int i = 10; i < 20; i++) {
List<Object> item = createTestListStringContent(i);
data2.add(item);
}
sheet2.write(data2, true);
// 输出Excel文件
workbook.setSheetName(0, "Sheet1");
workbook.setSheetName(1, "Sheet2");
workbook.write(response, "multi_sheet.xlsx");
```
注意:这里的`createTestListStringHead()`和`createTestListStringContent()`方法需要根据实际需求进行编写,用于创建表头和表内容数据。同时,`response`参数是一个HttpServletResponse对象,用于将Excel文件输出到浏览器中。