优点:可以写非常大的数据量.如100万条甚至更多,写速度非常快,占用更少的
注意
1 过程中会产生临时文件,需要清理临时文件
2 默认由100条记录被保存在内存中,如果超过这数量,则最前面的数据被写入临时文件,当然缓存数量也可以自定义
3 如果自定义内存中数据的数量,可以使用new SXSSFWorkbook(数量)
SXSSF循环插入100000条数据
package com.wyh.Test; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.junit.Test; import java.io.FileOutputStream; /** * @program: JavaExecl * @description: 大数据量写03版本 * @author: 魏一鹤 * @createDate: 2021-12-14 23:31 **/ public class BigDateExcelWrite07Super { //全局路径,供我们操作使用方便 static String path = "D:\\Tools\\JavaWorkSpace\\JavaExecl\\"; @Test public void BigDateExcelWrite07Super() throws Exception { //开始时间 用于计算时间差 long beginTime = System.currentTimeMillis(); //创建工作簿 07版本的使用XSSF Workbook workbook = new SXSSFWorkbook(); //创建工作表 这里就不给它命令了 按照默认的来 Sheet sheet = workbook.createSheet(); //写入数据 循环插入65536行数据,03版的HSSF最多只能插入65536行 for (int rowNum = 0; rowNum < 100000; rowNum++) { //循环创建行 Row row = sheet.createRow(rowNum); for(int cellNum=0;cellNum<10;cellNum++){ //循环插入列 Cell cell = row.createCell(cellNum); //循环设置值 cell.setCellValue(cellNum); } } System.out.println("生成excel表完毕"); //037版本的后缀是xlsx //开启文件流 FileOutputStream fileOutputStream = new FileOutputStream(path + "BigDateExcelWrite07Super.xlsx"); //开始写excel workbook.write(fileOutputStream); //关闭流 fileOutputStream.close(); //由于SXSSF会产生临时文件,这里我们需要清除下临时文件 ((SXSSFWorkbook) workbook).dispose(); //结束时间 long endTime = System.currentTimeMillis(); //输出花费的时间 System.out.println("花费的时间:"+(double)(endTime - beginTime)/1000); } }
运行发现,excel也正常生成了,但是它(SXSSF)的速度比XSSF快的多
查看我们的super
这就是我们的临时文件,随着我们把文件的关闭,临时文件也会随之消失