大文件写HSSF
缺点:只能写65536行,否则会抛出异常
优点:过程中写入缓存,不操作磁盘,最后一次性写入,速度较快
String PATH = "D:\\code\\springboot\\springboot-resume\\springboot-resume";
@Test
public void HssfBigExcel() throws Exception {
long begin = System.currentTimeMillis();
//1、创建一个工作簿
Workbook workbook = new HSSFWorkbook();
//2、创建一个工作表
Sheet sheet =workbook.createSheet("HssfBigExcel工作表");
//3、创建一个行
for (int rowNumber = 0; rowNumber < 65536; rowNumber++){
Row row = sheet.createRow(rowNumber);
for(int cellNumber = 0;cellNumber<10;cellNumber++){
Cell cell = row.createCell(cellNumber);
cell.setCellValue(cellNumber);
}
}
//生成一张表
FileOutputStream fileOutputStream = new FileOutputStream(PATH + "HssfBigExcel工作表.xls");
workbook.write(fileOutputStream);
fileOutputStream.close();
long end = System.currentTimeMillis();
System.out.println((double) (end-begin)/1000);
System.out.println("生成完毕");
}
完成时间
大文件写XSSF
缺点:写数据时速度非常慢,非常耗内存,也会发生内存溢出,如100万条
优点:可以写入较多数据,如20万条
String PATH = "D:\\code\\springboot\\springboot-resume\\springboot-resume";
@Test
public void HssfBigExcel() throws Exception {
long begin = System.currentTimeMillis();
//1、创建一个工作簿
Workbook workbook = new XSSFWorkbook();
//2、创建一个工作表
Sheet sheet =workbook.createSheet("HssfBigExcel工作表");
//3、创建一个行
for (int rowNumber = 0; rowNumber < 65536; rowNumber++){
Row row = sheet.createRow(rowNumber);
for(int cellNumber = 0;cellNumber<10;cellNumber++){
Cell cell = row.createCell(cellNumber);
cell.setCellValue(cellNumber);
}
}
//生成一张表
FileOutputStream fileOutputStream = new FileOutputStream(PATH + "XssfBigExcel工作表.xlsx");
workbook.write(fileOutputStream);
fileOutputStream.close();
long end = System.currentTimeMillis();
System.out.println((double) (end-begin)/1000);
System.out.println("生成完毕");
}
完成时间
大文件写SXSSF(速度最快效率最高)
为了解决XSSF中写文件速度太慢的问题,采用缓存机制,但是会存在临时文件,需要删除
清除临时文件 ((SXSSFWorkbook) workbook).dispose();
String PATH = "D:\\code\\springboot\\springboot-resume\\springboot-resume";
@Test
public void SXssfBigExcel() throws Exception {
long begin = System.currentTimeMillis();
//1、创建一个工作簿
Workbook workbook = new SXSSFWorkbook();
//2、创建一个工作表
Sheet sheet =workbook.createSheet("SXssfBigExcel工作表");
//3、创建一个行
for (int rowNumber = 0; rowNumber < 150000; rowNumber++){
Row row = sheet.createRow(rowNumber);
for(int cellNumber = 0;cellNumber<10;cellNumber++){
Cell cell = row.createCell(cellNumber);
cell.setCellValue(cellNumber);
}
}
//生成一张表
FileOutputStream fileOutputStream = new FileOutputStream(PATH + "XssfBigExcel工作表.xlsx");
workbook.write(fileOutputStream);
fileOutputStream.close();
//清除临时文件
((SXSSFWorkbook) workbook).dispose();
long end = System.currentTimeMillis();
System.out.println((double) (end-begin)/1000);
System.out.println("生成完毕");
}
完成时间: