easyexcel如何导出百万级数据
时间: 2023-08-08 15:09:46 浏览: 308
要导出百万级数据,建议使用EasyExcel的SXSSFWorkbook方式,它是一种基于XSSF的特殊Workbook,使用这种方式可以让内存占用更小。具体实现方法如下:
1. 在导出方法中创建SXSSFWorkbook对象。
2. 设置Excel的表头和样式等信息。
3. 循环遍历数据,使用Sheet.createRow()创建行对象,使用row.createCell()创建单元格对象,将数据填充到单元格中。
4. 每写入一定数量的数据,使用sheet.flushRows()方法将数据刷入磁盘,避免内存占用过高。
5. 最后使用response输出Excel文件。
示例代码如下:
```java
public void exportData(HttpServletResponse response) {
SXSSFWorkbook workbook = new SXSSFWorkbook(100); // 创建SXSSFWorkbook对象,指定内存缓存大小为100条数据
Sheet sheet = workbook.createSheet("数据表"); // 创建Sheet对象
// 设置表头样式
CellStyle headStyle = workbook.createCellStyle();
Font headFont = workbook.createFont();
headFont.setBold(true);
headStyle.setFont(headFont);
// 设置表头
Row headRow = sheet.createRow(0);
Cell cell1 = headRow.createCell(0);
cell1.setCellValue("列1");
cell1.setCellStyle(headStyle);
Cell cell2 = headRow.createCell(1);
cell2.setCellValue("列2");
cell2.setCellStyle(headStyle);
// 循环遍历数据
List<Data> dataList = getDataList(); // 获取数据
int rowNum = 1;
for (Data data : dataList) {
Row row = sheet.createRow(rowNum++);
row.createCell(0).setCellValue(data.getCol1());
row.createCell(1).setCellValue(data.getCol2());
if (rowNum % 100 == 0) { // 每写入100条数据,刷入磁盘
((SXSSFSheet) sheet).flushRows();
}
}
// 输出Excel文件
try (OutputStream out = response.getOutputStream()) {
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("数据表.xlsx", "UTF-8"));
workbook.write(out);
} catch (IOException e) {
e.printStackTrace();
}
}
```
注意:SXSSFWorkbook的缓存大小应根据实际情况设置,如果设置过大,会导致内存占用过高;如果设置过小,会导致频繁地刷入磁盘,影响导出速度。
阅读全文